Skip to main content

Test and go live

Use the PayPal sandbox environment to ensure your integration works as expected and meets all business and technical requirements before you go live.

To test your integration:

  1. Test API calls with test values to simulate positive and negative responses
  2. Test large-batch file transfer
  3. Test AAC

Test API calls: use test values and simulate responses

To simulate Payouts API responses, inject the test values in the request payload or as a path parameter in the request URL. These methods allow you to trigger specific error responses without creating actual payouts.

Sample to inject test value in the request payload

TriggerTest valueSimulated error response
items[0]/noteERRPYO002SENDER_EMAIL_UNCONFIRMED
curl -X POST https://api-m.sandbox.paypal.com/v1/payments/payouts \
-H 'content-type: application/json' \
-H 'Authorization: Bearer <ACCESS-TOKEN>' \
-d '{
"sender_batch_header":
{
"sender_batch_id": "1524086406556",
"email_subject": "This email is related to simulation"
},
"items": [
{
"recipient_type": "EMAIL",
"receiver": "[email protected]",
"note": "ERRPYO002",
"sender_item_id": "15240864065560",
"amount":
{
"currency": "USD",
"value": "1.00"
}
}
]
}'

Sample to specify test value as path parameter

Path parameterTest valueSimulated error response
/v1/payments/payouts/ERRPYO015CLOSED_MARKET
curl -X GET https://api-m.sandbox.paypal.com/v1/payments/payouts/ERRPYO015 \
-H 'content-type: application/json' \
-H 'Authorization: Bearer <ACCESS-TOKEN>'

Test values

Use predefined test values to simulate a variety of positive and negative payout responses. This section provides the test values and their respective simulated responses for each API endpoint.

Note: Test values are case sensitive.

Create payout

Use the provided test values in the request payload to simulate both positive and negative responses.

Endpoint: POST v1/payments/payouts/

Positive response test values

TriggerTest valueSimulated response
items[0]/notePOSPYO001PAYLOAD WITH 201 RESPONSE CODE
items[0]/notePOSPYO003PAYLOAD WITH 201 RESPONSE CODE FOR VENMO

Negative response test values

TriggerTest valueSimulated error response
items[0]/noteERRPYO001SENDER_RESTRICTED
items[0]/noteERRPYO002SENDER_EMAIL_UNCONFIRMED
items[0]/noteERRPYO003AUTHORIZATION_ERROR
items[0]/noteERRPYO005INSUFFICIENT_FUNDS
items[0]/noteERRPYO006INTERNAL_ERROR
items[0]/noteERRPYO010VALIDATION_ERROR
items[0]/noteERRPYO011REQUIRED_SCOPE_MISSING
items[0]/noteERRPYO012SENDER_LOCKED
items[0]/sender_batch_idERRPYO013VALIDATION_ERROR FOR VENMO NOTE MISSING
items[0]/noteERRPYO014USER_BUSINESS_ERROR
items[0]/noteERRPYO035RATE_LIMIT_VALIDATION
items[0]/noteERRPYO036REQUEST_TIMEOUT_EXCEEDED
items[0]/noteERRPYO037SYNC_MODE_NOT_APPLICABLE
items[0]/noteERRPYO038NON_HOLDING_CURRENCY
items[0]/noteERRPYO039PREVIOUS_REQUEST_IN_PROGRESS
items[0]/noteERRPYO040CIP_NOT_VERIFIED

Show payout details

Use the provided test values as path parameters in the request URL to simulate both positive and negative responses.

Endpoint: GET v1/payments/payouts/

Positive response test values

Path parameterSimulated response
/v1/payments/payouts/POSPYO002PAYLOAD WITH 200 RESPONSE CODE

Negative response test values

Path parameterSimulated error response
/v1/payments/payouts/ERRPYOB005ACCOUNT_RESTRICTED
/v1/payments/payouts/ERRPYOB006ACCOUNT_UNCONFIRMED_EMAIL
/v1/payments/payouts/ERRPYOB007APPROVER_DENIED
/v1/payments/payouts/ERRPYOB008GAMER_FAILED_COUNTRY_OF_RESIDENCE_CHECK
/v1/payments/payouts/ERRPYOB009GAMER_FAILED_FUNDING_SOURCE_CHECK
/v1/payments/payouts/ERRPYOB010GAMING_INVALID_PAYMENT_FLOW
/v1/payments/payouts/ERRPYOB011NON_HOLDING_CURRENCY
/v1/payments/payouts/ERRPYOB012PENDING_RECIPIENT_NON_HOLDING_CURRENCY_PAYMENT_PREFERENCE
/v1/payments/payouts/ERRPYOB013SENDER_STATE_RESTRICTED
/v1/payments/payouts/ERRPYOB014SPENDING_LIMIT_EXCEEDED
/v1/payments/payouts/ERRPYOB015TRANSACTION_DECLINED_BY_TRAVEL_RULE
/v1/payments/payouts/ERRPYO015CLOSED_MARKET
/v1/payments/payouts/ERRPYO016CURRENCY_COMPLIANCE
/v1/payments/payouts/ERRPYO017CURRENCY_NOT_SUPPORTED_FOR_RECEIVER
/v1/payments/payouts/ERRPYO018DUPLICATE_ITEM
/v1/payments/payouts/ERRPYO019RECEIVER_ACCOUNT_LOCKED
/v1/payments/payouts/ERRPYO020RECEIVER_COUNTRY_NOT_ALLOWED
/v1/payments/payouts/ERRPYO021RECEIVER_UNCONFIRMED
/v1/payments/payouts/ERRPYO022RECEIVER_UNREGISTERED
/v1/payments/payouts/ERRPYO023RECEIVER_YOUTH_ACCOUNT
/v1/payments/payouts/ERRPYO024RECEIVING_LIMIT_EXCEEDED
/v1/payments/payouts/ERRPYO025REGULATORY_BLOCKED
/v1/payments/payouts/ERRPYO026REGULATORY_PENDING
/v1/payments/payouts/ERRPYO027RISK_DECLINE
/v1/payments/payouts/ERRPYO028SELF_PAY_NOT_ALLOWED
/v1/payments/payouts/ERRPYO029TRANSACTION_LIMIT_EXCEEDED
/v1/payments/payouts/ERRPYO030UNDEFINED
/v1/payments/payouts/ERRPYO031ZERO_AMOUNT
/v1/payments/payouts/ERRPYO032INVALID_RESOURCE_ID
/v1/payments/payouts/ERRPYO033INTERNAL_ERROR
/v1/payments/payouts/ERRPYO034INVALID_EMAIL
/v1/payments/payouts/ERRPYO060RECEIVER_ACCOUNT_LIMITATION

Cancel payout item

Use the provided test values as path parameters in the request URL to simulate both positive and negative responses.

Endpoint: POST v1/payments/payouts-item/payouts_item_id/cancel

Positive response test values

Path parameterSimulated response
/v1/payments/payouts-item/POSPOI002/cancelPAYLOAD WITH 200 RESPONSE

Negative response test values

Path parameterSimulated error response
/v1/payments/payouts-item/ERRPOI001/cancelINVALID_RESOURCE_ID
/v1/payments/payouts-item/ERRPYO004/cancelBATCH_NOT_COMPLETED
/v1/payments/payouts-item/ERRPYO007/cancelITEM_ALREADY_CANCELLED
/v1/payments/payouts-item/ERRPYO008/cancelITEM_CANCELLATION_FAILED
/v1/payments/payouts-item/ERRPYO009/cancelITEM_INCORRECT_STATUS

Show payout item details

Use the provided test values as path parameters in the request URL to simulate both positive and negative responses.

Endpoint: GET v1/payments/payouts-item/payouts_item_id

Positive response test values

Path parameterSimulated response
/v1/payments/payouts-item/POSPOI001PAYLOAD WITH 200 RESPONSE

Negative response test values

Path parameterSimulated error response
/v1/payments/payouts-item/ERRPYO041CLOSED_MARKET
/v1/payments/payouts-item/ERRPYO042CURRENCY_COMPLIANCE
/v1/payments/payouts-item/ERRPYO043CURRENCY_NOT_SUPPORTED_FOR_RECEIVER
/v1/payments/payouts-item/ERRPYO044RECEIVER_ACCOUNT_LOCKED
/v1/payments/payouts-item/ERRPYO045RECEIVER_COUNTRY_NOT_ALLOWED
/v1/payments/payouts-item/ERRPYO046RECEIVER_UNCONFIRMED
/v1/payments/payouts-item/ERRPYO047RECEIVER_UNREGISTERED
/v1/payments/payouts-item/ERRPYO048RECEIVER_YOUTH_ACCOUNT
/v1/payments/payouts-item/ERRPYO049RECEIVING_LIMIT_EXCEEDED
/v1/payments/payouts-item/ERRPYO050REGULATORY_BLOCKED
/v1/payments/payouts-item/ERRPYO051REGULATORY_PENDING
/v1/payments/payouts-item/ERRPYO052RISK_DECLINE
/v1/payments/payouts-item/ERRPYO053SELF_PAY_NOT_ALLOWED
/v1/payments/payouts-item/ERRPYO054TRANSACTION_LIMIT_EXCEEDED
/v1/payments/payouts-item/ERRPYO055UNDEFINED
/v1/payments/payouts-item/ERRPYO056ZERO_AMOUNT
/v1/payments/payouts-item/ERRPYO057INVALID_RESOURCE_ID
/v1/payments/payouts-item/ERRPYO058INTERNAL_ERROR
/v1/payments/payouts-item/ERRPYO059INVALID_EMAIL
/v1/payments/payouts-item/ERRPYO061RECEIVER_ACCOUNT_LIMITATION
/v1/payments/payouts-items/ERRPYOB016ACCOUNT_RESTRICTED
/v1/payments/payouts-items/ERRPYOB017ACCOUNT_UNCONFIRMED_EMAIL
/v1/payments/payouts-items/ERRPYOB018APPROVER_DENIED
/v1/payments/payouts-items/ERRPYOB019GAMER_FAILED_COUNTRY_OF_RESIDENCE_CHECK
/v1/payments/payouts-items/ERRPYOB020GAMER_FAILED_FUNDING_SOURCE_CHECK
/v1/payments/payouts-items/ERRPYOB021GAMING_INVALID_PAYMENT_FLOW
/v1/payments/payouts-items/ERRPYOB022NON_HOLDING_CURRENCY
/v1/payments/payouts-items/ERRPYOB023PENDING_RECIPIENT_NON_HOLDING_CURRENCY_PAYMENT_PREFERENCE
/v1/payments/payouts-items/ERRPYOB024SENDER_STATE_RESTRICTED
/v1/payments/payouts-items/ERRPYOB025SPENDING_LIMIT_EXCEEDED
/v1/payments/payouts-items/ERRPYOB026TRANSACTION_DECLINED_BY_TRAVEL_RULE

Batch payout status

Use the provided test values as path parameters in the request URL to simulate both positive and negative responses.

Endpoint: GET v1/payments/payouts/payout_batch_id

Positive response test values

Path parameterSimulated response
/v1/payments/payouts/ERRPYOB001SUCCESS
/v1/payments/payouts/ERRPYOB002PENDING
/v1/payments/payouts/ERRPYOB003PROCESSING

Negative response test values

Path parameterSimulated response
/v1/payments/payouts/ERRPYOB004DENIED

Rate limit

The PayPal Payouts API enforces a maximum of 400 requests per minute per client (access token). If your integration exceeds this threshold, the API responds with an HTTP 429 Too Many Requests error, identified by the error name RATE_LIMIT_REACHED. This error is returned to your application (the merchant), not to payout recipients.

To test the rate limit in sandbox:

  • Rapidly send multiple requests to the same endpoint in the sandbox environment.
  • When the limit is exceeded, you will receive a response such as:
    {
    "name": "RATE_LIMIT_REACHED",
    "message": "Too many requests. Blocked due to rate limiting.",
    "debug_id": "xxxxxx",
    "information_link": "https://developer.paypal.com/docs/api/overview/#rate-limiting"
    }
  • The HTTP status code for this response is 429.

If you encounter rate limit that disrupts your integration, contact Merchant Technical Support.

Best practices

Test large-batch file transfer

To test the large-batch file transfer in sandbox:

  • Simulate file transfer to your Incoming folder on PayPal’s DropZone server via SFTP.
  • Validate file name, file format, encoding, checksum, and file integrity.
  • Test acknowledgment and result reports (ACK, NACK, DUPS, Part file, Out/interim, Final) in the Outgoing folder.
  • Reconcile reports and correct any errors before you go live.

Test AAC

To test the Assisted Account Creation (AAC) integration in sandbox:

  1. Select Log in with PayPal on your application.
  2. Log in with your sandbox personal account credentials.
  3. Approve the consent to share the customer details.
  4. Use your sandbox business account to:
    • Verify that your application receives the authorization code.
    • Exchange the authorization code for an access token.
    • Use the access token to retrieve the customer details.
    • If it is a new customer, use the retrieved customer details to create a new customer account in your application.
    • Use the access token to make a payout request.
  5. Confirm the movement of money into your sandbox personal account.

Go live

  1. Before you go live, make sure your business account is approved for Payouts. If not, contact PayPal or work with your account manager to enable Payouts for your account.
  2. Move your app to production.

References