📘 Public beta · Endpoints are stable; OpenAPI specs and SDKs ship monthly. See changelog →
API reference
OpenAPI specs

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

ProductLatestVersioned 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.ts

Then 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 poetry

Generating a Go client

oapi-codegen \
  --package=quantumelixir \
  --generate=types,client \
  https://docs.quantumelixir.tech/openapi/identity.yaml \
  > quantumelixir.go

Spec 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: true

If 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 linePromise
Same major versionBackwards-compatible additions only. Existing fields stay; new fields may appear.
New major versionBreaking 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.