Errors

Every error response has the same shape, and the docs field always points at the matching section below.

{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Monthly quota exceeded for this API key.",
    "docs": "https://kramank.pages.dev/errors#QUOTA_EXCEEDED"
  }
}

Authentication & authorization

MISSING_API_KEY 401

No API key was sent. Provide one via Authorization: Bearer <key> or X-API-Key. Direct-channel requests only — RapidAPI requests are identified by X-RapidAPI-User instead.

INVALID_API_KEY 401

The API key sent doesn't match any key on record.

REVOKED_API_KEY 401

The API key was valid once but has since been revoked. Issue a new key.

WRONG_PRODUCT 403

The API key is valid but was issued for a different product (reference data vs. invoice extraction). Use a key issued for the product you're calling.

INVALID_PROXY_SECRET 401

RapidAPI channel only. The X-RapidAPI-Proxy-Secret header didn't match — this means the request didn't actually come through RapidAPI's proxy.

MISSING_RAPIDAPI_USER 401

RapidAPI channel only. The X-RapidAPI-User header, which identifies the calling customer, was missing.

Quota

QUOTA_EXCEEDED 429

Direct channel only — RapidAPI enforces its own quota. You've used your plan's monthly call allowance; it resets at the start of next month, or upgrade your plan. The response includes X-Quota-Limit and X-Quota-Remaining: 0 headers.

Format validation

For GSTIN/PAN, these come from candidate input that isn't even plausible — empty, or absurdly long; anything else returns 200 with valid: false instead. For IFSC/pincode, any pattern mismatch returns one of these, since those endpoints are lookups, not format checkers — a well-formed-but-unknown value returns IFSC not found/pincode not found (404) instead.

INVALID_IFSC_FORMAT 400

The input doesn't match AAAA0XXXXXX (4 letters, then 0, then 6 alphanumerics).

INVALID_PINCODE_FORMAT 400

The input isn't a plausible 6-digit pincode.

GSTIN_TOO_LONG 400

The input is longer than any plausible GSTIN (over 50 characters) and was rejected before validation ran.

GSTIN_EMPTY 400

The GSTIN input was empty.

PAN_TOO_LONG 400

The input is longer than any plausible PAN (over 50 characters) and was rejected before validation ran.

PAN_EMPTY 400

The PAN input was empty.

Not found

The input was well-formed, but nothing matched it in the underlying dataset.

IFSC_NOT_FOUND 404

No IFSC record found for this code.

PINCODE_NOT_FOUND 404

No post offices found for this pincode.