{
  "api": "inferrex",
  "version": "v1",
  "updated": "2026-06-18",
  "entries": [
    {
      "date": "2026-06-18",
      "changes": [
        {
          "kind": "added",
          "summary": "Outbound webhooks now cover every customer-facing resource — 47 event types spanning workflows, alert rules, golden-record proposals, governance/retention/approval policies, circuit breakers, environments, teams, and API-key scopes. Register an endpoint at `POST /v1/webhooks/subscriptions`, filter by event type, and verify the `X-Inferrex-Signature` HMAC; `X-Inferrex-Event-Id` is stable across redeliveries. The full catalogue ships in the OpenAPI `x-webhooks` extension."
        }
      ]
    },
    {
      "date": "2026-06-10",
      "changes": [
        {
          "kind": "added",
          "summary": "Idempotency-Key on every unsafe request (POST/PUT/PATCH/DELETE) — the first response is cached for 24h and replayed verbatim on retry (a replay carries `Idempotent-Replayed: true`), so an agent can retry safely."
        },
        {
          "kind": "added",
          "summary": "Keyset cursor pagination on high-volume list endpoints (`cursor` + `nextCursor` + `hasMore`) alongside offset pagination — stable under inserts, no deep-offset cost."
        }
      ]
    },
    {
      "date": "2026-06-03",
      "changes": [
        {
          "kind": "added",
          "summary": "Per-key / per-tier token-bucket rate limits with `X-RateLimit-Limit` / `-Remaining` / `-Reset` headers (plus the draft `RateLimit-*` equivalents) and `Retry-After` on 429 — an agent behind one NAT egress gets its own ceiling."
        },
        {
          "kind": "added",
          "summary": "Granular API-key scopes (`<resource>:<read|write|delete>`); each operation declares the scope it needs in its `security`, and the full catalogue is in the OpenAPI `x-api-scopes` extension."
        },
        {
          "kind": "changed",
          "summary": "Every error response now carries `{ error, message, retryable, docs_url }` — `retryable` tells an agent whether the same request could succeed on retry, and `docs_url` links the error code so it can self-correct without a human."
        }
      ]
    },
    {
      "date": "2026-05-26",
      "version": "v1",
      "changes": [
        {
          "kind": "added",
          "summary": "Inferrex API v1 — a REST API at `https://api.inferrex.com`, a typed TypeScript SDK (`@inferrex/sdk`), and an MCP server (`@inferrex/mcp`), all generated from one source so the contract never drifts. The machine-readable OpenAPI 3.0.3 spec is published credential-free at `/openapi.json`, alongside `/v1/pricing` and `/.well-known/llms.txt`."
        }
      ]
    }
  ]
}
