IronStratum

Changelog

Additive changes to the public API, newest first. Per the versioning policy (/v1 is additive-only, forever), nothing here ever removes or retypes a field — new fields, params, and endpoints appear; clients must tolerate additions. Dates are UTC.

2026-08-21 — conversations and session mode

  • New optional request param: session_id on POST /v1/chat/completions. When set, messages carries only the new turn (delta) and the gateway assembles the stored conversation prefix; an unseen id auto-creates the conversation. Canonical hyphenated-hex UUID, case-insensitive. See sessions.
  • New additive response field: session_id on chat completions and stream chunks — present only on session-mode turns/streams, absent on full-context requests (additive per the versioning policy).
  • New endpoints: /v1/conversationsGET (key-scoped list, most-recently-active first, limit default 25 / clamp 100), DELETE (delete all of the key's conversations), and GET/DELETE /v1/conversations/{id} (turns + per-conversation cost summary; idempotent delete). Deleted conversations never revive; anonymized ledger rows survive.
  • New error codes (envelope shape unchanged): 400 context_length_exceeded (assembled session context over the model's context_length — remediation: new session_id or trim), 400 sessions_unavailable (session_id sent to a gateway without the conversation store), 404 conversation_not_found (/v1/conversations id missing/deleted/foreign/malformed — indistinguishable by design). See errors.
  • New additive fields on GET /v1/models and GET /v1/models/{alias} (owner-approved contract §2 addition): every model object now carries pricing {input, output, cached_input} (OUR retail per-1M USD — the pricing page's numbers, never upstream cost) and context_length (the context window the sessions API enforces on assembled context).
  • 429 rate_limited is now emitted in one case: a concurrent request holding the same session_id past the bounded lock wait (30 s default). Per-key throttling remains future work — the reserved x-ratelimit-* headers stay absent until then (see rate posture).