# Changelog

What changed, when.

Status: Live · Updated: 2026-09-14
Source: https://enruta.ai/docs/changelog

## September 14, 2026: identity and intent, platforms, three roles

Trust as two separate checks, the money split of every payment, the platforms API, and the merchant side on the merchant’s own PSP.

- **Evidence Record `enruta/0.3`.** Optional `request.intent` (words, slots, coverage, questions and answers), `decision.judgement` (rules and model), `decision.result: clarify`, `agent.identity` (assurance `A0` to `A3` and its anchors), both present on every new payment record, a top-level `payee.identity` and `economics_ref`; the linked kind `recurrence`; the relations `recurrence_for` and `occurrence_of`; identity evidence and the model’s input and output in the bundle. `enruta-verify` 0.3.0 checks them, with new vectors; records sealed earlier keep their schema ([schema](https://enruta.ai/docs/schema)).
- **Trust model.** Identity and intent are checked separately ([trust model](https://enruta.ai/docs/trust-model)): questions for missing details with `POST /v0/payment-requests/{id}/clarifications`, rules and an optional model on the person’s words ([intent and clarification](https://enruta.ai/docs/intent-and-clarification)), six identity anchors from an agent key to on-chain collateral with `POST /v0/attestations` and `GET /v0/agents/{id}/identity` ([identity anchors](https://enruta.ai/docs/identity-anchors)), and the merchant check before paying, `GET /v0/merchants/identity`. Policies gain `intent`, `identity_requirements` and `payee_identity`; nine reason codes and six checks are added.
- **Money split.** `GET /v0/payment-requests/{id}/economics` and `GET /v0/sellers/orders/{id}/economics`: who pays, receives and earns on one payment, every line marked actual, estimate or plan, with its source and date ([money split](https://enruta.ai/docs/economics)).
- **Recurrence** is live: `POST /v0/recurrences`, pause, resume and end, each occurrence decided like a payment and chained to the recurrence ([recurrence](https://enruta.ai/docs/recurrence)).
- **Rails.** Adapters for Mercury, Ramp, Bill.com (read-only evidence and single-bill approval), Stripe Shared Payment Tokens, Link, x402 and MPP. Each runs with your own account, or for x402 your own signer ([rails](https://enruta.ai/docs/rails)).
- **Rail hand-off.** When a rail cannot issue a credential for a payment the policy allowed or a person approved, the request moves to `handed_off` with the rail, its reason, its message and the next step; nothing is paid, the budget reservation is released, the record seals at once and `payment_request.handed_off` is sent. A rail that fails while issuing hands off with `rail_unavailable` (5xx, 408, 425 or 429, a timeout, no connection) or `rail_error`, and such a payment can be requested again without counting as a duplicate ([rails](https://enruta.ai/docs/rails)).
- **Mandate terms.** `retry_policy` bounds retries: at most `max_attempts` attempts at one payment within `window_seconds`, the first included, and `retry_limit_reached` beyond them. `visibility_scope` keeps chosen constraints out of the mandate the merchant receives, committed to by `hidden_constraints_digest`, with their values in the bundle and the digest checked by the verifier. Every decision and every `enruta/0.3` payment record carries `retryable` and `retry_after`. A consent revocation can take effect later and, with `cascades_scheduled`, end the agent’s recurrences, unused mandates and pending approvals. A decision or an approval that fails inside Enruta is rolled back rather than left half done ([decision](https://enruta.ai/docs/decision#retrying), [mandate](https://enruta.ai/docs/mandate#retry-policy-and-what-the-merchant-sees), [consent record](https://enruta.ai/docs/consent-and-kya#revoking-a-consent)).
- **Paying HTTP resources.** `POST /v0/payment-requests/{id}/pay-resource` pays an x402 or MPP resource with the request’s mandate and returns the resource’s status, safe headers, body and receipt: MCP `pay_http_resource`, CLI `enruta pay-resource`, `paymentRequests.payResource` in TypeScript and `payment_requests.pay_resource` in Python ([API](https://enruta.ai/docs/api)).
- **Sellers.** [Storefront](https://enruta.ai/docs/storefront) is live at shop.enruta.ai: hosted UCP endpoints and an ACP shim, paid by mandate or on your own PSP account. [PSP connections](https://enruta.ai/docs/psp-connections) for Stripe, Adyen, Checkout.com, Braintree, PayPal and Worldpay write the agent labels, turn PSP refunds into reversals and list disputes. [Dispute delivery](https://enruta.ai/docs/dispute-delivery) sends packets into Stripe, Shopify, Adyen, Klarna, Chargeflow and Justt.
- **Accept middleware.** Web Bot Auth signatures are verified, not only parsed, against draft-ietf-webbotauth-httpsig-protocol-00 with the key from the agent origin’s own directory: `agent.web_bot_auth` on the inspection, the `X-Enruta-Agent-Verified` and `X-Enruta-Signature-Agent` labels, the `web_bot_auth_verified` risk signal and the `requireVerifiedBotSignature` option. The Visa Trusted Agent Protocol is supported, waiting on Visa’s published agent keys. UCP agent-profile signatures (`UCP-Agent: profile=…`, the scheme of Shopify’s Signed traffic tier) are verified too, with the key the profile publishes: `agent.ucp_signature`, the `X-Enruta-Agent-Profile` label and the `ucp_signature_verified` risk signal, and `requireVerifiedBotSignature` accepts either scheme ([Accept middleware](https://enruta.ai/docs/accept-middleware)).
- **Platforms.** Platform keys and the `Enruta-Account` header ([platform accounts](https://enruta.ai/docs/platform-accounts), [embedded calls](https://enruta.ai/docs/embedded-calls)), usage per account, the [white-label verifier](https://enruta.ai/docs/white-label-verifier) and its web component, [dispute field feeds](https://enruta.ai/docs/dispute-field-feeds) in Enruta, Chargeflow, Justt and Visa CE3.0 shapes, and [PSP metadata](https://enruta.ai/docs/psp-metadata) for nine PSPs and orchestrators.
- **Controls.** Approval delegation within a scope, approval requests in Slack, single sign-on for Enterprise, organization verification, and OpenTimestamps anchoring of the daily checkpoints ([signed policy](https://enruta.ai/docs/signed-policy)).
- **Webhooks.** `recurrence.created`, `recurrence.paused`, `recurrence.resumed`, `recurrence.ended` and `recurrence.occurrence_created`; `payment_request.handed_off` also reports a rail hand-off, with the rail, the reason, the message and the next step ([API](https://enruta.ai/docs/api)).
- **Tools.** MCP server 0.3.0 with fifteen tools, adding `answer_clarification`, `verify_merchant`, `get_economics`, `list_recurrences` and `pay_http_resource`, and a decision card that shows the questions, the assurance level, the merchant check and the money split; `@enruta/sdk` 0.3.0 and the Python SDK `enruta` 0.3.0; CLI 0.3.0 (`attest`, `merchant verify`, `economics`, `platform accounts`, `storefront`, `recurrence`); plugins for Cursor, Gemini CLI and OpenClaw ([SDKs](https://enruta.ai/docs/sdks), [MCP tools](https://enruta.ai/docs/mcp), [CLI](https://enruta.ai/docs/cli)).
- **Roles and docs.** The role views are Agents, Sellers and Platforms. The controls every user has (signed policy, shadow mode, weekly report, compliance export) form a Controls group on the Agents side, and `/docs/policy-of-record` now redirects to [Signed policy](https://enruta.ai/docs/signed-policy). The header lists Product, Agents, Sellers, Platforms, Docs and Pricing.
- **Pricing.** The Agents sheet adds Enterprise, from $24,000 a year, with approval seats, single sign-on, signed policies across rails, the weekly report, the audit export and 24-month retention. Three price sheets and three units: the mandate, the agent order and the record. Never a percentage of the money.

## September 13, 2026: the two-sided release

Both sides of an agent payment, and everything that follows it, in one release.

- **Evidence Record `enruta/0.2`.** Optional fields on payment records (`kind`, `chain`, `principal.login_id`, the three intent layers, `decision.risk`, `decision.shadow_result`, the mandate’s `mode`, `refill_policy`, `finality_class`, `deviation`, `policy` and `ledger`, `deviations`, `catalog_snapshot_hash`, `policy_snapshot_hash`, `failure_class`) and a second shape for linked records. `enruta-verify` 0.2.0 verifies both, with new vectors.
- **Six supporting objects**, each a sealed linked record: [reversal](https://enruta.ai/docs/reversal) (`POST /v0/reversals`, `request_reversal`, the mandate account and budget refill, the four merchant-side adjustment renderings), [dispute packet](https://enruta.ai/docs/dispute-packet) with the representment PDF and six exports, [settlement record](https://enruta.ai/docs/settlement), [reconciliation line and weekly report](https://enruta.ai/docs/reconciliation) signed by passkey or link, [consent record and KYA attestation](https://enruta.ai/docs/consent-and-kya), and the [risk assessment](https://enruta.ai/docs/risk-assessment) made with every decision.
- **Decisions.** `observe` for policies in [shadow mode](https://enruta.ai/docs/shadow-mode); reason codes `consent_revoked`, `agent_paused`, `finality_irreversible_cap`, `deviation_over_tolerance`, `over_original_amount`, `stage_not_reversible`, `rail_irreversible`, `past_cancellable_until`. Policies gain `mode`, `refill_policy`, `deviation`, `finality_rules`, `retry_policy`, `shadow`, `require_consent`, `reversal`; the console shows the [autonomy level](https://enruta.ai/docs/autonomy-levels) of every policy.
- **Agent pause.** An owner pauses an agent in one click, or a developer key calls `POST /v0/agents/{id}/pause`; the pause is a sealed record.
- **Self-serve sandbox.** `POST /v0/sandbox/keys` issues a sandbox organization, agent key and developer key without a person; `enruta sandbox keys` does the same.
- **Sellers.** `@enruta/accept` 0.1.0, the [edge middleware](https://enruta.ai/docs/accept-middleware) for Cloudflare Workers, Vercel Edge, Fastly Compute, Hono and Node; seller keys and the `/v0/sellers/…` API; [adjustments](https://enruta.ai/docs/adjustments) and merchant-initiated reversals; fulfillment confirmation; the seller-side dispute packet; the [conformance suite](https://enruta.ai/docs/conformance) with `enruta validate` and the public badge; seller pages in the console.
- **Tools.** MCP server 0.2.0 with `request_reversal`, `get_settlement`, `get_reconciliation`, `list_disputes` and the reversal card; SDK 0.2.0; CLI 0.2.0 (`reversals`, `disputes`, `reconciliation`, `settlements`, `consents`, `agents`, `validate`, `sandbox keys`, `--schema`); Claude Code plugin 0.2.0 with the refund, shadow-mode and prompt-injection sections in the skill.
- **Exports.** `POST /v0/exports` filters by person, period and kind and includes consents and linked records ([compliance export](https://enruta.ai/docs/compliance-export)).
- **Docs.** Role pages for [agents](https://enruta.ai/agents), [sellers](https://enruta.ai/sellers) and [platforms](https://enruta.ai/platform); nineteen new docs pages under Objects, Sellers, Guides and what is now the Controls group; a role view (`?role=`), a status badge and an updated date on every page; `/.well-known/skills/index.json`, `/agent-guide.md`, `/.well-known/api-catalog`; `llms.txt` and `llms-full.txt` generated from the docs; a Markdown twin of every page at `/docs/<page>.md`.
- **Pricing.** The ship-date labels on the Accept middleware and the dispute packet are gone; both are live.

## September 8 to 10, 2026

- Documentation published: concepts, Evidence Record schema v0, verifier behavior, API and MCP reference; `llms.txt`, `llms-full.txt`, Copy page as Markdown.
- Evidence Record schema `enruta/0`: sixteen core fields and the six-field B2B addendum.
- `enruta-verify` 0.1.0: the single-file verifier and the JSON Schema, with published test vectors (a valid chain, a tampered record, a back-dated record, a chain gap) time-stamped by public RFC 3161 authorities.
- Published on npm: `enruta-verify`, `@enruta/mcp` (the stdio MCP server) and `@enruta/cli`; the Claude Code plugin at github.com/enruta-ai/claude-plugin.
- Console, API and remote MCP live at app.enruta.ai, api.enruta.ai and mcp.enruta.ai; the reference merchant at reamandrule.com; OAuth 2.1 for hosted connectors; Stripe Issuing as the production default rail.
- Approvals carry a `state` (`approved`, `declined`, `expired`); `decision.checks` lists each check with its result; mandates carry `currency`, `payee` and the bound request hash.
- Hand-off for merchants that complete checkout only on their own page: `POST /v0/payment-requests/{id}/handoff` and the `hand_off_checkout` tool, request state `handed_off`, mandate state `void`, webhook `payment_request.handed_off`. `POST /v0/policies` signs a policy with a developer key. `complete_checkout: true` lets Enruta execute a UCP checkout itself.
