Skip to main content
Use test values to simulate error responses with the PayPal Invoicing API and verify that your application handles different scenarios correctly.

Prerequisites

Simulation methods

You can simulate responses in two ways: JSON pointer method or the path parameter method.

JSON pointer method

Request locationTest valueSimulated response
detail.referenceERRINV001PERMISSION_DENIED
The following sample code shows a simulated request with a test value and the Sandbox response.

Request

curl -X POST \
  https://api-m.sandbox.paypal.com/v2/invoicing/invoices \
  -H 'Authorization: Bearer <Access Token>' \
  -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"
}

Path parameter method

Use test value in the request URI. This simulates a response.
Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0010INVOICE_NOT_FOUND
The following sample code shows a simulated request with a test value and the Sandbox response.

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

Note: Test values are case sensitive. The following test values simulate different responses for each Invoicing API operation. Each operation shows where to insert the test value and the response you can expect.

Generate invoice number

Use the path parameter in the request URI at POST /v2/invoicing/invoices/generate-next-invoice-number to simulate the following error responses.
Test valueSimulated response
ERRINV066INTERNAL_SERVER_ERROR
ERRINV067PERMISSION_DENIED

Create invoices

Use the JSON pointer method at POST /v2/invoicing/invoices/ to simulate the following error responses.
Request locationTest valueSimulated response
detail.referenceERRINV001INTERNAL_SERVER_ERROR
detail.referenceERRINV002PERMISSION_DENIED
detail.referenceERRINV003UNSUPPORTED_MEDIA_TYPE
detail.referenceERRINV004VALIDATION_ERROR_EMPTY_BODY
detail.referenceERRINV005INVALID_REQUEST_GENERIC
detail.referenceERRINV006INVALID_REQUEST_SCHEMA_VIOLATION

Get invoice

Use the path parameter in the request URI at GET /v2/invoicing/invoices/{invoice_id} to simulate the following error responses.
Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0007INTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0008PERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0009UNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0010INVOICE_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}.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0059PAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0055INTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0056PERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0057UNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0058INVOICE_NOT_FOUND

Update the invoice

Use the path parameter in the request URI method to simulate the following error response at PUT /v2/invoicing/invoices/{invoice_id}.
Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0060INTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0061PERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0062UNSUPPORTED_MEDIA_TYPE
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0063VALIDATION_ERROR_EMPTY_BODY
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0064INVALID_REQUEST_GENERIC
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0065INVALID_REQUEST_SCHEMA_VIOLATION

Cancel a sent invoice

Use the path parameter in the request URI method to simulate the following response at
POST /v2/invoicing/invoices/{invoice_id}/cancel.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0029/cancelPAYLOAD WITH 204 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0024/cancelINTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0025/cancelPERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0026/cancelUNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0027/cancelINVOICE_NOT_FOUND
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0028/cancelCANT_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.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0037/paymentsPAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0031/paymentsINTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0032/paymentsPERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0033/paymentsUNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0034/paymentsINVOICE_NOT_FOUND
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0035/paymentsCANT_PAY_AN_PAID_OR_CANCELED_INVOICE
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0036/paymentsCANT_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}.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV042PAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV038INTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV039PERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV040UNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/payments/EXT-ABCDEFGHERRINV041PAYMENT_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:

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0049/refundsPAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0043/refundsINTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0044/refundsPERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0045/refundsUNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0046/refundsINVOICE_NOT_FOUND
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0047/refundsCANT_REFUND_A_CANCELED_INVOICE
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0048/refundsCANT_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}.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV054PAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV050INTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV051PERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV052UNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EFGH-5678/refunds/EXT-ABCDEFGHERRINV053REFUND_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.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0023/remindPAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0017/remindINTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0018/remindPERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0019/remindUNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0020/remindINVOICE_NOT_FOUND
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0021/remindCANT_REMIND_INVOICE_IN_DRAFT_STATE
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0022/remindCANT_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.

Success

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0016/sendPAYLOAD WITH 200 RESPONSE CODE

Error

Test valueSimulated response
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0011/sendINTERNAL_SERVER_ERROR
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0012/sendPERMISSION_DENIED
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0013/sendUNAUTHORIZED_ACCESS
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0014/sendINVOICE_NOT_FOUND
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0015/sendCANT_SEND_INVOICE_WITHOUT_EMAIL
/v2/invoicing/invoices/INV2-ABCD-1234-EINV-0030/sendCANT_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.
Test valueSimulated response
ERRINV068INTERNAL_SERVER_ERROR
ERRINV069PERMISSION_DENIED
ERRINV070INVALID_REQUEST
I