Skip to main content

Errors & rate limits

Error envelope

{
"success": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "human-readable explanation",
"rowErrors": [ { "index": 3, "sourceLoanNumber": "LN-…", "field": "borrower.phone", "reason": "invalid_mobile" } ]
}
}

Every response carries an X-Request-Id header — include it in support queries and we can trace the exact request.

Codes

HTTPCodeCauseYour action
401UNAUTHORIZEDUnknown/revoked key, wrong environment, missing headers, IP not allowedCheck key + environment; see environments
401SIGNATURE_INVALIDSignature mismatchDebug it
401TIMESTAMP_SKEWTimestamp outside ±5 minSync clocks (NTP); sign at send time
403SANDBOX_ONLYSandbox-only endpoint with a live keyUse test credentials
403PAYMENT_MODE_MISMATCHpayments/confirm while not on Mode BConfirm your configured payment mode
404CASE_NOT_FOUNDUnknown loan for your orgCheck sourceLoanNumber; was it pushed/committed?
409DUPLICATE_CONFIRMATIONPayment reference already bookedTreat as success — the original booking is returned
413TOO_MANY_ROWSBatch above the row cap (default 1,000)Split the batch
422VALIDATION_FAILEDEnvelope or per-row validation failureFix rows in rowErrors; others were unaffected
429RATE_LIMITEDPer-org limits exceededHonour Retry-After
429AUTH_LOCKEDSignature-failure lockout (15 min)Stop, debug the signature, wait

Rate limits (per organisation, adjustable)

LimitDefault
Requests60 / minute
Case batches10 / hour
Batch size1,000 rows
Payload5 MB