GET /v1/openapi.json.
Every domain term used on these pages is defined in the Terminology annexure.
Base URLs
Authentication
Every endpoint requires the key header alongside a JSON content type:Units
All money is integer paise (_paise fields), all prices are bps of face value (_bps fields), all timestamps ISO 8601 IST. Worked examples: Money and price.
Responses
Successful responses return the resource JSON directly, no envelope. Errors are a flat, opaque body with a stable slug to branch on:code ?? error for the stable slug and switch on that plus the HTTP status, never on message. Every response, success or error, also carries an X-Request-ID header, the correlation id to log and quote in support. The full contract is on the Errors page.
Pagination
Larger collections use cursor pagination:limit (default 100, maximum 500) and cursor (the next_cursor from a prior response). Responses add count, total, next_cursor and has_more alongside the data. The envelope is additive; non-paged reads of the same endpoints are unchanged.
Idempotency
POST /v1/orders honours an Idempotency-Key header: re-sending the same key returns the original order instead of creating a duplicate. Use one key per logical order and retry fearlessly.
Versioning and change policy
The/v1 contract evolves additively: new endpoints, new optional fields, new webhook events. Build a tolerant reader and your integration never breaks:
- Ignore JSON fields you do not recognise; never fail on an unknown key.
- Ignore webhook events you have not subscribed logic to; acknowledge and move on.
- Treat enums as open sets: handle known values, default the rest.
/v1.
Rate limiting
Every response carriesX-RateLimit-* headers, and a 429 adds Retry-After. The header table and back-off guidance are in Rate limits.
Need help?
Write to support
Include your key prefix (never the full key) and the response body you received.