Skip to main content

Error Codes

The authoritative source of truth for platform error metadata is the backend catalog in IkawaariErrorCatalog and IkawaariPaaSDomainErrorCodes.

This page documents the implemented error modules, representative codes, HTTP status behavior, and retry guidance.

Error format

API and merchant surfaces generally return structured error payloads. A typical shape is:

{
"error": {
"code": "IKW-PAYOUT-003",
"message": "Human-readable description",
"type": "domain_error"
}
}

Source-of-truth policy

  • Code values come from IkawaariPaaSDomainErrorCodes
  • Module, HTTP status, and retryability come from IkawaariErrorCatalog
  • Some backward-compatible engine aliases are also mapped in the catalog

HTTP status reference

CodeMeaning
200Success
201Created
400Bad request or invalid input
401Authentication required or invalid credentials/token
402Balance or funds constraint
403Forbidden, policy blocked, or merchant mismatch
404Resource not found
409State conflict, duplicate operation, or idempotency conflict
410Expired invitation or resource lifecycle ended
412Precondition failed
423Locked or already-active environment/test mode state
429Rate limit or retry cooldown triggered
500Internal platform error
502Upstream provider or webhook delivery failure
503Service temporarily unavailable
504Upstream or system timeout

Module summary

ModuleTypical areaTypical statusesRetryable cases
AUTHlogin, tokens, API keys401no
AUTHZroles, membership, scopes403no
ORGorganization access403, 404no
MERCHANTmerchant state and account resolution403, 404, 409, 410no
REQvalidation and idempotency400, 409no
RESgeneric resource state404, 409no
RATEthrottling429yes
SYSplatform/system failures500, 503, 504some
CHKcheckout flows400, 404no
TRANSFERpayments and refunds400, 402, 404, 409, 502provider failures only
PAYOUTpayout operations400, 402, 403, 404, 409no
BILLINGinvoices and plans404, 500cycle errors only
LEDGERbalance and accounting400, 402, 404no
COMPLIANCEKYC, limits400, 403no
SECURITYMFA, passkeys, challenges400, 403, 429, 500no
RISKcase handling and rules404, 409no
CONFIGfeature flags and country/currency policy400, 403no
PRODUCTproduct catalog400, 404no
WEBHOOKwebhook endpoints and delivery404, 502delivery failures only
TERMINALreader/session transitions400, 409no
EXTERNALprovider integrations400, 502, 504unavailable/timeout only
ESCROWescrow contracts and disputes400, 403, 404, 409no
FUNDINGfunding campaigns400, 403, 404, 409no
MKTPLACEmarketplace engine400, 403no
APPecosystem app lifecycle403, 404no
ENVsandbox/live test-mode state412, 423no
CONNECTconnected account configuration400, 404no

Authentication and authorization

CodeModuleHTTPRetryableMeaning
IKW-AUTH-001AUTH401NoInvalid credentials
IKW-AUTH-002AUTH401NoAuthentication required
IKW-AUTH-003AUTH401NoToken revoked
IKW-AUTH-004AUTH401NoToken expired
IKW-AUTH-005AUTH401NoToken invalid
IKW-AUTH-006AUTH401NoSession expired
IKW-AUTH-007AUTH401NoSession revoked
IKW-AUTH-008AUTH401NoAPI key expired
IKW-AUTH-009AUTH401NoAPI key rotated
IKW-AUTHZ-001AUTHZ403NoForbidden
IKW-AUTHZ-002AUTHZ403NoInsufficient role
IKW-AUTHZ-003AUTHZ403NoMembership required

Merchant, request, and system foundations

CodeModuleHTTPRetryableMeaning
IKW-MERCHANT-001MERCHANT404NoMerchant not found
IKW-MERCHANT-002MERCHANT403NoMerchant disabled
IKW-MERCHANT-003MERCHANT409NoMerchant already exists
IKW-MERCHANT-004MERCHANT410NoMerchant invitation expired
IKW-MERCHANT-005MERCHANT404NoMerchant account not found
IKW-REQ-001REQ400NoInvalid input
IKW-REQ-002REQ400NoRequired parameter missing
IKW-REQ-003REQ400NoParameter invalid
IKW-REQ-004REQ409NoIdempotency conflict
idempotency_key_conflictREQ409NoBackward-compatible idempotency conflict alias
IKW-RES-001RES404NoResource not found
IKW-RES-002RES409NoResource already exists
IKW-RES-003RES409NoResource state conflict
IKW-RATE-001RATE429YesToo many requests
IKW-SYS-001SYS500NoInternal error
IKW-SYS-002SYS503YesService unavailable
IKW-SYS-003SYS504YesSystem timeout

Checkout, payments, refunds, and payouts

CodeModuleHTTPRetryableMeaning
IKW-CHK-001CHK400NoInvalid payment link
IKW-CHK-002CHK404NoCheckout session not found
IKW-CHK-003CHK400NoCheckout session expired
IKW-CHK-004CHK400NoCheckout session not open
IKW-CHK-005CHK400NoCheckout amount required
IKW-CHK-006CHK400NoCheckout has no payment intent
IKW-CHK-007CHK400NoReceipt not available
IKW-TRANSFER-001TRANSFER400NoInvalid amount
IKW-TRANSFER-002TRANSFER400NoCurrency mismatch
IKW-TRANSFER-003TRANSFER404NoTransfer or payment not found
IKW-TRANSFER-004TRANSFER409NoInvalid state transition
IKW-TRANSFER-005TRANSFER400NoRefund exceeds amount
IKW-TRANSFER-006TRANSFER409NoAlready refunded
IKW-TRANSFER-007TRANSFER502YesProvider failed
IKW-TRANSFER-008TRANSFER402NoInsufficient balance
IKW-PAYOUT-001PAYOUT404NoPayout not found
IKW-PAYOUT-002PAYOUT400NoInvalid destination
IKW-PAYOUT-003PAYOUT402NoInsufficient payout balance
IKW-PAYOUT-004PAYOUT409NoBatch already processing
IKW-PAYOUT-005PAYOUT409NoBatch already completed
IKW-PAYOUT-006PAYOUT400NoInvalid recipient
IKW-PAYOUT-007PAYOUT403NoAML rejected
IKW-PAYOUT-008PAYOUT403NoMerchant mismatch
IKW-PAYOUT-009PAYOUT400NoCurrency mismatch

Billing, ledger, products, and configuration

CodeModuleHTTPRetryableMeaning
IKW-BILLING-001BILLING404NoInvoice not found
IKW-BILLING-002BILLING404NoPlan not found
IKW-BILLING-003BILLING500YesBilling cycle error
IKW-LEDGER-001LEDGER404NoLedger account not found
IKW-LEDGER-002LEDGER402NoInsufficient balance
IKW-LEDGER-003LEDGER400NoCurrency mismatch
IKW-CONFIG-001CONFIG403NoFeature disabled
IKW-CONFIG-002CONFIG400NoCountry/currency disabled
IKW-PRODUCT-001PRODUCT404NoProduct not found
IKW-PRODUCT-002PRODUCT400NoInvalid product name
IKW-PRODUCT-003PRODUCT400NoInvalid product price

Security, compliance, risk, webhook, and external providers

CodeModuleHTTPRetryableMeaning
IKW-COMPLIANCE-001COMPLIANCE403NoKYC required
IKW-COMPLIANCE-002COMPLIANCE400NoCompliance document expired
IKW-COMPLIANCE-003COMPLIANCE403NoCompliance limit exceeded
IKW-SECURITY-001SECURITY403NoMFA required
IKW-SECURITY-002SECURITY400NoInvalid MFA code
IKW-SECURITY-003SECURITY429NoToo many MFA attempts
IKW-SECURITY-004SECURITY400NoInvalid passkey
IKW-SECURITY-005SECURITY400NoGoogle OAuth failed
IKW-SECURITY-006SECURITY409NoGoogle already linked
IKW-SECURITY-007SECURITY429NoSecurity cooldown active
IKW-SECURITY-008SECURITY500NoGoogle not configured
IKW-SECURITY-009SECURITY400NoGoogle email not verified
IKW-SECURITY-010SECURITY400NoChallenge expired
IKW-SECURITY-011SECURITY400NoChallenge not verified
IKW-SECURITY-012SECURITY400NoChallenge mismatch
IKW-RISK-001RISK409NoRisk case already decided
IKW-RISK-002RISK404NoRisk rule not found
IKW-RISK-003RISK409NoRisk case cannot assign
IKW-WEBHOOK-001WEBHOOK404NoWebhook endpoint not found
IKW-WEBHOOK-002WEBHOOK502YesWebhook delivery failed
IKW-EXTERNAL-001EXTERNAL502YesProvider unavailable
IKW-EXTERNAL-002EXTERNAL504YesProvider timeout
IKW-EXTERNAL-003EXTERNAL400NoProvider rejected request

Escrow, funding, marketplace, apps, environment, and connect

CodeModuleHTTPRetryableMeaning
IKW-ESCROW-001ESCROW404NoEscrow contract not found
IKW-ESCROW-002ESCROW409NoInvalid escrow transition
IKW-ESCROW-003ESCROW409NoActive dispute blocks operation
IKW-ESCROW-004ESCROW400NoEscrow currency mismatch
IKW-ESCROW-005ESCROW403NoEscrow merchant mismatch
IKW-ESCROW-006ESCROW403NoEscrow feature disabled
IKW-ESCROW-007ESCROW409NoDuplicate escrow operation
IKW-FUNDING-001FUNDING404NoFunding campaign not found
IKW-FUNDING-002FUNDING409NoInvalid funding transition
IKW-FUNDING-003FUNDING400NoInsufficient amount
IKW-FUNDING-004FUNDING400NoFunding currency mismatch
IKW-FUNDING-005FUNDING403NoFunding merchant mismatch
IKW-FUNDING-006FUNDING403NoFunding feature disabled
IKW-FUNDING-007FUNDING409NoDuplicate contribution
IKW-MKTPLACE-001MKTPLACE403NoSeller suspended
IKW-MKTPLACE-002MKTPLACE400NoInvalid marketplace order
IKW-MKTPLACE-003MKTPLACE400NoCommission error
IKW-MKTPLACE-004MKTPLACE400NoMarketplace currency mismatch
IKW-MKTPLACE-005MKTPLACE403NoMarketplace merchant mismatch
IKW-MKTPLACE-006MKTPLACE400NoMarketplace refund not allowed
IKW-APP-001APP404NoApp not found
IKW-APP-002APP403NoApp kill switch enabled
IKW-APP-003APP403NoInstallation inactive
IKW-ENV-001ENV412NoTest mode not activated
IKW-ENV-002ENV423NoTest mode already active
IKW-CONNECT-001CONNECT404NoConnected account not found
IKW-CONNECT-002CONNECT400NoInvalid connected account configuration

Backward-compatible engine aliases

The catalog also maps legacy engine error strings to canonical platform codes.

Examples include:

  • PayoutEngine:BatchNotFoundIKW-PAYOUT-001
  • EscrowEngine:ContractNotFoundIKW-ESCROW-001
  • FundingEngine:CampaignNotFoundIKW-FUNDING-001
  • MarketplaceEngine:SellerSuspendedIKW-MKTPLACE-001

How to handle errors

  • Use the code as the programmatic key for branching logic.
  • Use HTTP status for transport-level behavior.
  • Only retry when the catalog marks the condition as effectively retryable, such as rate limits, provider unavailability, or timeouts.
  • For merchant-scoped flows, prefer surfacing user-action guidance rather than raw internal implementation terms.