On this page
No Headings
Last updated: June 26, 2026
You can run negative tests on your integration to manage the responses you give to your customers.
Before you trigger a simulation, you'll need to you need to get an access token.
Get access tokenUse Postman to explore and test PayPal APIs. Learn more in our Postman guide
Test a transaction to see the subscription created in the merchant account.
Availability: The JavaScript SDK onShippingChange, onShippingAddressChange, and onShippingOptionsChange functions are not compatible with Subscriptions.
To trigger a simulation for the Subscriptions API, you can use either a JSON pointer in the request payload or a path parameter in the request URI.
| Trigger | Test value | Simulated error response |
|---|---|---|
plan_id | ERRSUB033 | NOT_AUTHORIZED |
curl -X POST \
https://api-m.sandbox.paypal.com/v1/billing/subscriptions \
-H 'Authorization: Bearer <Access Token>'
-d '{
"plan_id": "ERRSUB033",
"start_time": "2020-02-06T15:00:00Z",
"quantity": "1",
"shipping_amount": {
"currency_code": "USD",
"value": "12.00"
},
"subscriber": {
"name": {
"given_name": "John",
"surname": "Doe"
},
"email_address": "customer@example.com",
"shipping_address": {
"name": {
"full_name": "John Doe"
},
"address": {
"address_line_1": "2211 N First Street",
"address_line_2": "Building 17",
"admin_area_2": "San Jose",
"admin_area_1": "CA",
"postal_code": "95131",
"country_code": "US"
}
}
},
"application_context": {
"brand_name": "Walmart Inc",
"locale": "en-US",
"shipping_preference": "SET_PROVIDED_ADDRESS",
"user_action": "SUBSCRIBE_NOW",
"payment_method": {
"payer_selected": "PAYPAL_CREDIT",
"payee_preferred": "IMMEDIATE_PAYMENT_REQUIRED"
},
"return_url": "http://zoho.com/returnUrl",
"cancel_url": "http://zoho.com/cancelUrl"
}
}'{
"name": "NOT_AUTHORIZED",
"debugId": "b1d1f06c7246c",
"message": "Authorization failed due to insufficient permissions.",
"details": [
{
"issue": "PERMISSION_DENIED",
"description": "You do not have permission to access or perform operations on this resource."
}
],
"links": [
{
"href": "https://developer.paypal.com/docs/api/v1/billing/subscriptions#PERMISSION_DENIED",
"rel": "information_link",
"method": "GET"
}
]
}| Trigger or test value | Simulated error response |
|---|---|
v1/billing/subscriptions/ERRSUB068/activate | RESOURCE_NOT_FOUND |
curl -X GET \
https://api-m.sandbox.paypal.com/v1/billing/subscriptions/ERRSUB068/activate \
-H 'Authorization: Bearer <Access Token>' \
-H 'Content-Type: application/json' \
-d '{
"reason": "Reactivating the subscription"
}
}'{
"name": "RESOURCE_NOT_FOUND",
"message": "The specified resource does not exist.",
"debug_id": "c2d1f06c7246c",
"details": [
{
"issue": "INVALID_RESOURCE_ID",
"description": "Requested resource ID was not found",
"value": "I-TT452GLLEP1G"
}
],
"links": [
{
"href": "https://developer.paypal.com/api/rest/",
"rel": "information_link"
}
]
}Use the following test values to trigger positive and negative responses for these subscriptions actions:
Note: Test values are case sensitive.
Negative response test values
Use the JSON pointer in the request payload to simulate the following error responses at POST /v1/catalogs/products.
| Trigger | Test value | Simulated error response |
|---|---|---|
name | ERRCAT001 | INTERNAL_SERVER_ERROR |
name | ERRCAT002 | NOT_AUTHORIZED |
name | ERRCAT003 | INVALID_REQUEST |
name | ERRCAT004 | INVALID_REQUEST |
name | ERRCAT005 | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at GET /v1/catalogs/products/{test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/catalogs/products/ERRCAT008 | INTERNAL_SERVER_ERROR |
/v1/catalogs/products/ERRCAT009 | NOT_AUTHORIZED |
/v1/catalogs/products/ERRCAT010 | RESOURCE_NOT_FOUND |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at GET /v1/billing/plans/?&total_required={test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/catalogs/products?total_required=ERRCAT006 | INTERNAL_SERVER_ERROR |
/v1/catalogs/products?total_required=ERRCAT007 | NOT_AUTHORIZED |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at PATCH /v1/catalog/products/{test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/catalogs/products/ERRCAT011 | INTERNAL_SERVER_ERROR |
/v1/catalogs/products/ERRCAT012 | NOT_AUTHORIZED |
/v1/catalogs/products/ERRCAT013 | INVALID_REQUEST |
/v1/catalogs/products/ERRCAT014 | UNPROCESSABLE_ENTITY |
Note: Test values are case sensitive.
Negative response test values
Use the JSON pointer in the request payload to simulate the following error responses at POST /v1/billing/plans/.
| Trigger | Test value | Simulated error response |
|---|---|---|
name | ERRSUB001 | INTERNAL_SERVER_ERROR |
name | ERRSUB002 | NOT_AUTHORIZED |
name | ERRSUB003 | INVALID_REQUEST |
name | ERRSUB004 | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST/v1/billing/plans/{test_value}/activate.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/plans/ERRSUB015/activate | INTERNAL_SERVER_ERROR |
/v1/billing/plans/ERRSUB016/activate | NOT_AUTHORIZED |
/v1/billing/plans/ERRSUB017/activate | RESOURCE_NOT_FOUND |
/v1/billing/plans/ERRSUB018/activate | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/plans/{test_value}/deactivate.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/plans/ERRSUB019/deactivate | INTERNAL_SERVER_ERROR |
/v1/billing/plans/ERRSUB020/deactivate | NOT_AUTHORIZED |
/v1/billing/plans/ERRSUB021/deactivate | RESOURCE_NOT_FOUND |
/v1/billing/plans/ERRSUB022/deactivate | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at GET /v1/billing/plans/{test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/plans/ERRSUB008 | INTERNAL_SERVER_ERROR |
/v1/billing/plans/ERRSUB009 | NOT_AUTHORIZED |
/v1/billing/plans/ERRSUB009 | RESOURCE_NOT_FOUND |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at GET /v1/billing/plans/?page_size=3&page=1&total_required={test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/plans?page_size=3&page=1&total_required=ERRSUB005 | INTERNAL_SERVER_ERROR |
/v1/billing/plans?page_size=3&page=1&total_required=ERRSUB006 | NOT_AUTHORIZED |
/v1/billing/plans?page_size=3&page=1&total_required=ERRSUB007 | INVALID_REQUEST |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at PATCH /v1/billing/plans/{test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/plans/ERRSUB011 | INTERNAL_SERVER_ERROR |
/v1/billing/plans/ERRSUB012 | NOT_AUTHORIZED |
/v1/billing/plans/ERRSUB013 | RESOURCE_NOT_FOUND |
/v1/billing/plans/ERRSUB014 | INVALID_REQUEST |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/plans/{test_value}/update-pricing-schemes.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/plans/ERRSUB023/update-pricing-schemes | INTERNAL_SERVER_ERROR |
/v1/billing/plans/ERRSUB024/update-pricing-schemes | NOT_AUTHORIZED |
/v1/billing/plans/ERRSUB025/update-pricing-schemes | INVALID_REQUEST |
/v1/billing/plans/ERRSUB026/update-pricing-schemes | RESOURCE_NOT_FOUND |
/v1/billing/plans/ERRSUB027/update-pricing-schemes | UNPROCESSABLE_ENTITY |
/v1/billing/plans/ERRSUB028/update-pricing-schemes | UNPROCESSABLE_ENTITY |
/v1/billing/plans/ERRSUB029/update-pricing-schemes | UNPROCESSABLE_ENTITY |
/v1/billing/plans/ERRSUB030/update-pricing-schemes | UNPROCESSABLE_ENTITY |
/v1/billing/plans/ERRSUB031/update-pricing-schemes | UNPROCESSABLE_ENTITY |
Note: Test values are case sensitive.
Negative response test values
Use the JSON pointer in the request payload to simulate the following error responses at POST /v1/billing/subscriptions.
| Trigger | Test value | Simulated error response |
|---|---|---|
plan_id | ERRSUB032 | INTERNAL_SERVER_ERROR |
plan_id | ERRSUB033 | NOT_AUTHORIZED |
plan_id | ERRSUB034 | INVALID_REQUEST |
plan_id | ERRSUB035 | INVALID_REQUEST |
plan_id | ERRSUB036 | INVALID_REQUEST |
plan_id | ERRSUB037 | INVALID_REQUEST |
plan_id | ERRSUB038 | INVALID_REQUEST |
plan_id | ERRSUB039 | UNPROCESSABLE_ENTITY |
plan_id | ERRSUB040 | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/subscriptions/{test_value}/activate.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB066/activate | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB067/activate | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB068/activate | RESOURCE_NOT_FOUND |
/v1/billing/subscriptions/ERRSUB069/activate | UNPROCESSABLE_ENTITY |
/v1/billing/subscriptions/ERRSUB070/activate | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at GET /v1/billing/subscriptions/{test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB044 | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB045 | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB046 | RESOURCE_NOT_FOUND |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at PATCH /v1/billing/subscriptions/{test_value}.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB047 | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB048 | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB049 | RESOURCE_NOT_FOUND |
/v1/billing/subscriptions/ERRSUB050 | INVALID_REQUEST |
/v1/billing/subscriptions/ERRSUB051 | UNPROCESSABLE_ENTITY |
/v1/billing/subscriptions/ERRSUB052 | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/subscriptions/{test_value}/revise.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB053/revise | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB054/revise | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB055/revise | INVALID_REQUEST |
/v1/billing/subscriptions/ERRSUB056/revise | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/subscriptions/{test_value}/suspend.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB059/suspend | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB060/suspend | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB061/suspend | INVALID_REQUEST |
/v1/billing/subscriptions/ERRSUB062/suspend | UNPROCESSABLE_ENTITY |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/subscriptions/{test_value}/capture.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB071/capture | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB072/capture | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB073/capture | RESOURCE_NOT_FOUND |
/v1/billing/subscriptions/ERRSUB074/capture | INVALID_REQUEST |
/v1/billing/subscriptions/ERRSUB075/capture | INVALID_REQUEST |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at GET /v1/billing/subscriptions/{test_value}/transactions.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB076/transactions | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB076/transactions | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB076/transactions | RESOURCE_NOT_FOUND |
/v1/billing/subscriptions/ERRSUB076/transactions | INVALID_REQUEST |
Negative response test values
Use the path parameter in the request URI method to simulate the following error responses at POST /v1/billing/subscriptions/{test_value}/cancel.
| Trigger or test value | Simulated error response |
|---|---|
/v1/billing/subscriptions/ERRSUB063/cancel | INTERNAL_SERVER_ERROR |
/v1/billing/subscriptions/ERRSUB064/cancel | NOT_AUTHORIZED |
/v1/billing/subscriptions/ERRSUB065/cancel | RESOURCE_NOT_FOUND |
An error includes:
| HTTP status code | Error name | Message | Details |
|---|---|---|---|
400 | INVALID_REQUEST | Request is not well-formed, syntactically incorrect, or violates schema. | A required field is missing. |
401 | AUTHENTICATION_FAILURE | Authorization error occurred. | Authorization error occurred. Check your credentials. |
403 | NOT_AUTHORIZED | Authorization failed due to insufficient permissions. | You do not have permission to access or perform operations on this resource. |
404 | RESOURCE_NOT_FOUND | The specified resource does not exist. | Requested resource ID was not found. |
422 | UNPROCESSABLE_ENTITY | The requested action could not be performed, semantically incorrect, or failed business validation. | Invalid plan status for activate action; plan status should be either inactive or created. |
500 | INTERNAL_SERVER_ERROR | An internal server error has occurred. | Resend the request at another time. If this error continues, contact PayPal Merchant Technical Support. |
{
"name": "INVALID_REQUEST",
"message": "Request is not well-formed, syntactically incorrect, or violates schema",
"debug_id": "6u3y6fca61718",
"details": [{
"field": "/plan_id",
"issue": "MISSING_REQUIRED_PARAMETER",
"description": "A required field is missing.",
"location": "body"
}],
"links": [{
"href": "https://developer.paypal.com/docs/api/v2/payments/#INVALID_REQUEST",
"rel": "information_link",
"method": "GET"
}]
}https://api-m.sandbox.paypal.com to https://api-m.paypal.com.