**Last updated**: 17 November 2025 | [**Change log**](/products/apms/changelog/) # PayPal A secure and globally accepted online payment transfer. Note Make yourself familiar with our [API Principles](/products/reference/api-principles) to ensure a resilient integration. details summary Product Overview ### Why use PayPal PayPal is a global payment method with strong consumer recognition and trust. It is also one of the most popular APMs in the world. PayPal opens up a large customer base who already have PayPal accounts and can make purchases with a payment flow that they are comfortable with. It is accepted in over 200 countries, supports 25 currencies and is a mainstay of APM payments. ### Feature summary | Payment type | Countries | Recurring | Reversals | Partial Reversals | Disputes | Auth only | Auth and Settlement (Sale) | | --- | --- | --- | --- | --- | --- | --- | --- | | Digital Wallet | Global acceptance | ❌ | ✅ | Partial refund - yesPartial cancel- No | Handled directly via PayPal | ✅ | ✅ | ### Acceptance currencies | Currency | Currency Codes | | --- | --- | | Australian Dollar | AUD | | Brazilian Real | BRL | | Canadian Dollar | CAD | | Czech Koruna | CZK | | Danish Krone | DKK | | Euro | EUR | | Hong Kong Dollar | HKD | | Hungarian Forint | HUF | | Indian Rupee | INR | | Israeli New Shekel | ILS | | Japanese Yen | JPY | | Malaysian Ringgit | MYR | | Mexican Peso | MXN | | New Taiwan Dollar | TWD | | New Zealand Dollar | NZD | | Norwegian Krone | NOK | | Philippine Peso | PHP | | Polish Złoty | PLN | | Pound Sterling | GBP | | Singapore Dollar | SGD | | Swedish Krona | SEK | | Swiss Franc | CHF | | Thai Baht | THB | | United States Dollar | USD | ## Payment flows There are two different ways to integrate PayPal: - Redirect URL mechanism - Smart Button ### Redirect URL Your customer's are redirected to a web browser to log into PayPal ### Smart Button Your customer clicks on the Smart Button, a pop-up window opens on top of their payment screen. You must integrate using the PayPal SDK using the [JavaScript SDK script configuration developer guide](https://developer.paypal.com/sdk/js/configuration/). Important The `payment-source` within the Paypal SDK must be "paypal" when integrating with Access Worldpay. This enables the PayPal option within the SDK. Other payment methods, offered by the PayPal SDK, will not work with Access Worldpay. You can also customize the Paypal Smart button. The options are: * the size, color and shape of the button * the language that appears on the buttons * the layout of the button: horizontal or vertical ## Set your headers Setting your headers is an important part of an API request. The headers represent the meta-data associated with your API request. ``` Authorization: {your_credentials} Content-Type: application/json WP-Api-Version: 2023-06-01 ``` | Header | Description | | --- | --- | | `Authorization` | We use the `Authorization` header to identify and authenticate you within Access Worldpay. You **must** use the `Authorization` header for any request you send to our APM API. | | `Content-Type` | We require the `Content-Type` header if the request you're sending includes a request body, and if the HTTP method is a `POST` or a `PUT`. | | `WP-Api-Version` | We use the `WP-Api-Version` header to identify which version of our APM API you are using. You **must** use the `WP-Api-Version` header for any request you send to our API. | If you're using both the `Content-Type` and `WP-Api-Version` headers, they must match. Note Replace `{your_credentials}` with your base64-encoded Basic Auth username and password. To get your Access Worldpay credentials contact your Implementation Manager. ## Request `POST` `https://try.access.worldpay-bsh.securedataplatform.com/apmPayments` ### Example request ### Parameters | Parameter | Required? | Description | Data type | Length | | --- | --- | --- | --- | --- | | `merchant` | ✅ | An object that contains information about the merchant. | Object | N/A | | `merchant.entity` | ✅ | Direct your payment to assist with billing, reporting and reconciliation. This is mandatory for Authentication and Queries.Contact your Implementation Manager for more details. | String | Must be between 1 and 32 characters. | | `transactionReference` | ✅ | A unique reference generated by you that is used to identify a payment throughout its lifecycle. See [transaction reference format](/products/reference/formatting#transaction-reference-format). | String | Must be between 1 to 64 characters. | | `instruction` | ✅ | An object that contains all the information related to the payment. | Object | N/A | | `instruction.narrative` | ✅ | An object that helps your customers better identify you on their statement. | Object | See our [formatting rules](/products/reference/formatting#narrative-format) | | `instruction.narrative.line1` | ✅ | The first line of the narrative which appears on your customer's statement (If a character is not supported it is replaced with a space.).See [narrative `line1` format](/products/reference/formatting#narrative-line1) for more details. | Object | 24 | | `instruction.value` | ✅ | An object that contains information about the payment transaction. | Object | N/A | | `instruction.value.amount` | ✅ | The payment amount. This is a whole number with an exponent e.g. if exponent is two, 250 is 2,50. You can find the relevant exponent in our [currency table](/products/reference/supported-countries-currencies#iso-currency-codes). | Integer | N/A | | `instruction.value.currency` | ✅ | The payment currency. Refer to the individual APM page for supported currencies. | Integer | 3 | | `instruction.paymentInstrument` | ✅ | An object that contains information about the payment method. | Object | N/A | | `instruction.paymentInstrument.type` | ✅ | An object that contains the payment type and details. It defines which alternative payment method you wish to use. For PayPal the value is `paypal`. | Object | N/A | | `instruction.paymentInstrument.requestAutoSettlement` | ❌ | Settles the transaction automatically when set to "true". | Object | Boolean "true" or "false". Default: "false". | | `paymentInstrument.shopperEmailAddress` | ❌ | The email address of your customer. | String | N/A | | `instruction.paymentInstrument.cancelURL` | ❌ | When your customer cancels a transaction, we redirect your customer to that cancel URL. | String | N/A | | `instruction.paymentInstrument.failureURL` | ❌ | When a payment fails, we redirect your customer to the failure URL. | String | N/A | | `instruction.paymentInstrument.pendingURL` | ❌ | When we receive the payment result for a pending payment transaction, we redirect your customer to that pending URL. | String | N/A | | `instruction.paymentInstrument.successURL` | ❌ | When we receive the payment result for a successful payment, we redirect your customer to that success URL. | String | N/A | | `paymentInstrument.billingAddress` | ❌ | The billing address of your customer. | Object | N/A | | `paymentInstrument.billingAddress.address1` | Conditional | First line of the billing address. **Condition:** Must be provided if you send `paymentInstrument.billingAddress`. | String | 1-85 | | `paymentInstrument.billingAddress.address2` | ❌ | Second line of the billing address. | String | 0-85 | | `paymentInstrument.billingAddress.address3` | ❌ | Third line of the billing address. | String | 0-85 | | `paymentInstrument.billingAddress.city` | ❌ | The city of the billing address. | String | 0-50 | | `paymentInstrument.billingAddress.countryCode` | Conditional | The country of the billing address. **Condition:** Must be provided if you send `paymentInstrument.billingAddress`. Follows [alpha 2 ISO 3166-1](/products/reference/supported-countries-currencies#iso-country-codes) standard. | String | 2 | | `paymentInstrument.billingAddress.postalCode` | Conditional | The poste code of the billing address. **Condition:** Must be provided if you send `paymentInstrument.billingAddress`. | String | 1-15 | | `paymentInstrument.billingAddress.state` | ❌ | The state of the billing address. | String | 1-50 | | `paymentInstrument.shippingAddress` | ❌ | The shipping address of your customer. | Object | N/A | | `paymentInstrument.shippingAddress.address1` | Conditional | First line of the shipping address. **Condition:** Must be provided if you send `paymentInstrument.shippingAddress`. | String | 1-85 | | `paymentInstrument.shippingAddress.address2` | ❌ | Second line of the shipping address. | String | 0-85 | | `paymentInstrument.shippingAddress.address3` | ❌ | Third line of the shipping address. | String | 0-85 | | `paymentInstrument.shippingAddress.city` | ❌ | The city of the shipping address. | String | 0-50 | | `paymentInstrument.shippingAddress.countryCode` | Conditional | The country of the shipping address. **Condition:** Must be provided if you send `paymentInstrument.shippingAddress`. Follows [alpha 2 ISO 3166-1](/products/reference/supported-countries-currencies#iso-country-codes) standard. | String | 2 | | `paymentInstrument.shippingAddress.postalCode` | Conditional | The poste code of the shipping address. **Condition:** Must be provided if you send `paymentInstrument.shippingAddress`. | String | 1-15 | | `paymentInstrument.shippingAddress.state` | ❌ | The state of the shipping address. | String | 1-50 | Recommendation We suggest you provide the `cancelURL`,`failureURL`, `pendingURL` and `successURL` attribute to redirect your customer to, once you have received the payment result. ## Response #### Successful request response * an HTTP code 201 * an id which is unique to the payment - we recommend storing the "id" as this can be used to manage the payment later * a url to redirect your customer to the APM provider to complete the payment * a link to query the payment status * an object which will give flow information such as `method` (e.g. `paypal`), type (`sdk` for a Smart Button flow or `redirect` for a Redirect URL flow) and an sdk token Note * for the Smart Button flow use the `sdkReference` to generate the Smart Button * for the redirect flow use the url in the response to redirect your customer ### Example Response { "paymentId": "nFxASqw-LV9HE_rr1mMONP6OuaBhNYiq0jRwvvUBRLffpu0O_8mOnTpFSIM9gnTSg8thuF8qvuzMKHjhAUKA-SBywF4F_ufX78jkgX7yoPwA8HF_HMLM0RSLDKrlDpMxs5bSRRbjItu_Me3kIkraos_XGMXXDzWYsmzASPr6BGo", "lastEvent": "pending", "_links": { "self": { "href": "https://access.worldpay-bsh.securedataplatform.com/apmPayments/nFxASqw-LV9HE_rr1mMONP6OuaBhNYiq0jRwvvUBRLffpu0O_8mOnTpFSIM9gnTSg8thuF8qvuzMKHjhAUKA-SBywF4F_ufX78jkgX7yoPwA8HF_HMLM0RSLDKrlDpMxs5bSRRbjItu_Me3kIkraos_XGMXXDzWYsmzASPr6BGo" } }, "_actions": { "confirmPayment": { "href": "https://access.worldpay-bsh.securedataplatform.com/apmPayments/nFxASqw-LV9HE_rr1mMONP6OuaBhNYiq0jRwvvUBRLffpu[…]rlDpMxs5bSRRbjItu_Me3kIkraos_XGMXXDzWYsmzASPr6BGo/confirmations" } }, "paymentInstrument": { "method": "paypal", "type": "sdk", "sdkReference": "2HG28153DX910101U" } } Note In case of an error, you can get further information in our [error reference](/products/reference/worldpay-error-responses). ### PayPal Smart Button flow #### Payment confirmation Once your customer has closed the PayPal iframe, you must confirm the payment when using the PayPal Smart Button. This is done by using the `confirmPayment` href returned in the payment request response. Make a POST request on the `link:actions` action link returned in your payment response. `POST` `https://try.access.worldpay-bsh.securedataplatform.com/apmPayments/nFxASqw-LV9HE_rr1mMONDTNO21DI7iBqIBDP8tbNT_pHfdVKepSMngqe9EDiBI1pHXEu-SbvqJyvSludyCd-2L21mL7uoB8zl62Ayz7E3GblXYsLnrW2-IZDMChfXfwWt7xrjVsKEPMGearp4PdIQp8hQ6k4_KTkZa_frsM4TQ/confirmations` Note No request body is needed for this request. **Next Steps** [Manage your PayPal payment](/products/apms/20230601/manage)