PayPal is a globally renowned online payment system established in 1998. It offers secure and diverse payment options in over 200 countries.
PayPal supports transactions in many currencies and is especially popular for its customer-friendly interface and protection of sensitive financial information.
Payment type Wallet
Payment flow Redirect
Integration type API Reference / Payment Form / Payment Page / Payment Link
Countries Global
Currencies Multiple ( currencies Reference AUD, BRL, CAD, CHF, CNY, CZK, DKK, EUR, GBP, HKD, HUF, ILS, JPY, MXN, MYR, NOK, NZD, PHP, PLN, SEK, SGD, THB, TWD, USD)
*see processing notes for specific currencies in the principles of operation.Recurring Yes
Refund Yes
Partial refunds Yes
Multiple partial refunds Yes
Chargeback Yes
Principle of operation
- Order initiation
The system creates an order for customers to select PayPal. - Selection at checkout
Customer selects PayPal at checkout, links bank accounts or cards, or uses their PayPal balance for transactions. - Authentication and authorization
Customer authorizes payment through PayPal account or balance. - Payment initiation
Tokenizing PayPal payment information during the first transaction allows a customer to complete future payments with a single tap. The tokenization process also supports subscriptions models by handling recurring transactions with a PayPal payment token. - Payment confirmation
Payment is completed through PayPal. Customer authorizes payment through their PayPal account or balance. - Merchant notification
Merchant is notified and tokenizes PayPal details for future use.
For
Currencies
such as COP, CRC, HUF, LAK, RSD, and TWD, you are required to submit the amount as an integer with two zeros at the end, for example, 10000 or 1226800. This ensures that the amount transferred to PayPal is correctly formatted and avoids rounding issues.
By adhering to this format, you ensure that PayPal processes the exact amount as intended. If this format is not followed, PayPal rounds the amount, which could lead to inaccuracies. For example, an amount of XXX0.99 may be rounded to XXX1.00, or XXX0.01 may be rounded up to XXX1.00. This potentially affects the transaction’s precision and leads to discrepancies in financial records.
PayPal prevent alerts offer a proactive way to manage disputes, notifying merchants of potential chargebacks with a 20-hour window to issue refunds or contest claims. Furthermore, PayPal dispute API report or received PayPal dispute Webhook provides comprehensive information about each dispute. PayPal risk metrics should also be considered to track and manage disputes and chargebacks effectively.
Solidgate no longer displays PayPal orders in APM report and Hub where a button was shown, but no payment occurred. Previously, Solidgate returned such orders in the created status created and transferred them to declined 0.02 later.Integration flow
- Receive PayPal sandbox credentials from your Account Manager or request the Solidgate support team.
- Follow the detailed documentation after receiving the API keys for the PayPal sandbox environment.
- Initiate the payment by init payment API request to create the order, or add the PayPal button to your payment form, set it up as a payment option on the payment page, or generate a payment link with PayPal as the selected method.
- Customize the appearance and behavior of the PayPal button on payment form by setting parameters such as color, shape, and label.

Description
Color Reference of the PayPal button.gold
PayPal globally recognized gold color, confirmed by research and carefully selected for optimal conversion, enhances your website with PayPal’s renowned recognition and preference.blue
If gold is not suitable for your site, consider using the PayPal blue button, a brand color recognized for fostering a sense of trust and security in the customer experience, as supported by research.silverwhiteblack
If gold or blue does not match your site’s design, consider using the silver, white, or black buttons, which are less attention-grabbing and thus serve as a secondary color alternative.
Default
gold
Description
Shape Reference of the PayPal button.pillrectshape
Default
pill
Description
Label Reference displayed on the PayPal button.buynow
Displays the PayPal Buy Now button and initializes the checkout flow.checkout
Displays the Checkout button.paypal
Displays the PayPal logo.pay
Displays the Pay With PayPal button and initializes the checkout flow.
Default
buynow
Description
Height Reference of the PayPal button.Default
By default, the button adapts to the size of its container element.
After the payment is made, all information about the payer can be obtained from the
updated alternative order
Webhook
and
check order status
API
response for further processing.
It provides key information, such as the payer’s email, first name, and last name, crucial for identifying the payer in the transaction process.
Subscribe to these PayPal button events to track the transaction status:
order-started-processing
Description
The event marks the initiation of order processing, signaling the start of the payment process. It lays the foundation for transaction tracking.
The follow-up order-processed event completes the cycle by delivering a status-response with details on the order and transaction, crucial for analytics and customer notifications.
order-approvedDescription
Confirms the order’s approval for processing, signaling transaction progression.
order-processedDescription
Marks transaction completion with a status-response detailing the order.
order-already-processedDescription
Indicates an attempt to reprocess an already completed order, aiming to prevent duplicates.
button-readyDescription
Signals that the PayPal button is operational and ready for the customer’s action.
button-errorDescription
Alerts to issues with PayPal button rendering or initialization, crucial for troubleshooting.
button-clickDescription
Triggered by the customer’s interaction with the PayPal button, useful for tracking engagement.
button-cancelDescription
It occurs when a payment process is cancelled post-initiation.
PayPal button initialization<div id="paypal-button"></div>
<script>
var elem = document.getElementById('paypal-button');
elem.addEventListener('order-started-processing', function (e) {
console.log('order-started-processing',e);
}, false);
elem.addEventListener('order-started-approved', function (e) {
console.log('order-approved',e);
}, false);
elem.addEventListener('order-processed', function (e) {
console.log('order-processed',e);
}, false);
elem.addEventListener('order-already-processed', function (e) {
console.log('order-already-processed', e)
}, false);
elem.addEventListener('button-ready', function (e) {
console.log('button-ready', e)
}, false);
elem.addEventListener('button-error', function (e) {
console.log('button-error',e);
}, false);
elem.addEventListener('button-click', function (e) {
console.log('button-click',e);
}, false);
elem.addEventListener('button-cancel', function (e) {
console.log('button-cancel',e);
}, false);
<script type="text/javascript"
src="https://gate.solidgate.com/widget/9d81b91uisf234bhjb23jhb562cc5101"
data-label="checkout"
data-color="blue"
data-shape="rect"
>
</script>
Handle PayPal errors
Specific errors may occur when a PayPal payment attempt using a PayPal button fails.
-
0.02
Order expired
This error occurs when an order is created during PayPal button initialization, but no payment attempt is made. PayPal orders are generated with each successful initiation request for the PayPal button, but customers may choose to pay via card or select an alternative payment method instead of PayPal. The PayPal button remains active for 7 days. If no PayPal payment attempt is made during this time, the order is automatically declined with the 0.02 error code. -
2.02
Invalid amount
The request with a zero-amount payment is declined. It can be triggered by various factors, encompassing incorrect input, transaction limits set by the acquirer or card issuer, or restrictions on specific card types such as prepaid cards. -
3.11
Recurring payment
It occurs when a subscription or 1-click payment is declined. This error indicates that the next subscription or a 1-click payment using a recurring token via this payment method is not allowed and should not be retried. -
5.10
Processor does not support requested API method
This error occurs when the processor does not support the requested API method. Make sure you use only supported methods when communicating with the gateway.
Besides the listed errors, there are cases when, after using the PayPal button, the customer is asked to enter payment card details. This usually happens because the PayPal account has an invalid funding source:
- No card or bank account is linked to the PayPal account
- Insufficient funds
Consider testing payments in a PayPal sandbox environment to simulate failed transactions. This helps ensure your system can handle negative flows and other scenarios correctly.
Billing agreement
A billing agreement is a contract between the customer and your platform. It permits you to withdraw funds from their account in the future, eliminating the need for them to log into their PayPal account for each follow-up transaction. This streamlines the payment process, ensuring seamless transactions without additional sign-ins.
It is recommended to consult the official PayPal documentation Reference for comprehensive understanding and guidance.This token is especially useful for Merchant Initiated Transactions (MITs) in subscription models, as it allows for automatic, recurring billing without requiring the customer’s presence on the site.
This seamless integration offers convenience for both the merchant and the customer, ensuring transactions are smooth and uninterrupted.Create payment token
To create a payment token via Solidgate, initiate a billing agreement with PayPal that returns a token following a successful customer approval. Set the amount to 0 .
This token can be used for follow-up charges. amount integer =0 RequiredDescription
Order amount.
Value
0
Description
Three-letter ISO-4217 Wiki currency code.
Additionally, it is imperative to specify currencies for multi-currency subscription-based products, such as in USD and EUR.Value
EUR
Description
Customer’s email address.
Mandatory but does not affect payment.Example
user-one@mail.com
{
"payment_method": "paypal-vault",
"order_id": "buy_73243.pay_token",
"amount": 0,
"currency": "EUR",
"order_description": "obtain pay token",
"customer_email": "user-one@mail.com",
"ip_address": "109.234.2.87",
"platform": "WEB"
}
Retrieve the script_url from the response and embed it on the webpage.
{
"order": {
"method": "paypal-vault",
"amount": 0,
"currency": "EUR",
"order_id": "buy_73243.pay_token"
},
"pay_form": {
"script_url": "https://gate.solidgate.com/widget/5f9f74abec73952652ed964d4efd8.js"
},
"transactions": []
}
Upon successful script loading, a PayPal button is rendered on the page for payment. Once a customer authorizes the payment, the event contains the order and customer information.
Event handling script<script>
var elem = document.getElementById('paypal-button');
elem.addEventListener('order-approved', function (e) {
console.log('order-approved', e.detail.data)
}, false);
</script>
Order status can be extracted from e.detail.data, which follows the standard structure of an order status response.
The same data can also be obtained via an H2H check order status API method. The order-approved event is also duplicated via updated alternative order Webhook , allowing real-time status updates.
Importantly, saveorder
token
for future recurring payments.
Follow-up charges
Make recurring charges following the recurring API billing procedures. Comply with all validation and requirements set.
Use the previously obtained payment token to initiate the transaction. Payment{
"payment_method": "paypal-vault",
"token": "435ft34f5345gh34f5h34g5f3h4",
"order_id": "buy_73243",
"amount": 10,
"currency": "EUR",
"order_description": "package purchase",
"customer_email": "user-one@mail.com",
"ip_address": "109.234.2.87",
"platform": "WEB"
}
Subscription payment
{
"payment_method": "paypal-vault",
"token": "435ft34f5345gh34f5h34g5f3h4",
"order_id": "buy_73243",
"product_id": "faca5fc6-3160-4444-84fe-403199ca07d3",
"order_description": "package purchase",
"customer_account_id": "4dad42f808",
"customer_email": "user-one@mail.com",
"ip_address": "109.234.2.87",
"platform": "WEB"
}
Buy Now Pay Later
PayPal’s Buy Now Pay Later (BNPL), also referred to as Pay Later offers, allows customers to split purchases into multiple payments, while the merchant receives the full amount upfront. This improves affordability for customers and drives higher conversion and average order value for merchants.
BNPL is available as part of the PayPal Checkout experience. After selecting PayPal at checkout and logging in, eligible customers are presented with Pay Later options.
PayPal assumes the credit risk and immediately pays the merchant the full purchase amount. The customer then repays PayPal over time based on the chosen installment plan.
Per PayPal compliance guidelines, the Pay Later option should be shown across multiple locations to maximize visibility and eligibility checks:
- Homepage: Announce the availability of PayPal Pay Later on your store.
- Product list & product detail pages: Show estimated installment amounts to encourage higher-value purchases.
- Cart page: Remind customers they can split payments.
- Checkout page: Clearly surface BNPL as a payment option.
Key conditions:
- Do not display both the BNPL and billing agreement buttons on the same page to avoid confusion and potential drops in conversion rates
- For one-time purchases, BNPL is suitable, but for subscriptions, the billing agreement method should be used instead This ensures that recurring payments are managed correctly in the billing agreement logic.
- Available in only seven countries: Australia, Germany, Spain, France, the UK, Italy, and the USA If a non-eligible buyer clicks PayPal, they still reach PayPal, but Pay Later is not offered.
- Minimum payment threshold usually applies, varies by country
- Localized loan terms differ by country, including interest rates and durations
Integration flow
To enable:
-
Ensure
- your PayPal merchant account is registered in one of the BNPL-supported countries Reference
- feature is activated by prior agreement through Merchant support
- Configure distinct channels and credentials for PayPal recurring payments model via billing agreement and PayPal BNPL one-time payment model. A single channel cannot serve both flows simultaneously.
- Implement UI to show buttons separately from each other, PayPal and PayPal BNPL buttons, using the same integration path as the standard payment form, set it up as option on the payment page, or generate a payment link.
- Follow PayPal's messaging and placement rules to highlight the Pay Later feature at all stages of the purchase.
In Solidgate Hub and webhooks, a BNPL transaction appears as a standard PayPal payment. BNPL details remain within PayPal and are not flagged separately.