API reference

A small, strict HTTP surface

Everything the website and CLI do goes through this API. Requests are authenticated per account, quotas are reserved before forwarding, and every error uses the same structure.

Base URL and authentication

The public base URL is https://nordai.my.id/api. Send a customer API key as a bearer token. Browser sessions use cookies and are handled by the website.

Authorization: Bearer nord_sk_…

Keys are shown once at creation and stored as a SHA-256 hash. A key can be restricted to specific model ids and given its own per-minute and monthly limits.

Chat completions

The endpoint is OpenAI-compatible. Set stream: true for SSE. The gateway rewrites model to an approved id, caps max_tokens to your plan, and forwards tool definitions unchanged.

curl -N https://nordai.my.id/api/v1/chat/completions \
  -H "Authorization: Bearer $NORDAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<id from /v1/me/models>",
    "stream": true,
    "messages": [{"role": "user", "content": "Explain this error"}]
  }'

Response headers include X-NordAI-Request-Id, X-NordAI-Model (the model that actually served the request) and your current rate-limit counters.

Idempotency

Send Idempotency-Key to make retries safe. A repeated key returns 409 duplicate_request and is not counted twice.

Errors

{
  "error": {
    "code": "monthly_limit_reached",
    "message": "Monthly allowance reached (6000 of 6000 requests on NordAI Pro)…",
    "request_id": "b1f0c6a2d3e4f5a6",
    "details": { "reset_at": "2026-11-01T00:00:00+07:00", "limit": 6000, "used": 6000 }
  }
}
  • 401 invalid or revoked credential.
  • 403 model not allowed for the plan or key, unverified email, support-only action.
  • 409 duplicate idempotency key or illegal state transition.
  • 429 rate, concurrency or quota limit — check details.reset_at.
  • 502/503/504 upstream router failure, timeout or maintenance.

Usage data

GET /v1/usage/summary returns a zero-filled daily series, per-model aggregates and your recent requests. Token counts appear only when the upstream reported them; they are never estimated.

GET /v1/gateway/limits returns the exact plan values and remaining allowance, which is what the CLI prints for /usage.