Update an A/B variant
Changes a variant’s weight, active flag, prompt or first message. At least one field must be defined.
Set isActive: false to stop a variant from being picked without losing its counters; set it back to
true to resume. Counters are never reset by an update — create a new variant to measure a changed
prompt from zero.
Side effects. A changed prompt or first message is screened for fraud (LLM call). The new settings apply to the agent’s next campaign dials. Writes an audit entry.
Idempotency. Safe to retry: the same body sets the same values.
Webhook events. audit.log_recorded (when subscribed). See Webhooks.
Access
- Required scope:
write. - Rate limit: Agent mutations — 10 requests/min per workspace, shared with every agent write; the request also counts against the General API limit. See Rate limits.
- Plan: Every plan includes A/B testing. It requires an active subscription (
active,trialingorpast_due); without one every A/B test operation, reads included, is refused with403 BILLING_ERROR(metadata.kind: subscription_required).
Authentication
Workspace API key: jl_ followed by 64 lowercase hex characters, created by the workspace owner in the
dashboard (Settings → API Keys) and sent as Authorization: Bearer jl_.... The plaintext is shown once,
at creation; Jelliu stores only a SHA-256 hash. A workspace can hold up to 25 active keys.
Operations restricted to admins or owners reject keys without the full scope with 403, and say so in
their description. No key, whatever its scope, can mint or revoke API keys or rotate a webhook secret —
that requires a signed-in owner session. A revoked key stops authenticating within about 10 seconds.
See Authentication.
Path parameters
UUID of the agent that owns the variant. A value that is not a UUID answers 400 Invalid params.
UUID of the variant (id from GET /api/agents/{agentId}/ab-tests). A variant of another agent, another workspace or already deleted answers 404; a value that is not a UUID answers 400 Invalid params.
Request
New relative traffic weight, 0-100. Stored as an integer — send whole numbers; a fractional value fails the request.
false stops the variant from being picked for new calls; counters are kept.
New prompt, 10-8000 characters. Blank is treated as absent. Screened for fraud.
New opening line. Trimmed; blank is treated as absent (it cannot be cleared to null here).
Response
A prompt variant row (snake_case), with its raw performance counters.

