JavaScript is required to view this page
Error Codes Reference

Error Codes Reference

This page lists the error codes returned by the Payment API, with the HTTP status each one comes with. Each error has a code (BPnnn) and a message. Branch on code.

Codes beginning BG are not API errors. They appear on the gateway's error screen and are listed under Gateway Error Codes.

Error Response Format

{
  "timestamp": "2026-01-15T10:30:00.000+13:00",
  "path": "/payments/v1/payments",
  "status": 422,
  "error": "UNPROCESSABLE_CONTENT",
  "message": "Consent has been revoked",
  "code": "BP015"
}

Some responses carry no BlinkPay code:

  • 401 has an empty body and a WWW-Authenticate header: Bearer error="invalid_token" when the access token is expired or invalid, and a bare Bearer when no token was sent. Get a new token and retry. The token request itself is the exception: POST /oauth2/token without a client_id or client_secret returns 401 with code BP505 (Missing required parameter: client_id). Retrying won't help: send both.
  • 429 Too Many Requests: wait for the time in the Retry-After header, then back off; see API Rate Limits.

Every response carries a request-id header (it echoes yours if you send one). Include it when you contact support.

Common Error Codes

CodeHTTPDescriptionResolution
BP101404Consent does not existVerify the consent ID is correct
BP002422Consent already consumed or rejected, including a single consent not paid within 48 hours of authorisationGET the consent and check payments[0] first. If a payment exists and is not Rejected, it may still settle: poll it rather than creating a new consent. Otherwise create a new consent
BP003422Enduring consent is past its expiry_timestamp (it is now Consumed)Create a new consent
BP004422Consent exceeded request timeoutCustomer took too long; create new consent
BP011422Consent cannot be revoked because it was never authorised (Rejected or GatewayTimeout)No action needed
BP015422Consent has been revoked — possibly cancelled by the customer in their banking appCreate a new consent
BP017422Consent not yet authorised (a payment was created too early)Customer hasn't approved yet; continue polling
BP018422Quick payment cannot be processed, for example POST /payments on a quick paymentDon't create payments for a quick payment: GET the quick payment instead
BP021422Gateway consent timed out (>15 min)Create a new consent
BP026422The earlier consent you sent as a decoupled consent_id identifier can no longer identify the customer. How long a consent can be used this way depends on the bank, from a few months to about 2 years after it was authorised, so send the customer's most recent authorised consentUse another identifier or the redirect flow
BP061422A payment on an enduring consent was made before the consent is active, that is before its from_timestamp. The message gives the time it becomes active. Nothing was sent to the bankRetry the payment at or after the time in the message. A payment refused with BP061 does not use up its idempotency-key, so the same key can be sent again once the consent is active, and the payment is then made once
BP701409Consent was already revoked — either earlier via the API, or by the customer in their banking appNo action needed; create a new consent to take further payments
BP707409Consent has a payment still settling, so it cannot be revoked yetPoll the payment until it is terminal, then revoke if still needed

Feature Access Errors

These 403s mean a feature is not enabled for your account, or a flow is not available at that bank; resending the request unchanged gets the same error.

CodeHTTPDescriptionResolution
BP401403Your account is not subscribed to PayNowContact BlinkPay to enable it
BP402403Your account is not subscribed to AutoPayContact BlinkPay to enable it
BP403403Enduring consents are not enabled for the bankUse another bank (see Bank Coverage), or contact BlinkPay
BP404403The redirect flow is not enabled for the bankUse another flow or bank (see Bank Coverage), or contact BlinkPay
BP405403The decoupled flow is not enabled for the bankUse another flow or bank (see Bank Coverage), or contact BlinkPay
BP406403Your account is not subscribed to the BlinkPay gatewayContact BlinkPay to enable it
BP407403Your account must use the BlinkPay gatewayCreate the consent with the gateway flow
BP417403The decoupled flow is disabled on the BlinkPay gateway for your accountUse a redirect flow hint or no flow hint, or contact BlinkPay

Request Errors

These mean the request needs fixing; resending it unchanged gets the same error.

CodeHTTPDescriptionResolution
BP035422Referenced consent is for a different bankUse a consent ID from the same bank
BP214400Redirect URI not whitelistedRegister the URI under Settings > API Settings
BP215400redirect_uri or callback_url is not a valid URISend an absolute URI with a scheme and host
BP216400Bank not configured for merchantContact BlinkPay to enable the bank
BP235400amount or pcr sent when creating a payment on a single consentSend only the consent_id; the amount and PCR come from the consent
BP240400Decoupled identifier type not supported by the bankUse an identifier type listed for the bank in features.decoupled_flow.available_identifiers on the metadata endpoint
BP249400The decoupled mobile_number identifier is not a valid NZ mobile numberSend an NZ mobile number, for example +64-259531933
BP252400An amount is empty, not a number, or not greater than zeroSend a positive amount, for example "25.50"
BP264400An enduring consent's expiry_timestamp is in the pastSend a future expiry_timestamp, or leave it out
BP265400Identifier value is not a valid consent IDPass a consent ID as the decoupled identifier_value
BP276400surcharge or total_charge was sent in a consent or quick payment requestRemove them: BlinkPay calculates these fields
BP283400An enduring consent's from_timestamp and expiry_timestamp fall on the same dateSet the expiry at least one day after the start
BP289–BP293400callback_url is malformed or is not a public https URLSend a publicly reachable HTTPS URL (the sandbox also accepts http)
BP299400Invalid request parameters, for example an ID or an idempotency-key, request-id or x-correlation-id header that is not a UUIDFix the request; send UUIDs for IDs and those headers

Idempotency and Concurrency Errors

An idempotency key is bound permanently to the payment it creates. These 409s tell you which of the two situations you are in: the key is still busy with an earlier request (retry later), or it has been spent (use a fresh key).

CodeHTTPDescriptionResolution
BP702409Duplicate idempotency key with different payloadUse a unique idempotency key per distinct request
BP703409The named payment is still in flightPoll the payment ID in the message until it reaches a terminal status; don't resubmit
BP708409A payment request with this key is still in progressRetry with the same key after a few seconds
BP709409The consent was changed by another request at the same timeRetry the request
BP710409The key was already used by a payment that is now terminalRead the status in the message: Rejected means you may re-submit under a fresh key, AcceptedSettlementCompleted means the money already moved and you must not
BP711409A concurrent refund request holds the same keyRetry the same request with the same key shortly
BP712409Another request on this consent is submitting a paymentGET the consent's payments before retrying
BP713409Duplicate of a payment made in the same minute without an idempotency-keyAlways send an idempotency-key
BP714409A consent or quick payment create with this key is still in progress. No second consent was created and nothing reached the bankRetry with the same key after a few seconds; once the first request finishes, the retry returns its response
BP715409The charge went out while the refund was being processed, so it could no longer be cancelledRetry the refund with a new idempotency key — the money will be sent back as a refund instead

Refund Errors

See Refunds.

CodeHTTPDescriptionResolution
BP012422The payment is not AcceptedSettlementCompletedPoll the payment until it settles, then refund it
BP013422The refund type is not supported for this payment, for example account_number on a card paymentUse full_refund or partial_refund for a card payment
BP014422The consent does not support refunds: the payer's account number could not be obtained, so an account_number refund cannot be madeContact BlinkPay support
BP039422The refund would take the total refunded above the payment amount, for example a full_refund after a partial oneRefund only what remains, with a partial_refund
BP045422The card payment settled more than 60 days agoContact BlinkPay support
BP046422The card payment has already been refunded or reversedNo action needed
BP047422Refunds are not enabled for the merchantContact BlinkPay support to have refunds enabled
BP048422full_refund or partial_refund on a bank paymentUse an account_number refund and pay the customer back yourself
BP049422Card refunds are not enabled for the merchantContact BlinkPay support — card refunds are granted separately from bank refunds
BP053422The payment's charge has not completed yet, so there is no money to send backPoll the payment until it reaches AcceptedSettlementCompleted, then refund it. Do not re-create the payment — the consent is already used
BP110404Refund does not existVerify the refund ID is correct
BP111404This refund type is not supported for this transaction (the payer's account number could not be found)Contact BlinkPay support
BP903–BP905502The card processor's answer to the refund is unknownGET the refund to check its status before retrying
BP906–BP908502The card processor's answer to a cancellation is unknownGET the payment and check its refunds[] before retrying

Payment Errors

CodeHTTPDescriptionResolution
BP020422Card payment declinedNot returned by the API. When 3D Secure failed, the customer can try another card or pay by bank in the gateway; when the issuer declined the charge, the consent has ended as Consumed. See Declined Cards
BP036422The bank refused the payment for this consent periodEnduring consent: the bank counts this payment in a period whose allowance is used up; try again in the next period (see Period Calculation). Single consent: the consent stays Authorised, so once the cause is resolved you may try again with a new idempotency-key
BP044422An enduring-consent payment would take the period's total above maximum_amount_periodWait for the next period, or take a smaller amount
BP102404Payment does not existVerify the payment ID is correct
BP109404Quick payment does not existVerify the quick payment ID is correct
BP229400The amount is over the bank's payment limitLower the amount; see Payment Limits and payment_limit on the metadata endpoint
BP230400The amount is over your merchant account's payment limitLower the amount, or contact BlinkPay support to change your merchant limit
BP262400An enduring-consent payment is larger than maximum_amount_periodLower the amount
BP263400An enduring-consent payment is larger than maximum_amount_paymentLower the amount
BP277400With surcharging (fee forwarding), the amount including the surcharge is over your merchant payment limit (for an enduring consent, the maximum amount)Lower the amount or the maximum, or contact BlinkPay support to change your merchant limit
BP287400An enduring consent without maximum_amount_payment has a maximum_amount_period over the bank's payment limit, because a single payment could draw the whole period amountSend a maximum_amount_payment at or below the bank's limit
BP288400As BP287, but the maximum_amount_period is over your merchant account's payment limitSend a maximum_amount_payment at or below your limit, or contact BlinkPay support

Fixed Recurring Payment Errors

See the Fixed Recurring Payments guide for how start_date is resolved.

CodeHTTPDescriptionResolution
BP009422Start date is in the pastUse today or a future date (NZ timezone)
BP023422Start date is before the consent's from_timestampUse a date on or after the consent's activation date
BP024422Start date is after the consent's expiry_timestampUse a date inside the consent window, or create a new consent
BP025422The consent has already expiredCreate a new consent
BP030422daily schedule cannot start today — submitted after 21:45 NZSet start_date to tomorrow
BP038422daily schedule whose consent only becomes active after 21:45 NZ on start_dateSet start_date to the following day
BP108404Fixed recurring payment does not existVerify the schedule ID is correct
BP705409Duplicate fixed recurring paymentOnly one active schedule is allowed per consent
BP706409Fixed recurring payment already cancelledNo action needed

Card Payment Errors

These errors are specific to card payment processing. For a detailed troubleshooting guide, see Card Payments.

CodeHTTPDescriptionResolution
BP050422The consent is a card Quick Payment, which completed at the gatewayNothing to do — a Quick Payment has no separate payment step
BP051422The card consent is not authorised, so there is no payment to createWait for the customer to authorise at the gateway, then create the payment
BP052422The card consent carries no card authorisationContact BlinkPay support
BP054422The card consent has already been authorisedCreate the payment, or let the reservation be released; do not authorise the same consent twice
BP060422The card could not be authenticated with 3D Secure (for example, the issuer's 3D Secure was unavailable or the card is not enrolled) and the amount, surcharge included, is over BlinkPay's limit for such payments. The card was not chargedNot returned by the API: the customer can try another card or pay by bank in the gateway. See Declined Cards
BP256–BP258400Card payment set-up details are missingComplete card payment onboarding with BlinkPay; contact support if it persists
BP259400Card transient token missing from the requestSend the transient token from the card capture step
BP260400No card payment types configuredComplete card payment onboarding with BlinkPay
BP261400No card networks configuredComplete card payment onboarding with BlinkPay
BP270400Card payment set-up is incompleteContact BlinkPay to complete card onboarding

Service Errors

CodeHTTPDescriptionResolution
BP601503Bank service unavailableRetry with backoff, using the same idempotency-key for a POST; check for maintenance
BP602503BlinkPay is temporarily unavailableRetry after the Retry-After time, using the same idempotency-key for a POST
BP603503The bank refused the consent; no payment was sentGET the consent to check its status before trying again

For a request that times out or returns another 5xx with no clear answer, see If a Request Times Out.

Need Help?

For errors not listed here or for assistance troubleshooting:

  1. Check the message field for specific details
  2. Review the Troubleshooting Guide
  3. Contact support@blinkpay.co.nz, including the request-id from the response