Skip to main content

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 MethodCapture Context allowedPaymentTypesCapture Context completeMandate.typeSeparate Capture?Payment ConfirmationCustomer Country (Country Code)Customer ISO Currency Code
PayPalPAYPALAUTH or PREFER_AUTHYesDelayedGlobalAUD, CAD, CHF, CZK, DKK, EUR, GBP, HKD, NOK, NZD, PLN, SEK, SGD, and USD
PayPalPAYPALCAPTURENoImmediateGlobalAUD, CAD, CHF, CZK, DKK, EUR, GBP, HKD, NOK, NZD, PLN, SEK, SGD, and USD
VenmoVENMOAUTH or PREFER_AUTHYesDelayedUnited States (US)USD
VenmoVENMOCAPTURENoImmediateUnited 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:

Opt in to PayPal on Unified Checkout

Follow these steps to opt in to the PayPal payment method in Unified Checkout:

  1. Add PayPal to your integration by adding PAYPAL to the allowedPaymentTypes field within the capture context request.

  2. Set the completeMandate.type field value to AUTH, CAPTURE, or PREFER_AUTH.

    You can perform a sale and capture the funds immediately if you include the completeMandate.type field in the capture context request and set the value to CAPTURE.

    You can capture the funds later if you include the completeMandate.type field in the capture context request and set the value to AUTH. 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.type field to PREFER_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.

  3. Include these required fields in the capture context request:

    • orderInformation.amountDetails.currency
    • orderInformation.amountDetails.taxAmount
    • orderInformation.amountDetails.totalAmount
    • orderInformation.lineItems[].productDescription
    • orderInformation.lineItems[].productName
    • orderInformation.lineItems[].productSKU
    • orderInformation.lineItems[].quantity
    • orderInformation.lineItems[].taxAmount
    • orderInformation.lineItems[].typeOfSupply
    • orderInformation.lineItems[].unitPrice
  4. Include these optional fields in the capture context request:

    • buyerInformation.dateOfBirth
    • buyerInformation.language
    • buyerInformation.personalIdentification[].id
    • buyerInformation.personalIdentification[].type
    • clientReferenceInformation.reconciliationId
    • merchantInformation.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 sees PAYPAL * Candy Shop on their bank statement.
    • orderInformation.amountDetails.taxDetails.taxId
    • orderInformation.amountDetails.taxDetails.type
    • orderInformation.billTo.address1
    • orderInformation.billTo.company.name
    • orderInformation.billTo.country
    • orderInformation.billTo.email
    • orderInformation.billTo.firstName
    • orderInformation.billTo.lastName
    • orderInformation.billTo.locality
    • orderInformation.billTo.phoneNumber
    • orderInformation.invoiceDetails.invoiceNumber
    • orderInformation.invoiceDetails.productDescription
    • orderInformation.lineItems[].totalAmount
    • orderInformation.shipTo.country
    • orderInformation.shipTo.locality
    • orderInformation.shipTo.postalCode
    • paymentInformation.customer.customerId
    • processingInformation.processingInstruction: set this field to ORDER_SAVED_EXPLICITLY to 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.organizationId
  • organizationInformation.businessInformation.name
  • organizationInformation.businessInformation.websiteUrl
  • organizationInformation.businessInformation.merchantCategoryCode
  • productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.enabled: set to true.
  • productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.features.venmo.enabled: set to true to enable Venmo on Unified Checkout.
  • productInformation.selectedProducts.payments.unifiedCheckout.subscriptionInformation.features.portfolioAccessofSensitiveData.enabled: set to true to enable portfolio access to sensitive data.

Include these required fields in the PECS API request:

Required Fields for Enabling Venmo Using the PECS API
  • organizationId
  • payments.unifiedCheckout.subscriptionInformation.enabled: set to true.
  • payments.unifiedCheckout.subscriptionInformation.features.venmo.enabled: set to true to enable Venmo on Unified Checkout.
  • payments.unifiedCheckout.subscriptionInformation.features.portfolioAccessofSensitiveData.enabled: set to true to 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:

  1. Add Venmo to your integration by adding VENMO to the allowedPaymentTypes field object within the capture context request.

  2. Set the completeMandate.type field value to CAPTURE or PREFER_AUTH.

    You can capture the funds immediately if you include the completeMandate.type field 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.type field to PREFER_AUTH. The funds are captured immediately for the online bank transfer.

  3. Include these required fields in the capture context request:

    • orderInformation.amountDetails.currency
    • orderInformation.amountDetails.taxAmount
    • orderInformation.amountDetails.totalAmount
    • orderInformation.lineItems[].productDescription
    • orderInformation.lineItems[].productName
    • orderInformation.lineItems[].productSKU
    • orderInformation.lineItems[].quantity
    • orderInformation.lineItems[].taxAmount
    • orderInformation.lineItems[].unitPrice
  4. Include these optional fields in the capture context request:

    • buyerInformation.dateOfBirth
    • buyerInformation.language
    • buyerInformation.personalIdentification[].id
    • buyerInformation.personalIdentification[].type
    • clientReferenceInformation.reconciliationId
    • merchantInformation.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 sees PAYPAL * Candy Shop on their bank statement.
    • orderInformation.amountDetails.taxDetails.taxId
    • orderInformation.amountDetails.taxDetails.type
    • orderInformation.billTo.address1
    • orderInformation.billTo.company.name
    • orderInformation.billTo.country
    • orderInformation.billTo.email
    • orderInformation.billTo.firstName
    • orderInformation.billTo.lastName
    • orderInformation.billTo.locality
    • orderInformation.billTo.phoneNumber
    • orderInformation.invoiceDetails.invoiceNumber
    • orderInformation.invoiceDetails.productDescription
    • orderInformation.lineItems[].totalAmount
    • orderInformation.lineItems[].typeOfSupply.type
    • orderInformation.shipTo.country
    • orderInformation.shipTo.locality
    • orderInformation.shipTo.postalCode
    • paymentInformation.customer.customerId
    • processingInformation.processingInstruction: set this field to ORDER_SAVED_EXPLICITLY to 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.

Last published: September 29, 2026