Docs
Response format
One envelope for every endpoint — success or error.
Whether you call GST verify or Business360, the shape is the same: success, request_id, then either data + meta or error + meta. Parse it once.
Success
200 OK · /v1/pan/verify
{
"success": true,
"request_id": "as_req_01J9X2K7R8M4V6T2Q9W3E5Y1ZB",
"api": "pan.verify",
"version": "2026-10-01",
"data": {
"pan": "AAJCK4821M",
"valid": true,
"status": "Valid",
"category": "Company",
"registered_name": "KAVERI TEXTILES PRIVATE LIMITED",
"name_match": {
"input": "Kaveri Textiles Pvt Ltd",
"score": 1,
"result": "match"
}
},
"meta": {
"charged": true,
"amount_inr": 2,
"latency_ms": 263,
"source_status": "live",
"attempts": 1,
"data_as_of": "2026-10-03T09:12:00+05:30",
"mode": "live"
}
}Error
504 · PROVIDER_TIMEOUT
{
"success": false,
"request_id": "as_req_01J9X2M4B7C1D8E5F2G6H3J9KA",
"error": {
"code": "PROVIDER_TIMEOUT",
"type": "provider_error",
"message": "The source did not answer in time. You were not charged.",
"retryable": true,
"docs_url": "/docs/errors#provider_timeout"
},
"meta": {
"charged": false,
"amount_inr": 0,
"latency_ms": 731,
"attempts": 2
}
}meta fields
| Field | Type | Description |
|---|---|---|
| charged | boolean | Whether this call was billed. Always false for failures. |
| amount_inr | number | Amount billed, GST-inclusive |
| latency_ms | integer | — |
| source_status | "live" | "degraded" | `degraded` when a fallback source answered |
| attempts | integer | Sources tried before an answer (billed once) |
| data_as_of | string | Freshness of the source data (IST) |
| mode | "live" | "test" | — |
| live_price_inr | number | Test mode only: what this call costs in live mode |
| modules_requested | integer | Business360 only |
| modules_succeeded | integer | Business360 only |
| billing | object | Business360 only: sum of succeeded modules, the bundle cap, and what the cap saved |
| ↳sum_inr | number | — |
| ↳cap_inr | number | — |
| ↳saved_inr | number | — |
Headers
| Header | Meaning |
|---|---|
X-Request-Id | Same as request_id. Quote it to support. |
X-Api-Version | API version that served the call (2026-10-01). |
X-Charged / X-Amount-Inr | Billing outcome, mirrored from meta. |
X-Source-Trace | Which sources were tried, in order, with outcomes and latency. |
X-RateLimit-Limit / -Remaining | Your burst budget and what's left. |
Retry-After | Seconds to wait after a 429. |
Idempotent-Replayed | true when the response is a replay of an earlier request. |
Versioning
Versions are dated (2026-10-01). Additive changes — new fields, new modules — ship without a version bump. Breaking changes get a new date and a migration note in the changelog.