{
  "page": "changelog",
  "title": "Changelog",
  "api_version": "1.0.0-pre",
  "rss": "https://arettic.com/changelog.xml",
  "entries": [
    {
      "date": "2026-09-30",
      "id": "2026-09-30-open-specs",
      "title": "Open JSON Schemas and the outcome receipt spec",
      "areas": [
        "API",
        "Docs"
      ],
      "items": [
        "JSON Schemas (2020-12) for receipts, execute requests and responses, webhook events and pass rules, at `/schemas/{name}.json` (index: `/schemas`), under CC BY 4.0.",
        "The outcome receipt spec, v1: every field, the rules, and how the hashes are made (SHA-256 of canonical JSON), so anyone can verify a receipt against the data they kept.",
        "A Python receipt verifier next to the score formula in the open benchmark harness."
      ]
    },
    {
      "date": "2026-09-30",
      "id": "2026-09-30-developer-docs",
      "title": "Developer docs, changelog and status",
      "areas": [
        "Docs",
        "Site"
      ],
      "items": [
        "Docs for every part of the API: quickstart, authentication, test mode, recommend, execute, jobs, receipts, disputes, budgets and approvals, webhooks, the org API, MCP, the SDKs, scores, pass rules, credits, data handling, rate limits and public data.",
        "Every docs page has a Markdown and a JSON copy: add `.md` or `.json` to its URL, or send `Accept: text/markdown`.",
        "This changelog, as `/changelog.md`, `/changelog.json` and an RSS feed at `/changelog.xml`.",
        "Terms and privacy drafts at `/terms` and `/privacy`."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-sdk-error-codes",
      "title": "Error codes the SDKs raise themselves",
      "areas": [
        "SDKs",
        "Docs"
      ],
      "items": [
        "`network_error`, `timeout`, `aborted`, `unexpected_redirect`, `connection_failed` and `http_error` are listed on `/docs/errors`, so every `doc_url` an SDK hands you resolves.",
        "`GET` and `DELETE` on `/mcp` answer 405 `method_not_allowed`: the MCP server is stateless and takes `POST` only."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-data-deletion",
      "title": "Ask for your stored data to be deleted",
      "areas": [
        "API",
        "Dashboard"
      ],
      "items": [
        "An owner can ask us to delete the org's stored inputs, results and private test sets from Team in the dashboard, or with `POST /v1/orgs/{orgId}/deletion-requests`. It is done within 24 hours and we email you when it is.",
        "`GET /v1/orgs/{orgId}/deletion-requests` shows each request and when it is done by. Org keys can read requests; making one needs an owner signed in.",
        "New error `credits_frozen`: purchases are declined while we look into something on the account; sign-in and reads keep working."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-sdks-and-mcp",
      "title": "TypeScript and Python SDKs, and a local MCP server",
      "areas": [
        "SDKs",
        "MCP"
      ],
      "items": [
        "`@arettic/sdk` (TypeScript) and `arettic` (Python) cover every agent and org endpoint, with retries on reads and on `execute` (its idempotency key makes a retry safe).",
        "`@arettic/mcp` runs a local stdio MCP server that forwards to the hosted one, for clients that don't speak Streamable HTTP.",
        "The hosted MCP server has all nine tools: `list_task_types`, `recommend`, `get_tool`, `execute`, `get_job`, `get_receipt`, `open_dispute`, `get_approval` and `get_balance`."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-private-benchmarks",
      "title": "Private benchmarks and the provider view",
      "areas": [
        "API",
        "Dashboard",
        "Scores"
      ],
      "items": [
        "Pro orgs can upload their own test set and benchmark any tools on it: `POST /v1/orgs/{orgId}/test-sets`, then `POST /v1/orgs/{orgId}/benchmarks`. Results stay private to the org.",
        "Providers can claim their listing and see a read-only view of their scores, failure reasons and demand: `GET /v1/orgs/{orgId}/provider`."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-org-api",
      "title": "Everything in the dashboard works through the API",
      "areas": [
        "API",
        "Dashboard"
      ],
      "items": [
        "Org API keys (`ok_…`, read or write, one org) drive every dashboard action. Make them on Team, or with `POST /v1/orgs/{orgId}/keys` while signed in.",
        "The dashboard meets WCAG 2.2 AA and never shows a CAPTCHA."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-dashboard",
      "title": "Customer dashboard, receipts and disputes",
      "areas": [
        "Dashboard",
        "API"
      ],
      "items": [
        "Spend by day, agent and tool, balance, and how many items cost you nothing: `GET /v1/orgs/{orgId}/dashboard`.",
        "Receipt explorer with filters and a CSV export: `GET /v1/orgs/{orgId}/receipts`, `GET /v1/orgs/{orgId}/exports/receipts.csv`.",
        "Dispute a charged item within 7 days: `POST /v1/disputes` (agent key) or `POST /v1/orgs/{orgId}/disputes`. We decide within 48 hours against the stored result; upheld means a refund to where the credits came from, and it counts against the tool's score.",
        "Signed webhooks with 24 hours of retries, plus emails, for the single event list: `POST /v1/orgs/{orgId}/webhooks`, `GET /v1/orgs/{orgId}/events`."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-execute",
      "title": "Execute: pay only for results that pass",
      "areas": [
        "API",
        "Pass rules",
        "Pricing"
      ],
      "items": [
        "`POST /v1/execute` runs any of the 30 curated tools with one key. Each result is checked against the published pass rule for its task type: pass is charged, fail releases the hold and returns the reason, provider errors are never charged.",
        "Up to 1,000 inputs per request; over 25 runs as a job (`GET /v1/jobs/{id}`).",
        "Idempotency keys: a retry with the same key is never charged twice.",
        "Opt-in fallback to the next-best tool, budgets and approval thresholds per agent (`GET /v1/approvals/{id}`), IP allowlists, and receipts for every purchase (`GET /v1/receipts/{id}`).",
        "Inputs and results are stored encrypted for 7 days (longer only while disputed), then deleted."
      ]
    },
    {
      "date": "2026-09-29",
      "id": "2026-09-29-credits",
      "title": "Credits, top-ups and plans",
      "areas": [
        "Pricing",
        "API",
        "Dashboard"
      ],
      "items": [
        "Buy credits in US dollars (1 credit = $0.001): `POST /v1/orgs/{orgId}/topups`. An invoice for every top-up: `GET /v1/orgs/{orgId}/invoices`.",
        "$1 of trial credit when you make your org; auto-reload from a saved card (`PUT /v1/orgs/{orgId}/auto-reload`). Paid credits expire after 12 months.",
        "The Pro plan: `POST /v1/orgs/{orgId}/subscriptions`. Prices are recomputed daily from each tool's cost and pass rate; moves over 20% are reviewed before they apply (`GET /v1/pricing`)."
      ]
    },
    {
      "date": "2026-09-28",
      "id": "2026-09-28-recommend-and-scores",
      "title": "Recommend, scores and public data",
      "areas": [
        "API",
        "Scores",
        "MCP",
        "Site"
      ],
      "items": [
        "`POST /v1/recommend`: tools ranked for a task, with every score input, the price per success and the pass rule.",
        "Weekly scores from our own benchmarks plus live results (formula at `GET /v1/formula`), published under CC BY 4.0 with no key: `GET /v1/tools`, `GET /v1/scores`, `GET /v1/task-types`.",
        "`/llms.txt`, `/llms-full.txt`, `/openapi.json` and `/.well-known/mcp.json` for agents; a Markdown and JSON copy of every page.",
        "Rate limits reported in `RateLimit-*` headers; a 429 carries `Retry-After`."
      ]
    },
    {
      "date": "2026-09-28",
      "id": "2026-09-28-accounts",
      "title": "Accounts, orgs and agent keys",
      "areas": [
        "API",
        "Dashboard"
      ],
      "items": [
        "Sign in with an email link or Google, verify a phone, make an org and invite your team (owners and members).",
        "Agents with their own `sk_test_…` and `sk_live_…` keys (rotate or revoke any time). Test keys call deterministic mock providers for free.",
        "One error envelope everywhere, `{ error: { code, message, doc_url, retryable } }`, with every code on `/docs/errors`."
      ]
    }
  ]
}