Essentials

Errors & Status Codes

The APIs use conventional HTTP status codes and return a consistent JSON error envelope, so you can handle failures the same way across every endpoint.

Error envelope

Every error response shares the same shape. Always log the transaction_id — it’s what support needs to trace a request.

1{
2 "code": "GSTIN_INVALID",
3 "message": "The supplied GSTIN failed checksum validation.",
4 "transaction_id": "b1f4c2a0-9d3e-4f21-8c77-2a1e9f0b3d44",
5 "timestamp": "2026-06-14T09:42:11Z"
6}

HTTP status codes

CodeMeaningWhen it happens
200OKThe request succeeded.
400Bad RequestMalformed JSON or a missing required field.
401UnauthorizedToken missing, invalid, or expired.
403ForbiddenKey lacks permission or IP is not allow-listed.
404Not FoundThe resource or entity does not exist.
422Unprocessable EntityValidation failed (e.g. invalid GSTIN or IFSC).
429Too Many RequestsYou exceeded your rate limit.
503Service UnavailableUpstream GSTN/NIC system is temporarily down.

Common error codes

CodeDescription
GSTIN_INVALIDGSTIN failed format or checksum validation.
TOKEN_EXPIREDAccess token has passed its one-hour lifetime.
RATE_LIMITEDRequest quota exceeded for the current window.
DUPLICATE_IRNAn IRN already exists for this invoice document.
UPSTREAM_TIMEOUTThe government system did not respond in time.
Retry transient failures
Treat 429, 503, and UPSTREAM_TIMEOUT as retryable. Use exponential backoff and respect the reset window — don’t hammer a failing upstream.