Test and go live with Invoicing
Last updated: Feb 27th, 8:11am
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.
.
OptionalExplore PayPal APIs with Postman
You can use Postman to explore and test PayPal APIs. Learn more in our Postman guide.
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.
Using a JSON pointer in the request payload
Trigger | Test value | Simulated Error Response |
detail/reference | ERRINV002 | PERMISSION_DENIED |
Request
1curl -X POST \2 https://api-m.sandbox.paypal.com/v2/invoicing/invoices \3 -H 'Authorization: Bearer <Access Token>' \4 -H "PayPal-Partner-Attribution-Id: <BN-Code>" \5 -H 'Content-Type: application/json' \6 -d '{7 "detail":8 {9 "reference": "ERRINV002"10 }11}'
Response
1{2 "localizedMessage": "No permission for the requested operation. ",3 "name": "PERMISSION_DENIED",4 "message": "No permission for the requested operation. ",5 "details": [6 {7 "issue": "No permission for the requested operation. "8 }9 ],10 "information_link": "https://developer.paypal.com/docs/archive/permissions-service/",11 "debug_id": "6e07326c281c4"12}
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
1curl -X GET \2 https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0010 \3 -H 'Authorization: Bearer <Access Token>' \4 -H 'Content-Type: application/json'
Response
1{2 "name": "RESOURCE_NOT_FOUND",3 "message": "The specified resource does not exist.",4 "debug_id": "98b2b9d2d89cb",5 "links": [6 {7 "href": "https://developer.paypal.com/docs/api/invoicing/#errors",8 "rel": "information_link"9 }10 ]11}
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 to https://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.