# Agentic Commerce Testbench

> A simulated broadband / TV / mobile provider for testing personal AI agents. All data is synthetic.
> Policy profile: balanced. Every request is recorded as a trace.

Identify as an AI agent with the `X-Agent-Disclosure: ai-agent; principal=customer` header.
Account actions need a customer-delegated bearer token (OAuth 2.0 authorization code + PKCE).
Actions answered 428 need the customer's approval at the confirmation page, then a retry with the
`Confirmation-Token` header. Operator-issued test agents add `X-Agent-Key`.

Support tickets (`open_support_ticket`, `list_support_tickets`, `get_support_ticket`, `add_support_message`)
are answered by a scripted desk after a short delay, or by a human operator; poll `get_support_ticket` for
replies (author `desk-bot` or `human`).

The support chat never sees headers: disclose there by starting each message with
"[I'm an AI assistant acting for the account holder.]" (on `/support/chat`, ticking "I am an AI assistant" does this).

ACP (`/acp`, and its MCP binding when listed below): the `Authorization: Bearer` token is
the test agent's key (`tbk_...`), never a customer token. Every request needs
`API-Version: 2026-04-17`; every REST POST needs an `Idempotency-Key`.
Discovery: `/.well-known/acp.json`.

PAP identity: host your client metadata and JWKS at `https://ids.rotkohl.ai/agents/<agent_id>/identity`
(PUT, with your `X-Agent-Key`), then bind its `client_id`
`https://ids.rotkohl.ai/agents/<agent_id>/agent.json` to your test agent with `POST https://pap03.rotkohl.ai/agent/pap-clients`
(`X-Agent-Key`, body `{"client_ids": [...]}`). `GET /agent/whoami` names the agent your key belongs to.

The same testbench serving PAP draft 0.3: https://testbench-pap03-production.up.railway.app

## Surfaces

- [Capability API (REST)](https://pap03.rotkohl.ai/v1): every capability as an HTTP operation; see /openapi.json
- [OpenAPI 3.1 document](https://pap03.rotkohl.ai/openapi.json): the capability contract with x-agent-* policy
- [MCP (streamable HTTP)](https://pap03.rotkohl.ai/mcp): every capability plus composite journeys as MCP tools
- [rest adapter](https://pap03.rotkohl.ai/rest): `rest` - the baseline adapter: the L1 capability API's own HTTP form, as an agent reading /openapi.json uses it. [channel: api]
- [a2a adapter](https://pap03.rotkohl.ai/a2a): `a2a` - the Agent2Agent protocol, on the official a2a-sdk (1.x, protocol version 1.0; design D5, D8). [channel: api]
- [acp adapter](https://pap03.rotkohl.ai/acp): `acp` - Agentic Commerce Protocol 2026-04-17 over REST (upgrade-acp-2026-04-17; spec protocol-adapters.1/.2). [channel: api]
- [acp-mcp adapter](https://pap03.rotkohl.ai/acp-mcp): `acp-mcp` - Agentic Commerce Protocol 2026-04-17 over its MCP binding (upgrade-acp-2026-04-17; design D19). [channel: api]
- [chat adapter](https://pap03.rotkohl.ai/chat): `chat` - a personal agent typing into the provider's chat widget, served by a pattern-NLU stand-in (lossy). [channel: chat]
- [voice adapter](https://pap03.rotkohl.ai/voice): `voice` - the agent places a phone call into the provider's IVR / voice bot: chat plus a speech transform. [channel: voice]
- [Customer support chat page](https://pap03.rotkohl.ai/support/chat): plain HTML chat for browser-driving agents
- [ACP discovery](https://pap03.rotkohl.ai/.well-known/acp.json): Agentic Commerce Protocol 2026-04-17
- [PAP discovery (poppy.json)](https://pap03.rotkohl.ai/.well-known/poppy.json): Personal Agent Protocol draft 0.2 (39b35bd)
- [A2A Agent Card](https://pap03.rotkohl.ai/.well-known/agent-card.json): A2A discovery (404 until A2A is enabled)
- [OAuth server metadata](https://pap03.rotkohl.ai/.well-known/oauth-authorization-server): simulated sign-in (code + PKCE)
- [OAuth resource metadata](https://pap03.rotkohl.ai/.well-known/oauth-protected-resource): scopes account.read / account.write
- [Customer sign-in](https://pap03.rotkohl.ai/oauth/authorize): the customer signs in and grants your assistant access
- [Customer confirmation](https://pap03.rotkohl.ai/confirm/{confirmation_token}): the customer approves a 428 action
- [Health](https://pap03.rotkohl.ai/healthz): active policy profile and build version
