Get an experiment
Returns one experiment with its figures per version, its verdict, its bands and the daily cumulative series of the live chart. The verdict is on the conversion rate only (the main driver); the funnel, orders, revenue and order value are secondary drivers that explain a result and never decide it. Before the floor there is no verdict, and a result that is not conclusive gives the gap the test could confirm (`verdict.confirmableGapPer1000`), never a claim of no difference. Figures are attributed to the assistant (last touch), not incremental. Only conversations with a shopper message count, the starters shown before the first message are the champion's, recent conversations are credited with a delay of up to 24 hours, and tests running at the same time on the site may mix. `404` for an experiment that is not this agent's.
Authorization
ApiKeyAuth A WorkOS org-scoped API key, created from the dashboard's organization settings page. Identifies the tenant every read and write is scoped to. Missing, malformed, unknown, revoked, expired, or non-organization-owned keys all return 401 (no distinction, so the response can't be used to probe which keys or org ids exist).
In: header
Path Parameters
The site id (prefixed site_). A site id that isn't yours is a 404, same as any other cross-tenant id.
The agent id (prefixed agt_).
The experiment id (prefixed agxp_). An experiment of another agent, or another organization, is a 404.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/api/v1/sites/string/agents/string/experiments/string"{ "data": { "id": "agxp_01kvnwmagvf27rc9cze5rm9e1r", "agentId": "agt_01kvnwmagvf27rc9cze5rm9e1r", "status": "running", "state": "running", "endedReason": null, "startedAt": "2026-10-14T09:30:00.000Z", "endedAt": null, "floorPerVersion": 2400, "maxConversationsPerVersion": null, "detectionLimitPer1000": null, "metric": "conversion_rate", "alpha": 0.1, "championVersionId": "agtv_01kvnwmagvf27rc9cze5rm9e1r", "candidateVersionId": "agtv_01kvnwmagwf27rc9d7zef4qksf", "champion": { "versionId": "agtv_01kvnwmagvf27rc9cze5rm9e1r", "assignedConversations": 2610, "matureConversations": 2450, "mainDriver": { "id": "conversion_rate", "role": "main", "convertedConversations": 81, "matureConvertedConversations": 77, "rate": 0.031, "matureRate": 0.0314 }, "secondaryDrivers": [ { "id": "product_shown", "role": "secondary", "unit": "conversations", "value": 1618, "currency": null }, { "id": "product_clicked", "role": "secondary", "unit": "conversations", "value": 809, "currency": null }, { "id": "added_to_cart", "role": "secondary", "unit": "conversations", "value": 234, "currency": null }, { "id": "orders", "role": "secondary", "unit": "orders", "value": 84, "currency": null }, { "id": "attributed_revenue", "role": "secondary", "unit": "minor_units", "value": 672000, "currency": "EUR" }, { "id": "revenue_per_conversation", "role": "secondary", "unit": "minor_units", "value": 257, "currency": "EUR" }, { "id": "average_order_value", "role": "secondary", "unit": "minor_units", "value": 8000, "currency": "EUR" } ], "mixedCurrencies": false, "band": { "lower": 0.0205, "upper": 0.0425 }, "progress": 1 }, "candidate": { "versionId": "agtv_01kvnwmagwf27rc9d7zef4qksf", "assignedConversations": 2590, "matureConversations": 2430, "mainDriver": { "id": "conversion_rate", "role": "main", "convertedConversations": 96, "matureConvertedConversations": 90, "rate": 0.0371, "matureRate": 0.037 }, "secondaryDrivers": [ { "id": "product_shown", "role": "secondary", "unit": "conversations", "value": 1605, "currency": null }, { "id": "product_clicked", "role": "secondary", "unit": "conversations", "value": 802, "currency": null }, { "id": "added_to_cart", "role": "secondary", "unit": "conversations", "value": 233, "currency": null }, { "id": "orders", "role": "secondary", "unit": "orders", "value": 99, "currency": null }, { "id": "attributed_revenue", "role": "secondary", "unit": "minor_units", "value": 801000, "currency": "EUR" }, { "id": "revenue_per_conversation", "role": "secondary", "unit": "minor_units", "value": 309, "currency": "EUR" }, { "id": "average_order_value", "role": "secondary", "unit": "minor_units", "value": 8091, "currency": "EUR" } ], "mixedCurrencies": false, "band": { "lower": 0.0262, "upper": 0.0482 }, "progress": 1 }, "verdict": { "winner": null, "gapPer1000": 6, "confirmableGapPer1000": 22 }, "series": [ { "day": "2026-10-14", "champion": { "assignedConversations": 180, "convertedConversations": 4 }, "candidate": { "assignedConversations": 176, "convertedConversations": 6 } }, { "day": "2026-10-15", "champion": { "assignedConversations": 372, "convertedConversations": 9 }, "candidate": { "assignedConversations": 365, "convertedConversations": 12 } } ] }}Start an experiment
Starts an A/B test of the agent's live version (the champion) against another saved version of the same agent. Each conversation is assigned to one of the two at its first shopper message, 50/50, and keeps its version for its whole life. The floor of mature conversations per version is computed by the system and the split is fixed, so the body names the candidate and, optionally, a maximum per version. Both versions can no longer change once it starts. Refused with `agent_experiment_already_running` when one runs, and with `agent_experiment_refused` when it cannot start: its `reason` is `agent_not_testable`, `agent_not_answering` (only the agent that answers on its site can be tested), `no_champion`, `invalid_candidate`, `candidate_not_ready` (the candidate could not go live yet), `no_attribution_key` or `no_order_source` (the site cannot measure purchases). Records an audit entry (`agent.experiment_started`) attributed to the API key.
Stop an experiment
Stops the agent's running experiment: every new conversation is served the champion again, the conversations already assigned keep their version, and the figures stay readable with `GET /experiments/{experimentId}`. The champion stays live. `agent_experiment_not_running` when the experiment already ended. Records an audit entry (`agent.experiment_stopped`) attributed to the API key.