SplitPay

Errors

Error format, the full list of codes and rate limits

Every response uses the same envelope. An error:

{
  "success": false,
  "error": {
    "code": -1007,
    "type": "validation",
    "message": "Request validation failed",
    "details": [{ "field": "recipients.0.share", "message": "share must not be less than 1" }]
  },
  "meta": { "requestId": "8d0c…", "timestamp": "2026-09-25T10:00:00.000Z", "processingTimeMs": 3 }
}
  • message comes in the language from Accept-Language (uz, ru, en) and is safe to show to the user.
  • code is a stable numeric code. Branch your logic on it, never on the message text.
  • meta.requestId is what support needs. You can pass your own x-request-id with the request.

Ranges

Each module owns its own hundred. A whole range belongs to one topic, so you can group handling by range instead of listing codes one by one.

RangeTopic
-1001 … -1009Shared validation: amount, shares, UUID, PINFL, TIN, name, email, pagination
-2001 … -2009Fees and shares: fee below minimum, duplicate recipients, shares not totalling 10000
-3001 … -3007Charge: status, reversal, externalId conflict, concurrent modification
-4001 … -4004Business: status, not active, not found, TIN already taken
-5001 … -5006Merchant: status, not active, foreign recipient, no default recipient
-6001 … -6007Recipient: not found, cannot receive money, no provider account
-7001 … -7002Customer: invalid externalUserId, not found
-8001 … -8008Card: not active, expired, not available to the merchant, invalid mask
-9001 … -9009Payment provider: declined, wrong code, unavailable, split rejected
-10001 … -10003Key and token: wrong credentials, invalid token, key revoked
-11001 … -11005Request: idempotency, authentication, rate limit
-12001 … -12004Fiscal profile: IKPU, package code, VAT rate
-14001 … -14005Webhooks: invalid URL, not configured, delivery not found

Two more ranges never appear in the Partner API: -13001 … -13016 are admin panel accounts and -15001 … -15005 are onboarding applications from the website.

The codes you will actually meet

CodeHTTPWhen
-1007422Validation failed, per-field breakdown in details
-10001401Wrong clientId or clientSecret
-10002401Token invalid or expired, fetch a new one
-10003401The API key was revoked in the admin panel
-11001400Idempotency-Key missing where it is required
-11002422Same Idempotency-Key with a different request body
-11003409A request with this key is still running, retry later
-11005429Rate limit, retry after Retry-After seconds
-2006422Shares do not add up to 10000 basis points
-3004409externalId already used, no second charge was created
-3006422The operating day is closed, reversal is no longer possible
-3007409The charge changed concurrently, reload it and retry
-6004422The recipient is not approved and cannot receive money
-8004422Card is not active, the binding was never confirmed
-8006403The card belongs to a different merchant
-9002422The bank rejected the card
-9004422The bank declined the payment, reason in failureReason
-12004422The merchant has no fiscal profile, no receipt can be issued

5xx responses are safe to retry with the same Idempotency-Key.

Rate limits

WhatLimit
POST /v1/auth/token30 per minute per clientId and 60 per minute per IP
POST /v1/cards/{id}/confirm10 attempts per card per 15 minutes, on top of the shared limit
Everything else600 per minute per API key

Over the limit you get 429 with code -11005 and a Retry-After header telling you how many seconds to wait. Cache the token: it lives for an hour, there is no need to fetch one per request.

On this page