Docs Sellers

Conformance and badge

LiveUpdated

View as Markdown

Sellers. Written for merchants that receive agent orders.

Nobody issued an “agent-ready” badge for merchants before. Enruta’s suite runs the checkout lifecycle, protocol behavior, idempotency, mandate enforcement, the merchant signature and the receipt against your endpoint, and a fully green run earns a badge signed by Enruta that anyone can verify.

The suite

GroupTestsPasses when
DiscoveryProfile, signing keys, capabilities, REST service (4)/.well-known/ucp answers a profile with ucp.version, at least one ES256 key, the checkout capability and a REST transport
LifecycleCreate, get, update, complete, get order (5)A checkout is created, read, updated (address and fulfillment), completed with the mock handler’s success_token, and the order is fetched
ProtocolEnvelope, version negotiation, error shape (3)Responses carry the profile’s ucp.version; an unsupported version is refused with an error envelope; an unknown id returns the specified error shape
IdempotencyReplay, conflict (2)The same Idempotency-Key replays the same response; the same key with a different body is refused (409 idempotency_conflict)
MandateAP2 negotiated, mandate required (2)With a platform profile that declares AP2, the checkout carries the AP2 mandate capability, and complete without ap2.checkout_mandate answers mandate_required; skipped without --platform-profile
SignatureMerchant authorization (1)ap2.merchant_authorization verifies with the profile’s keys
ReceiptPayment reference, receipt signature (2)The order carries payment_reference and, when the store signs, a signature that verifies

Results are { name, ok, detail }[]; tests that do not apply to your endpoint are skipped, not failed. The runner is the pure runConformance(endpoint, { domain }) in @enruta/sdk, with CONFORMANCE_TESTS exported, so the local command and the hosted run are the same code.

Run it

npx @enruta/cli validate https://shop.example --domain shop.example --platform-profile https://agent.example/profile

# enruta validate https://shop.example  (shop.example)  UCP 2026-08-25
result  vector                            detail
ok      discovery.profile
ok      discovery.keys
ok      discovery.capabilities
ok      discovery.services
ok      lifecycle.create                  chk_…
ok      lifecycle.get
ok      lifecycle.update
ok      lifecycle.complete                ord_…
ok      lifecycle.order
ok      protocol.envelope
ok      protocol.version
ok      protocol.error_shape
ok      idempotency.replay
ok      idempotency.conflict              409 idempotency_conflict
ok      mandate.negotiated
ok      mandate.required                  mandate_required
ok      signature.merchant_authorization  key_merchant_shop_2026-09
ok      receipt.payment_reference
ok      receipt.signature
# PASS: 19 of 19 passed in 2140 ms

--json prints the results array; the exit code is 1 on any failure. The local run does not issue a badge.

The badge

A compact JWS signed with the Enruta seal key: { iss: "https://enruta.ai", sub: <domain>, endpoint, passed, total, run_id, iat, exp: +90 days, typ: "enruta-conformance+jwt" }. It is public, cached for an hour, and expires after ninety days so a badge always reflects a recent run.

GET https://app.enruta.ai/badges/reamandrule.com.json
{ "domain": "reamandrule.com", "passed": 19, "total": 19, "badge": "eyJ…", "verified_at": "2026-09-13T12:00:00Z", "verify_url": "https://app.enruta.ai/.well-known/enruta-keys.json" }

<img src="https://app.enruta.ai/badges/reamandrule.com.svg" alt="Enruta · agent-ready">

The SVG reads “Enruta · agent-ready · 19/19” in the brand colors. The reference merchant shows it in its storefront footer, linked to the JSON.

Why it is free

The badge and the suite are part of the Accept tier, free permanently, like the verifier: the value of a record that both sides can verify grows with the number of merchants that can accept a mandate reference, and a conformance check is the cheapest way to make a merchant agent-ready. The vectors will be published with the schema and the verifier so that other tools can run the same suite.