What we can hand your engineers today.
Three things exist and we send them on request. Three do not exist yet, and they are marked as such.
Available now.
- On request
OpenAPI surface
Every service publishes its own OpenAPI document, generated from the schemas its routes validate against.
- On request
Event contracts
Every domain event has a JSON Schema in one shared library, so a non-Python consumer is possible.
- Under NDA
Architecture decisions
The load-bearing decisions (tenancy, the outbox, money, signing keys) written down with their consequences.
The API, in two requests.
Every route declares the permission it needs, and the organisation comes from the token, never from a parameter.
GENERATE AN IRN
// 200: the IRN, stored against the invoice (simulated portal today)
{
"invoice_id": "8f21c4de-…",
"irn": "a5c7…9f2b",
"ack_no": "112410000123456",
"ack_date": "2026-09-19T11:14:22+05:30",
"status": "REGISTERED",
"total_minor": 1846200,
"currency": "INR"
}NOTE₹18,462.00 as 1846200 minor units. No float ever touches a rupee, and the invoice row it lands on is append-only.
A SCOPED LIST
# request
Authorization: Bearer <jwt, verified via JWKS>
// 200
{
"items": [ … ],
"scope_applied": "LOCATION",
"organization_id": "from the token, never from the query"
}NOTE401 for a missing or unverifiable token, 403 for a token that verifies but does not carry the permission. The two are never collapsed into one another.
Send your integration engineer, not a procurement form.
Tell us what you need to integrate with and we will send the relevant OpenAPI document and event schemas before the call.