Alternative Payment Wallets
Digital wallets are secure applications or services that enable users to electronically store payment details, such as debit or credit cards.
For online transactions, the wallet securely passes a payment token to the merchant or payment processor. You do not handle sensitive customer data directly. This reduces friction at checkout, improves conversion rates, and enhances security through built-in authentication and tokenization.
Wallets are best suited for one-time online purchases and express checkout experiences. Support for subscriptions and recurring payments varies by wallet, so you must confirm compatibility if future charges or merchant-initiated transactions are required.
Unified Checkout supports these wallet-based payment options:
- PayPal
- Venmo
This table describes the available digital wallet payment methods:
| Payment Method | Capture Context allowedPaymentTypes | Capture Context completeMandate.type | Separate Capture? | Payment Confirmation | Customer Country (Country Code) | Customer ISO Currency Code |
|---|---|---|---|---|---|---|
| PayPal | PAYPAL | AUTH or PREFER_AUTH | Yes | Delayed | Global | AUD, CAD, CHF, CZK, DKK, EUR, GBP, HKD, NOK, NZD, PLN, SEK, SGD, and USD |
| PayPal | PAYPAL | CAPTURE | No | Immediate | Global | AUD, CAD, CHF, CZK, DKK, EUR, GBP, HKD, NOK, NZD, PLN, SEK, SGD, and USD |
| Venmo | VENMO | AUTH or PREFER_AUTH | Yes | Delayed | United States (US) | USD |
| Venmo | VENMO | CAPTURE | No | Immediate | United States (US) | USD |
PayPal
PayPal is a secure and convenient payment service that your customers can use to make payments without directly using their bank accounts or credit cards. PayPal gives your customers the option to pay in installments over time with PayPal Pay Later while giving you the full payment immediately. These installments are available:
- Pay in 3: pay in three installments. Available in the UK.
- Pay in 4: pay in four installments. Available in the US.
- Pay Monthly: pay in monthly recurring installments.
Board Merchants with PayPal
Before you can accept PayPal payments, your account must be boarded for PayPal. Portfolio users can board and enable their merchants for PayPal using the API or the Business Center:
Send a POST request to the Boarding Registration API to board PayPal:
POST /boarding/v1/registrations
POST /boarding/v1/registrations
If your organization is already boarded, you can add PayPal as a product using the PECS API instead:
POST /products/v1/product-setups
POST /products/v1/product-setups
Include these required fields in the Boarding Registration API request:
Required Fields for Enabling PayPal Using the BRS API
organizationInformation.organizationIdorganizationInformation.businessInformation.nameorganizationInformation.businessInformation.websiteUrlorganizationInformation.businessInformation.merchantCategoryCodeproductInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.enabled: set totrue.productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.features.payPal.enabled: set totrueto enable PayPal on Unified Checkout.productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.features.portfolioAccessofSensitiveData.enabled: set totrueto enable portfolio access to sensitive data.
Include these required fields in the PECS API request:
Required Fields for Enabling PayPal Using the PECS API
organizationIdpayments.unifiedCheckout.subscriptionInformation.enabled: set totrue.payments.unifiedCheckout.subscriptionInformation.features.payPal.enabled: set totrueto enable PayPal on Unified Checkout.payments.unifiedCheckout.subscriptionInformation.features.portfolioAccessofSensitiveData.enabled: set totrueto enable portfolio access to sensitive data.
{ "organizationInformation": { "organizationId": "stuartwickedfasteatz01", "parentOrganizationId": "apitester00", "type": "MERCHANT", "configurable": false, "businessInformation": { "name": "StuartWickedFastEatz", "address": { "country": "US", "address1": "123456 SandMarket", "locality": "ORMOND BEACH", "administrativeArea": "FL", "postalCode": "32176" }, "websiteUrl": "https://www.StuartWickedEats.com", "phoneNumber": "6574567813", "businessContact": { "firstName": "Stuart", "lastName": "Stuart", "phoneNumber": "6574567813", "email": "[email protected]" }, "merchantCategoryCode": "5999" } }, "productInformation": { "selectedProducts": { "payments": { "unifiedCheckout": { "subscriptionInformation": { "enabled": true, "features": { "payPal": { "enabled": true }, "portfolioAccessofSensitiveData": { "enabled": true } } } } } } }}{ "organizationId": "stuartwickedfasteatz01", "payments": { "unifiedCheckout": { "subscriptionInformation": { "enabled": true, "features": { "payPal": { "enabled": true }, "portfolioAccessofSensitiveData": { "enabled": true } } } } }}Follow these steps to board PayPal using the Business Center:
- In the left navigation panel, click Portfolio Management.
- Under Merchants, click Manage Merchants. The Manage Merchants page appears.
- Search for the organization on the Manage Merchants page.
- In the Search Results table, find the organization and click the eyeball icon. The Merchant Details page appears.
- In the Products section, click + Add Products. The Add a Product page appears.
- For the Alternative Payment Method product, click Enable. The Configure Alternative Payment Methods page appears.
- Select the PayPal checkbox and click Continue.
- Enter your PayPal details on the screen that appears.
- Click Save.
Opt in to PayPal on Unified Checkout
Follow these steps to opt in to the PayPal payment method in Unified Checkout:
Add PayPal to your integration by adding
PAYPALto theallowedPaymentTypesfield within the capture context request.Set the
completeMandate.typefield value toAUTH, CAPTURE, orPREFER_AUTH.You can perform a sale and capture the funds immediately if you include the
completeMandate.typefield in the capture context request and set the value to CAPTURE.You can capture the funds later if you include the
completeMandate.typefield in the capture context request and set the value toAUTH. When you capture the funds later, you must perform a capture using the payments API. See Captures for PayPal and Venmo.If you accept more than one payment type and must perform an authorization where funds are collected at a later time, set the
completeMandate.typefield toPREFER_AUTH. You must perform a capture using the payments API when an authorization is performed. A capture is performed automatically if an authorization is not allowed by the payment type.Include these required fields in the capture context request:
orderInformation.amountDetails.currencyorderInformation.amountDetails.taxAmountorderInformation.amountDetails.totalAmountorderInformation.lineItems[].productDescriptionorderInformation.lineItems[].productNameorderInformation.lineItems[].productSKUorderInformation.lineItems[].quantityorderInformation.lineItems[].taxAmountorderInformation.lineItems[].typeOfSupplyorderInformation.lineItems[].unitPrice
Include these optional fields in the capture context request:
buyerInformation.dateOfBirthbuyerInformation.languagebuyerInformation.personalIdentification[].idbuyerInformation.personalIdentification[].typeclientReferenceInformation.reconciliationIdmerchantInformation.merchantDescriptor.name: this field affects the name that customers see on their card statement. If the merchant is Candy Shop and passes this as their name, the customer seesPAYPAL * Candy Shopon their bank statement.orderInformation.amountDetails.taxDetails.taxIdorderInformation.amountDetails.taxDetails.typeorderInformation.billTo.address1orderInformation.billTo.company.nameorderInformation.billTo.countryorderInformation.billTo.emailorderInformation.billTo.firstNameorderInformation.billTo.lastNameorderInformation.billTo.localityorderInformation.billTo.phoneNumberorderInformation.invoiceDetails.invoiceNumberorderInformation.invoiceDetails.productDescriptionorderInformation.lineItems[].totalAmountorderInformation.shipTo.countryorderInformation.shipTo.localityorderInformation.shipTo.postalCodepaymentInformation.customer.customerIdprocessingInformation.processingInstruction: set this field toORDER_SAVED_EXPLICITLYto save the customer's payment credentials using the save-an-order follow-on request.
Venmo
Venmo is a mobile payment service that is owned by PayPal and enables your customers to make payments from their Venmo mobile application. Customers link their Venmo accounts to their bank accounts, debit cards, and credit cards to send and receive payments. Venmo is a secure and convenient payment service for your customers to make payments without directly using their bank accounts or credit cards.
Board Merchants with Venmo
Before you can accept Venmo payments, your account must be boarded for Venmo. Portfolio users can board and enable their merchants for Venmo using the API.
Send a POST request to the Boarding Registration API to board Venmo:
POST /boarding/v1/registrations
POST /boarding/v1/registrations
If your organization is already boarded, you can add Venmo as a product using the PECS API instead:
POST /products/v1/product-setups
POST /products/v1/product-setups
Include these required fields in the Boarding Registration API request:
Required Fields for Enabling Venmo Using the BRS API
organizationInformation.organizationIdorganizationInformation.businessInformation.nameorganizationInformation.businessInformation.websiteUrlorganizationInformation.businessInformation.merchantCategoryCodeproductInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.enabled: set totrue.productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.features.venmo.enabled: set totrueto enable Venmo on Unified Checkout.productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.features.portfolioAccessofSensitiveData.enabled: set totrueto enable portfolio access to sensitive data.
Include these required fields in the PECS API request:
Required Fields for Enabling Venmo Using the PECS API
organizationIdpayments.unifiedCheckout.subscriptionInformation.enabled: set totrue.payments.unifiedCheckout.subscriptionInformation.features.venmo.enabled: set totrueto enable Venmo on Unified Checkout.payments.unifiedCheckout.subscriptionInformation.features.portfolioAccessofSensitiveData.enabled: set totrueto enable portfolio access to sensitive data.
{ "organizationInformation": { "organizationId": "stuartwickedfasteatz01", "parentOrganizationId": "apitester00", "type": "MERCHANT", "configurable": false, "businessInformation": { "name": "StuartWickedFastEatz", "address": { "country": "US", "address1": "123456 SandMarket", "locality": "ORMOND BEACH", "administrativeArea": "FL", "postalCode": "32176" }, "websiteUrl": "https://www.StuartWickedEats.com", "phoneNumber": "6574567813", "businessContact": { "firstName": "Stuart", "lastName": "Stuart", "phoneNumber": "6574567813", "email": "[email protected]" }, "merchantCategoryCode": "5999" } }, "productInformation": { "selectedProducts": { "payments": { "unifiedCheckout": { "subscriptionInformation": { "enabled": true, "features": { "venmo": { "enabled": true }, "portfolioAccessofSensitiveData": { "enabled": true } } } } } } }}{ "organizationId": "stuartwickedfasteatz01", "payments": { "unifiedCheckout": { "subscriptionInformation": { "enabled": true, "features": { "venmo": { "enabled": true }, "portfolioAccessofSensitiveData": { "enabled": true } } } } }}Opt in to Venmo on Unified Checkout
Follow these steps to opt in to Venmo on Unified Checkout:
Add Venmo to your integration by adding
VENMOto theallowedPaymentTypesfield object within the capture context request.Set the
completeMandate.typefield value to CAPTURE orPREFER_AUTH.You can capture the funds immediately if you include the
completeMandate.typefield in the capture context request and set the value to CAPTURE.If you accept more than one payment type and must perform an authorization where funds are collected at a later time, set the
completeMandate.typefield toPREFER_AUTH. The funds are captured immediately for the online bank transfer.Include these required fields in the capture context request:
orderInformation.amountDetails.currencyorderInformation.amountDetails.taxAmountorderInformation.amountDetails.totalAmountorderInformation.lineItems[].productDescriptionorderInformation.lineItems[].productNameorderInformation.lineItems[].productSKUorderInformation.lineItems[].quantityorderInformation.lineItems[].taxAmountorderInformation.lineItems[].unitPrice
Include these optional fields in the capture context request:
buyerInformation.dateOfBirthbuyerInformation.languagebuyerInformation.personalIdentification[].idbuyerInformation.personalIdentification[].typeclientReferenceInformation.reconciliationIdmerchantInformation.merchantDescriptor.name: this field affects the name that customers see on their card statement. If the merchant is Candy Shop and passes this as their name, the customer seesPAYPAL * Candy Shopon their bank statement.orderInformation.amountDetails.taxDetails.taxIdorderInformation.amountDetails.taxDetails.typeorderInformation.billTo.address1orderInformation.billTo.company.nameorderInformation.billTo.countryorderInformation.billTo.emailorderInformation.billTo.firstNameorderInformation.billTo.lastNameorderInformation.billTo.localityorderInformation.billTo.phoneNumberorderInformation.invoiceDetails.invoiceNumberorderInformation.invoiceDetails.productDescriptionorderInformation.lineItems[].totalAmountorderInformation.lineItems[].typeOfSupply.typeorderInformation.shipTo.countryorderInformation.shipTo.localityorderInformation.shipTo.postalCodepaymentInformation.customer.customerIdprocessingInformation.processingInstruction: set this field toORDER_SAVED_EXPLICITLYto save the customer's payment credentials using the save-an-order follow-on request.
Verify Status for PayPal and Venmo
When the status of your payment request is PENDING, you can verify the status by sending a POST request to the URL that is included in the transactionStatus.url field in the webhook response:
{ "transactionStatus": { "url": "/pts/v2/refresh-payment-status/76406322771491323955899488", "method": "POST", "payload": { "clientReferenceInformation": { "applicationName": "unifiedCheckout" }, "processingInformation": { "actionList": ["AP_STATUS"] }, "paymentInformation": { "paymentType": { "method": { "name": "payPal" }, "name": "eWallet" } } } }, "transactionResult": { "details": { "submitTimeUtc": "2025-11-25T09:31:14Z", "processorInformation": { "sellerProtection": { "eligibility": "ELIGIBLE", "disputeCategories": ["ITEM_NOT_RECEIVED", "UNAUTHORIZED_TRANSACTION"] }, "transactionId": "14815899TN877504A", "orderStatus": "COMPLETED", "orderId": "74902340T07048209", "updateTimeUtc": "2025-11-25T09:33:48Z", "expirationTimeUtc": "2025-12-24T09:33:48Z" }, "orderInformation": { "amountDetails": { "totalAmount": "0.11", "currency": "USD" }, "billTo": { "email": "[email protected]", "lastName": "Doe", "firstName": "Jane" } }, "updateTimeUtc": "2025-11-25T09:33:48Z", "buyerInformation": { "merchantCustomerId": "JS4EXZRT68ED8" }, "message": "Successful", "createTimeUtc": "2025-11-25T09:33:48Z", "clientReferenceInformation": { "code": "default" }, "reconciliationId": "76406307371191323955899488", "status": "COMPLETED", "id": "76406322771491323955899488" }, "id": "76406322771491323955899488", "message": "Successful", "outcome": "COMPLETED", "status": "COMPLETED" }}You can also send a request to this endpoint to verify the status:
POST /pts/v2/refresh-payment-status/{id}
POST /pts/v2/refresh-payment-status/{id}
The {id} is the ID that is returned in the webhook response. For more information, see Webhooks.
Handle Responses
When Unified Checkout automatically processes a payment with autoProcessing set to true, or you have set autoProcessing to false and are using checkout.Complete(), you must handle both successful responses and various errors. After the payment is complete, the completeResponse field object contains information about the transaction outcome.
When a payment is processed successfully, you must parse the response to confirm the payment status, update your order records, and trigger any post-payment workflows. Post-payment workflows include sending confirmation emails or updating inventory. See Integration Examples.
Your error handling should account for specific cases such as COMPLETE_TRANSACTION_CANCELED and COMPLETE_TRANSACTION_FAILED. COMPLETE_TRANSACTION_CANCELED occurs when the user cancels the transaction, and COMPLETE_TRANSACTION_FAILED indicates that the consumer's transaction failed.
For wallet-based payments, only cancellation errors are returned. For information about possible errors that can occur when calling the complete API, see Error Handling.
Captures for PayPal and Venmo
When you set the completeMandate.type field value to AUTH or PREFER_AUTH, you must send a request to capture an authorized payment. Full and partial captures are supported. For capture endpoint details, see JavaScript Reference.
Example: Authorization Response from Unified Checkout
{ "details": { "clientReferenceInformation": { "code": "1753351101383" }, "orderInformation": { "amountDetails": { "currency": "USD", "totalAmount": "21.00" } }, "processorInformation": { "approvalCode": "AUTH456789", "responseCode": "00003", "responseDetails": "00003", "transactionId": "2016011808153910011808153AUTH" }, "reconciliationId": "04RYADD29YRO", "submitTimeUtc": "2025-07-24T09:58:21Z" }, "id": "7533511014286971803092", "message": "Request processed successfully.", "outcome": "AUTHORIZED", "status": "AUTHORIZED"}Response Status
responds to your capture request with one of these statuses:
FAILED: the capture request failed.PENDING: the capture request is accepted but not captured. Send a request to the check status service to retrieve status updates.SETTLED: the capture request is settled for the amount requested.
Related Payment Methods
Thanks for your feedback!
Last published: September 29, 2026