Test and go live with Invoicing
DocsCurrentLast updated: May 18th 2022, @ 4:02:27 pm
You can run negative tests on your integration to manage the responses you give to your customers.
Know before you code
- Before you trigger a simulation, you'll need to get an access token.
Use Postman to explore and test PayPal APIs.
Simulation methods
To trigger a simulation for the Invoices API, you can use a JSON pointer in the request payload or a path parameter in the request URI.
Test values are case sensitive.
Use a JSON pointer in the request payload
Trigger | Test value | Simulated error response |
---|---|---|
detail/reference | ERRINV002 | PERMISSION_DENIED |
Request
curl -X POST \
https://api-m.sandbox.paypal.com/v2/invoicing/invoices \
-H 'Authorization: Bearer <Access Token>' \
-H "PayPal-Partner-Attribution-Id: <BN-Code>" \
-H 'Content-Type: application/json' \
-d '{
"detail":
{
"reference": "ERRINV002"
}
}'
Response
{
"localizedMessage": "No permission for the requested operation. ",
"name": "PERMISSION_DENIED",
"message": "No permission for the requested operation. ",
"details": [
{
"issue": "No permission for the requested operation. "
}
],
"information_link": "https://developer.paypal.com/docs/archive/permissions-service/",
"debug_id": "6e07326c281c4"
}
Use a path parameter in the request URI
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0010 | INVOICE_NOT_FOUND |
Request
curl -X GET \
https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0010 \
-H 'Authorization: Bearer <Access Token>' \
-H 'Content-Type: application/json'
Response
{
"name": "RESOURCE_NOT_FOUND",
"message": "The specified resource does not exist.",
"debug_id": "98b2b9d2d89cb",
"links": [
{
"href": "https://developer.paypal.com/docs/api/invoicing/#errors",
"rel": "information_link"
}
]
}
Test values
Test values are case sensitive.
- Generate invoice number
- Create invoices
- Get invoice
- Delete invoice
- Fully update invoice details
- Cancel sent invoice
- Record payment for invoice
- Delete payment
- Record refund for invoice
- Delete refund
- Send invoice reminder
- Send invoice
- Search invoices
Generate invoice number
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/invoices/generate-next-invoice-number
.
Trigger | Test value | Simulated error response |
---|---|---|
reference | ERRINV066 | INTERNAL_SERVER_ERROR |
reference | ERRINV067 | PERMISSION_DENIED |
Create invoices
Use the JSON pointer method to simulate the following error responses at POST v2/invoicing/invoices/
.
Trigger | Test value | Simulated positive response |
---|---|---|
detail.reference | ERRINV001 | INTERNAL_SERVER_ERROR |
detail.reference | ERRINV002 | PERMISSION_DENIED |
detail.reference | ERRINV003 | UNSUPPORTED_MEDIA_TYPE |
detail.reference | ERRINV004 | VALIDATION_ERROR_EMPTY_BODY |
detail.reference | ERRINV005 | INVALID_REQUEST_GENERIC |
detail.reference | ERRINV006 | INVALID_REQUEST_SCHEMA_VIOLATION |
Get invoice
Use the path parameter in the request URI method to simulate the following error responses at GET /v2/invoicing/invoices/{invoice_id}
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0007 | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0008 | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0009 | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0010 | INVOICE_NOT_FOUND |
Delete invoice
Use the path parameter in the request URI method to simulate the following response at DELETE /v2/invoicing/invoices/{invoice_id}
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0059 | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at DELETE /v2/invoicing/invoices/{invoice_id}
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0055 | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0056 | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0057 | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0058 | INVOICE_NOT_FOUND |
Fully update invoice details
Use the path parameter in the request URI method to simulate the following error responses at PUT /v2/invoicing/invoices/{invoice_id}
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0060 | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0061 | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0062 | UNSUPPORTED_MEDIA_TYPE |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0063 | VALIDATION_ERROR_EMPTY_BODY |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0064 | INVALID_REQUEST_GENERIC |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0065 | INVALID_REQUEST_SCHEMA_VIOLATION |
Cancel sent invoice
Use the path parameter in the request URI method to simulate the following response at POST /v2/invoicing/invoices/{invoice_id}/cancel
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0029/cancel | PAYLOAD WITH 204 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/invoices/{invoice_id}/cancel
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0024/cancel | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0025/cancel | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0026/cancel | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0027/cancel | INVOICE_NOT_FOUND |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0028/cancel | CANT_CANCEL_INVOICE_IN_DRAFT_STATE |
Record payment for invoice
Use the path parameter in the request URI method to simulate the following response at POST /v2/invoicing/invoices/{invoice_id}/payments
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0037/payments | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/invoices/{invoice_id}/payments
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0031/payments | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0032/payments | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0033/payments | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0034/payments | INVOICE_NOT_FOUND |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0035/payments | CANT_PAY_AN_PAID_OR_CANCELED_INVOICE |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0036/payments | CANT_PAY_MORE_THAN_INVOICE_AMOUNT |
Delete payment
Use the path parameter in the request URI method to simulate the following response at DELETE /v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/{transaction_id}
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV042 | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at DELETE /v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/{transaction_id}
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV038 | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV039 | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV040 | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV041 | PAYMENT_OR_INVOICE_NOT_FOUND |
Record refund for invoice
Use the path parameter in the request URI method to simulate the following response at POST /v2/invoicing/invoices/{invoice_id}/refunds
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0049/refunds | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/invoices/{invoice_id}/refunds
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0043/refunds | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0044/refunds | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0045/refunds | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0046/refunds | INVOICE_NOT_FOUND |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0047/refunds | CANT_REFUND_A_CANCELED_INVOICE |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0048/refunds | CANT_REFUND_MORE_THAN_PAYMENT_AMOUNT |
Delete refund
Use the path parameter in the request URI method to simulate the following response at DELETE /v2/invoicing/invoices/{invoice_id}/refunds/{transaction_id}
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV054 | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at DELETE /v2/invoicing/invoices/{invoice_id}/refunds/{transaction_id}/delete
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV050 | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV051 | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV052 | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV053 | REFUND_OR_INVOICE_NOT_FOUND |
Send invoice reminder
Use the path parameter in the request URI method to simulate the following response at POST /v2/invoicing/invoices/{invoice_id}/remind
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0023/remind | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/invoices/{invoice_id}/remind
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0017/remind | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0018/remind | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0019/remind | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0020/remind | INVOICE_NOT_FOUND |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0021/remind | CANT_REMIND_INVOICE_IN_DRAFT_STATE |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0022/remind | CANT_REMIND_INVOICE_WITHOUT_BILLING_INFO |
Send invoice
Use the path parameter in the request URI method to simulate the following response at POST /v2/invoicing/invoices/{invoice_id}/send
.
Trigger or test value | Simulated positive response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0016/send | PAYLOAD WITH 200 RESPONSE CODE |
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/invoices/{invoice_id}/send
.
Trigger or test value | Simulated error response |
---|---|
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0011/send | INTERNAL_SERVER_ERROR |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0012/send | PERMISSION_DENIED |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0013/send | UNAUTHORIZED_ACCESS |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0014/send | INVOICE_NOT_FOUND |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0015/send | CANT_SEND_INVOICE_WITHOUT_EMAIL |
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0030/send | CANT_SEND_ALREADY_SENT_INVOICE |
Search invoices
Use the path parameter in the request URI method to simulate the following error responses at POST /v2/invoicing/search-invoices
.
Trigger or test value | Simulated error response |
---|---|
ERRINV068 | INTERNAL_SERVER_ERROR |
ERRINV069 | PERMISSION_DENIED |
ERRINV070 | INVALID_REQUEST |
Go live
- Change the base URL for all your REST API calls from
https://api-m.sandbox.paypal.com
tohttps://api-m.paypal.com
. - Change the references to your sandbox API credentials to the live credentials. To get live API credentials, create a live REST API.