Payments Training Hub
HTTP status versus payment status NOW HTTP status versus payment status 200 OK 429 Too Many Requests Payment status codes Stable business error codes Error taxonomy testing MESSAGE TRACE HTTP status versus payment status The single most common error in payment API design is confusing the HTTP status with the payment status. Step 1 of 6 HTTP status versus payment status 1 NOW HTTP status versus payment status 2 200 OK 3 429 Too Many Requests 4 Payment status codes 5 Stable business error codes 6 Error taxonomy testing The single most common error in payment API design is confusing the HTTP status with the payment status. Step 1 of 6
200 OK HTTP status versus payment status NOW 200 OK 429 Too Many Requests Payment status codes Stable business error codes Error taxonomy testing MESSAGE TRACE HTTP status versus payment status > 200 OK 200 OK means the request succeeded and the response carries the result, used for retrieving a payment or a Step 2 of 6 200 OK 1 HTTP status versus payment status 2 NOW 200 OK 3 429 Too Many Requests 4 Payment status codes 5 Stable business error codes 6 Error taxonomy testing 200 OK means the request succeeded and the response carries the result, used for retrieving a payment or a status. Step 2 of 6
429 Too Many Requests HTTP status versus payment status 200 OK NOW 429 Too Many Requests Payment status codes Stable business error codes Error taxonomy testing MESSAGE TRACE HTTP status versus payment status > 200 OK > 429 Too Many Requests 429 Too Many Requests means the client exceeded the rate limit. Step 3 of 6 429 Too Many Requests 1 HTTP status versus payment status 2 200 OK 3 NOW 429 Too Many Requests 4 Payment status codes 5 Stable business error codes 6 Error taxonomy testing 429 Too Many Requests means the client exceeded the rate limit. Step 3 of 6
Payment status codes HTTP status versus payment status 200 OK 429 Too Many Requests NOW Payment status codes Stable business error codes Error taxonomy testing MESSAGE TRACE HTTP status versus payment status > 200 OK > 429 Too Many Requests > Payment status codes The payment status codes are the ISO 20022 set, and they must be used exactly as defined. Step 4 of 6 Payment status codes 1 HTTP status versus payment status 2 200 OK 3 429 Too Many Requests 4 NOW Payment status codes 5 Stable business error codes 6 Error taxonomy testing The payment status codes are the ISO 20022 set, and they must be used exactly as defined. Step 4 of 6
Stable business error codes HTTP status versus payment status 200 OK 429 Too Many Requests Payment status codes NOW Stable business error codes Error taxonomy testing MESSAGE TRACE HTTP status versus payment status > 200 OK > 429 Too Many Requests > Payment status codes > Stable business error codes A client that programs against the code AC01 expects it to mean the same thing in every response, in every Step 5 of 6 Stable business error codes 1 HTTP status versus payment status 2 200 OK 3 429 Too Many Requests 4 Payment status codes 5 NOW Stable business error codes 6 Error taxonomy testing A client that programs against the code AC01 expects it to mean the same thing in every response, in every version of the API, and in every payment type. Step 5 of 6
Error taxonomy testing HTTP status versus payment status 200 OK 429 Too Many Requests Payment status codes Stable business error codes NOW Error taxonomy testing MESSAGE TRACE HTTP status versus payment status > 200 OK > 429 Too Many Requests > Payment status codes > Stable business error codes > Error taxonomy testing A test pack that does not cover this case will pass in the test environment and fail when a real client calls the Step 6 of 6 Error taxonomy testing 1 HTTP status versus payment status 2 200 OK 3 429 Too Many Requests 4 Payment status codes 5 Stable business error codes 6 NOW Error taxonomy testing A test pack that does not cover this case will pass in the test environment and fail when a real client calls the API. Step 6 of 6

Flow of the explanation in this lesson.

0:00 / 6:11 Step 1 of 6

Error taxonomy: HTTP status is not the payment status

API design standards and integration patterns, Lesson 4 of 7, Narration 6:11, D10 APIs and integration

IdempotencySettlementISO 20022

What you will learn

Your objective. By the end of this lesson, you will be able to explain error taxonomy: http status is not the payment status and apply it to a real banking scenario.

Why it matters. For a business analyst, the requirement is to define the error code for every failure the API can return, the HTTP status for each, and the message text, and to test each one with a real call.

Chapter objective: How payment APIs are designed, versioned, secured and integrated

Key learning points

  • HTTP status versus payment status
  • 200 OK
  • 429 Too Many Requests
  • Payment status codes
  • Stable business error codes
  • Error taxonomy testing

Key terms

Idempotency: The property that repeating the same request has the same effect as sending it once. In payments, an idempotency key lets a client safely retry a request after a timeout without creating a duplicate...

Settlement: The final movement of funds between banks to discharge obligations created by cleared payments. Settlement is usually made in central bank money or through correspondent accounts.

ISO 20022: An international standard for financial messaging that defines XML message formats for payments, securities and trade.

Payment flow diagram showing Error taxonomy: HTTP status is not the payment status.

Insights and practice scenarios

Worked insights and practice scenarios for this lesson. Each one is a reusable PaymentForge case, so the same case may appear in more than one lesson.

Practise this lesson

Exercise

Write the request and the expected response for the API call described in this lesson.

Use the API resources, operations and fields named in this lesson.

  1. What to do. Write the JSON request with the required fields, the success response, and one error response with its error code.

Correct result. A correct request has all mandatory fields, a valid idempotency key, and the right resource and operation. The success response confirms acceptance, and the error response names the field or rule that failed.

Why. An API contract is a promise between two systems. If the request is wrong, the API must reject it cleanly, not fail silently.

Check your understanding

Practice question

Which of the following best describes error taxonomy: http status is not the payment status?

Takeaway and next step

What to remember

These are different things, and they are always reported separately.

Follow a payment through every stage, from instruction to beneficiary credit, and note where it can stop.

Open the Payment Lifecycle Simulator →

Builds on "Rate limiting and quotas: protecting the API and the client".

Transcript and full text

Show transcript

The single most common error in payment API design is confusing the HTTP status with the payment status. An HTTP status says what happened to the request: whether the bank received it, understood it, and accepted it for processing. The payment status says what happened to the payment: whether it was accepted, is being settled, has been credited to the beneficiary, or was rejected. For a business analyst, the requirement is to define this behaviour in the API specification, because the client builds against the specification and nothing else. These are different things, and they are always reported separately. A 202 Accepted response means the request was accepted for processing; it does not mean the payment settled or the beneficiary was credited. A client that treats 202 as settled will tell its customer the money has arrived when it has not. Source: ISO 20022 ExternalPaymentTransactionStatus1Code; API design guidance; bank API developer documentation. The HTTP status codes a payment API uses are a small set, and each has a precise meaning. 200 OK means the request succeeded and the response carries the result, used for retrieving a payment or a status. 201 Created means a new resource was created synchronously and its location is returned, used when a resource is created immediately. 202 Accepted means the request was accepted for processing and the outcome will arrive later, used for initiating a payment, requesting a cancellation, or submitting an enquiry. 400 Bad Request means the request is malformed: bad JSON, a wrong field type, or a missing mandatory field. 401 Unauthorized means the credentials are missing, expired or invalid. 403 Forbidden means the caller is authenticated but not allowed to do this. 404 Not Found means no resource with that identification exists. 409 Conflict means the request conflicts with the current state, such as cancelling a payment that has already settled, or reusing an idempotency key with a different body. 422 Unprocessable Content means the request is well formed but a business rule failed, such as an invalid creditor account with code AC01. 429 Too Many Requests means the client exceeded the rate limit. Every error response carries three things: the HTTP status, a business error code, and a human readable message. The business error code is a stable identifier the client can program against, such as INVALID_REQUEST, AC01, AMOUNT_LIMIT_EXCEEDED, or RATE_LIMITED. The human readable message explains the problem in plain language, such as the creditor account number is invalid. The API documentation must state this rule plainly, because a client that has to guess will guess wrong. The response may also carry a field path, pointing to the exact field that failed, and a link to the API documentation for that error. A client that receives a 422 with code AC01 and field creditorAccount knows exactly what to fix; a client that receives only a 400 with no code must guess. For a business analyst, the requirement is to define the error code for every failure the API can return, the HTTP status for each, and the message text, and to test each one with a real call. The payment status codes are the ISO 20022 set, and they must be used exactly as defined. ACTC means technical validation passed. ACCP means accepted for processing, an early acceptance. ACSP means accepted and settlement is in process, a later acceptance. ACSC means settlement is completed on the debtor account. ACCC means settlement is completed on the creditor account, and it is the only code that confirms the beneficiary was credited. RJCT means rejected, and it always carries a reason code such as AC01, AC04, AM04 or FF01. PDNG means pending. The words ACCEPTED and CANCELLED are not ISO 20022 status codes and must never be used as payment statuses in an API response. A client that sees ACCC can tell its customer the money has arrived; a client that sees ACSP can only say the payment is being processed. The status code is the single most important field in the API response, because the client builds its customer message from it. A business error code must be stable and documented. A client that programs against the code AC01 expects it to mean the same thing in every response, in every version of the API, and in every payment type. If the bank changes the meaning of AC01, or uses it for a different error in a different endpoint, the client's error handling breaks. The bank must therefore maintain a catalogue of error codes, with the meaning, the HTTP status, and the message for each, and must never reuse a code for a different error. The catalogue is part of the API specification, and a change to it is a breaking change that requires a new API version. For a business analyst, the requirement is to define the error catalogue, the code for each error, and the process for adding a new code. Validation errors deserve special care, because they are the most common errors a client will see. When a request fails validation, the response must identify every field that failed, not just the first one, so the client can fix all of them in one attempt rather than submitting the request repeatedly and discovering one error at a time. A test pack that does not cover this case will pass in the test environment and fail when a real client calls the API. Each failed field must carry its path, such as creditorAccount.iban, the reason it failed, such as invalid format, and the value that was supplied, so the client can see what it sent. A validation response that says only invalid request is a poor experience; a validation response that lists every failed field with its path and reason is a good one. Further reading: ISO 20022 ExternalPaymentTransactionStatus1Code; API design guidance; bank API developer documentation. Last reviewed 7 November 2026.

The single most common error in payment API design is confusing the HTTP status with the payment status. An HTTP status says what happened to the request: whether the bank received it, understood it, and accepted it for processing. The payment status says what happened to the payment: whether it was accepted, is being settled, has been credited to the beneficiary, or was rejected. For a business analyst, the requirement is to define this behaviour in the API specification, because the client builds against the specification and nothing else.

These are different things, and they are always reported separately. A 202 Accepted response means the request was accepted for processing; it does not mean the payment settled or the beneficiary was credited. A client that treats 202 as settled will tell its customer the money has arrived when it has not. Source: ISO 20022 ExternalPaymentTransactionStatus1Code; API design guidance; bank API developer documentation.

The HTTP status codes a payment API uses are a small set, and each has a precise meaning. 200 OK means the request succeeded and the response carries the result, used for retrieving a payment or a status. 201 Created means a new resource was created synchronously and its location is returned, used when a resource is created immediately. 202 Accepted means the request was accepted for processing and the outcome will arrive later, used for initiating a payment, requesting a cancellation, or submitting an enquiry. 400 Bad Request means the request is malformed: bad JSON, a wrong field type, or a missing mandatory field.

401 Unauthorized means the credentials are missing, expired or invalid. 403 Forbidden means the caller is authenticated but not allowed to do this. 404 Not Found means no resource with that identification exists. 409 Conflict means the request conflicts with the current state, such as cancelling a payment that has already settled, or reusing an idempotency key with a different body. 422 Unprocessable Content means the request is well formed but a business rule failed, such as an invalid creditor account with code AC01. 429 Too Many Requests means the client exceeded the rate limit.

Every error response carries three things: the HTTP status, a business error code, and a human readable message. The business error code is a stable identifier the client can program against, such as INVALID_REQUEST, AC01, AMOUNT_LIMIT_EXCEEDED, or RATE_LIMITED. The human readable message explains the problem in plain language, such as the creditor account number is invalid. The API documentation must state this rule plainly, because a client that has to guess will guess wrong.

The response may also carry a field path, pointing to the exact field that failed, and a link to the API documentation for that error. A client that receives a 422 with code AC01 and field creditorAccount knows exactly what to fix; a client that receives only a 400 with no code must guess. For a business analyst, the requirement is to define the error code for every failure the API can return, the HTTP status for each, and the message text, and to test each one with a real call.

The payment status codes are the ISO 20022 set, and they must be used exactly as defined. ACTC means technical validation passed. ACCP means accepted for processing, an early acceptance. ACSP means accepted and settlement is in process, a later acceptance. ACSC means settlement is completed on the debtor account. ACCC means settlement is completed on the creditor account, and it is the only code that confirms the beneficiary was credited.

RJCT means rejected, and it always carries a reason code such as AC01, AC04, AM04 or FF01. PDNG means pending. The words ACCEPTED and CANCELLED are not ISO 20022 status codes and must never be used as payment statuses in an API response. A client that sees ACCC can tell its customer the money has arrived; a client that sees ACSP can only say the payment is being processed. The status code is the single most important field in the API response, because the client builds its customer message from it.

A business error code must be stable and documented. A client that programs against the code AC01 expects it to mean the same thing in every response, in every version of the API, and in every payment type. If the bank changes the meaning of AC01, or uses it for a different error in a different endpoint, the client's error handling breaks. The bank must therefore maintain a catalogue of error codes, with the meaning, the HTTP status, and the message for each, and must never reuse a code for a different error. The catalogue is part of the API specification, and a change to it is a breaking change that requires a new API version. For a business analyst, the requirement is to define the error catalogue, the code for each error, and the process for adding a new code.

Validation errors deserve special care, because they are the most common errors a client will see. When a request fails validation, the response must identify every field that failed, not just the first one, so the client can fix all of them in one attempt rather than submitting the request repeatedly and discovering one error at a time. A test pack that does not cover this case will pass in the test environment and fail when a real client calls the API.

Each failed field must carry its path, such as creditorAccount.iban, the reason it failed, such as invalid format, and the value that was supplied, so the client can see what it sent. A validation response that says only invalid request is a poor experience; a validation response that lists every failed field with its path and reason is a good one. Further reading: ISO 20022 ExternalPaymentTransactionStatus1Code; API design guidance; bank API developer documentation. Last reviewed 7 November 2026.

Full lesson text (all scenes)

Completing a lesson updates your progress dashboard on the homepage.

Scene timestamps are estimated by allocating the narration text proportionally across the real audio length. The audio playback position is the source of truth: pause freezes the visual, seeking restores the correct scene, replay restarts the scene animation.