OpenAPI specs
Per-product OpenAPI 3.1 specifications. Use them to:
- Generate typed client SDKs in any language
- Validate requests in your CI
- Drive auto-generated docs internal to your org
- Power IDE autocomplete (most language servers integrate with OpenAPI)
Download
Per-product
| Product | Latest | Versioned root |
|---|---|---|
| Identity | /openapi/identity.yaml | /openapi/v2026-05/identity.yaml |
| AML | /openapi/aml.yaml | /openapi/v2026-05/aml.yaml |
| Anti-Fraud | /openapi/anti-fraud.yaml | /openapi/v2026-05/anti-fraud.yaml |
| Document Intelligence | /openapi/document-intelligence.yaml | /openapi/v2026-05/document-intelligence.yaml |
| Bank Statement | /openapi/bank-statement.yaml | /openapi/v2026-05/bank-statement.yaml |
| Orchestration | /openapi/orchestration.yaml | /openapi/v2026-05/orchestration.yaml |
| AI Automation | /openapi/ai-automation.yaml | /openapi/v2026-05/ai-automation.yaml |
Unified
/openapi/quantum-elixir.yaml — single file with all seven products. Mostly useful for tools that don't natively combine multiple specs.
Generating a TypeScript client
npx openapi-typescript \
https://docs.quantumelixir.tech/openapi/identity.yaml \
--output ./src/quantum-elixir-identity.d.tsThen use with fetch:
import type { paths } from './quantum-elixir-identity';
type CreateCustomerReq = paths['/api/customers']['post']['requestBody']['content']['application/json'];
type CreateCustomerResp = paths['/api/customers']['post']['responses']['201']['content']['application/json'];
const body: CreateCustomerReq = { fullName: 'Budi Santoso', nik: '...' };
const res = await fetch('https://api.quantumelixir.tech/identity/api/customers', {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
const data: CreateCustomerResp = await res.json();For a higher-level client with retries + rate-limit handling, use @quantum-elixir/sdk instead.
Generating a Python client
openapi-python-client generate \
--url https://docs.quantumelixir.tech/openapi/identity.yaml \
--meta poetryGenerating a Go client
oapi-codegen \
--package=quantumelixir \
--generate=types,client \
https://docs.quantumelixir.tech/openapi/identity.yaml \
> quantumelixir.goSpec quirks worth knowing
BigInt fields
Some IDR amounts can exceed 2^53 and lose precision in JS number. We serialize them as string in JSON, with a vendor extension:
amountIdr:
type: string
pattern: '^[0-9]+$'
x-quantum-bigint: trueIf your generator doesn't honor x-quantum-bigint, the field will type as string — that's correct. Parse with BigInt(field) in JS or use a native bigint type in other languages.
Discriminated unions
Webhook payloads use OpenAPI's discriminator:
WebhookEvent:
oneOf:
- $ref: '#/components/schemas/AlertCreatedEvent'
- $ref: '#/components/schemas/AlertEscalatedEvent'
discriminator:
propertyName: event
mapping:
'alert.created': '#/components/schemas/AlertCreatedEvent'
'alert.escalated': '#/components/schemas/AlertEscalatedEvent'Most generators handle this correctly. If yours doesn't, fall back to typing event as a string and switch on it.
Webhook-only payloads
Webhook event payloads are documented in separate webhooks.yaml files (the main spec only covers REST endpoints). The unified spec includes both.
Versioning
| Version line | Promise |
|---|---|
| Same major version | Backwards-compatible additions only. Existing fields stay; new fields may appear. |
| New major version | Breaking changes possible. Old major continues working for 12 months after deprecation announcement. |
Versions surface in the spec's info.version field. Right now everything is 1.x.
Pin to a versioned URL in CI
https://docs.quantumelixir.tech/openapi/v2026-05/identity.yaml is frozen — your generated client won't change unexpectedly. Bump the version intentionally when you want to pick up new fields.