Variants
$alias.A Surface Variant is a named, switchable snapshot of an Agent Surface. Each variant holds a full independent copy of the surface configuration: Access Point settings, Managed Agent settings, Transit Points, policy, identity, networking, and payment. Variants are selected at request time by appending $alias to the surface route. Use variants to route test traffic through a staging configuration, offer partners a customised view of the same agent, or run A/B experiments without duplicating the base surface.
https://<GATEWAY_HOST>/<route>$<alias>/<optional-path>When no $alias is present, the gateway routes to the default variant. The base is the default unless a named variant has the Default toggle on.
Variant fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| Variant ID | string (UUID) | Auto-generated | — | Stable internal identifier. Auto-assigned on creation. Survives renames of alias and name. Never editable in the panel. |
| Name | string | Yes | — | Human-readable name shown in the dashboard and in the variants widget on the canvas. |
| Alias | string | Yes | — | URL-safe alias used in the route path. Must match ^[a-z0-9-]{1,32}$ (lowercase letters, digits, dashes; max 32 characters). Must be unique within the surface. |
| Description | string | No | "" | Free-text description. |
| Enabled | toggle | No | On | Whether this variant accepts traffic. A disabled variant returns HTTP 503, not 404, so callers can distinguish “intentionally off” from “does not exist”. The default variant cannot be disabled; promote another variant to default first. |
| Default | toggle | No | Off | When on, alias-less requests route to this variant instead of the base. One variant can be default at a time. |
Alias grammar
The alias must satisfy ^[a-z0-9-]{1,32}$:
- Lowercase ASCII letters, digits, and dashes.
- No underscores, dots, or uppercase.
- Between 1 and 32 characters.
- Must be unique across all variants on the same surface.
Validation is enforced server-side. Malformed aliases are rejected on create and update.
Lifecycle states
| Status | Request behaviour |
|---|---|
| Active | Variant is active and serves traffic. |
| Disabled | Variant exists but returns HTTP 503. Use this to temporarily pause a variant without deleting it. The default variant cannot be disabled. |
The base variant
The base row is always present in the Variants panel. It represents the unmodified surface with no variant overlay applied. The base:
- Has no alias and cannot be given one.
- Cannot be renamed or disabled.
- Is the implicit default when no named variant has the Default toggle on.
Requests with no $alias token route to whichever variant has the Default toggle on. If no named variant is set as default, requests route to the base.
Configuring a variant
Variant configuration is managed on the canvas, not inside the Variants panel. The panel only manages the variant list (name, alias, enabled/default status).
To configure what a variant does:
- Open the Variants panel and add the variant if it does not exist yet.
- Switch to the variant using the variants widget in the surface builder.
- Edit elements on the canvas: Access Point settings, Managed Agent settings, Transit Points, Policy, Networking, Payment, and Identity elements, exactly as you would for the base surface.
- Switch back to base or another variant to restore that state.
Each variant maintains its own independent canvas state. Surface-level identifiers and settings are always inherited from the base, so every variant shares the base surface’s Entry point URL. These settings stay the same across every variant:
- Listen address
- Surface prefix and custom path
- Protocol
- A2A supported versions and message validation
- Outbound listen address
Related
- Surface reference: Top-level surface fields including the Default Variant setting.
- Surfaces concept model: Conceptual explanation of variants and the audit trail model.
Glad to hear it. Thanks for letting us know.
Sorry to hear that. Thanks for letting us know.