Skip to main content

Call Disposition Tags

A disposition tag is a label you stamp on a call: lead, vip, escalated, follow-up. Unlike a queue’s wrap-up code, which records a single outcome from a catalog defined per queue, disposition tags are a tenant-wide, many-per-call labeling system you curate from the dashboard. Use them to slice voice analytics and build segments across queues and campaigns. This page covers the tenant-level tag catalog and stamping. If you are looking for the per-queue wrap-up catalog that gates busy → available (set requireDisposition on the queue; those codes come from queue configuration, not this editor), see Wrap-up codes. Base path: /api/v1/voice Authentication: Clerk session (Authorization: Bearer <token>) or API key (X-API-Key). Scope: voice read to list the catalog and read a call’s stamps, voice write to stamp a call. Catalog create, update, and delete are restricted to owners and admins.

The tenant-level catalog, and how it differs from wrap-up codes

Orbit keeps two separate disposition axes. They sound alike and are easy to conflate: Each tag row has:
  • slug: the lowercase identifier you post back (for example lead, vip, escalated, follow-up). Unlike a wrap-up code, the slug is mutable: stamps reference the catalog row by id, so renaming a tag rewrites history cleanly instead of orphaning past stamps.
  • label: the human-readable text the picker and chips show.
  • color: optional hex value for the chip swatch.
  • sortOrder: picker display order.
  • isActive: retiring a tag is a soft-delete. Historical stamps keep resolving the label, the slug is freed for reuse, and you can reactivate the row later.
A slug must be unique among the tenant’s active tags. Creating or renaming into a duplicate returns 409 DISPOSITION_TAG_ALREADY_EXISTS.

Curate the catalog in the dashboard

Open Voice → Disposition Tags. Owners and admins can:
  1. Create a tag with a slug, label, and colour.
  2. Rename a tag (slug or label). Past stamps follow the rename because they reference the row, not the slug.
  3. Recolour the chip swatch, or reorder the picker.
  4. Retire a tag. This is a soft-delete: stamps keep the label and the slug becomes available again. Reactivate from the same editor with the inactive-rows view.
Agents stamp from the catalog but do not curate it.

Stamp and read tags on a call

On a call’s detail page, the disposition-tag panel shows the tags already applied as coloured chips and offers the remaining active catalog for stamping. Applying is additive: re-stamping the same tag on the same call is idempotent (a retry refreshes who stamped it and when instead of duplicating the row), and there is no un-stamp operation (catalog retirement, not deletion from a call, is how a label leaves circulation). Typical starter catalog: lead, vip, escalated, follow-up, plus your own product or campaign labels (for example product-bug-login).

REST equivalent

Stamp a call by slug, or by catalog id; you can mix both in one request — the sample section below posts a fully annotated body. The catalog and stamping endpoints are documented with full worked samples under Catalog and stamp samples. A slug or id that does not resolve to an active catalog row returns 404 DISPOSITION_TAG_NOT_FOUND with the missing values listed. The stamp records the principal who posted it, so audit and analytics attribute the label correctly. queueId is optional context for where the stamp originated.

Catalog REST endpoints

For automation, such as syncing a taxonomy from another system or bulk-curating tags: Create body: slug, label, optional color (hex), optional sortOrder. Update accepts any subset of those fields plus isActive; a rename that lands on another active tag’s slug returns 409.

Catalog and stamp samples

The samples below exercise the full catalog → stamp → read → error loop. SDK paths are relative to /api/v1; where the SDK has no typed helper for a route yet, the samples use the request escape hatch.

Create a catalog tag

POST /api/v1/voice/disposition-tags adds a tag to the tenant catalog. Owners and admins only. The request below sets the slug (what you post back), a label, and an optional colour and picker position.

Stamp a call

POST /api/v1/voice/calls/{callId}/disposition-tags applies one or more catalog tags to a call. Mix tagSlugs and tagIds in one body; queueId records optional queue context for where the stamp originated. A re-post of the same tags is idempotent — the API responds with the current stamps instead of duplicating rows.

Read a call’s stamps

GET /api/v1/voice/calls/{callId}/disposition-tags returns each stamped tag joined to the catalog, so chips render label and colour even for a tag retired since the stamp.

Unresolved slug or id

If a tagSlugs entry or a tagIds entry does not resolve to an active catalog row, the stamp returns 404 DISPOSITION_TAG_NOT_FOUND and lists the values that failed to resolve — missingSlugs or missingIds respectively.

Audit and analytics posture

Every catalog change and every stamp lands in the audit log with the actor (voice.disposition_tag.created/updated/deleted, voice.call_tag.stamped), so QA can answer “who labeled this call and when.” Tags exist purely in Orbit’s data plane. Stamping a tag never touches SIP signalling; it changes no call routing, no billing, and no provider interaction. Tags stamp analytics: use them to filter and segment voice reporting (for example, compare handle time for vip-stamped calls against the fleet), alongside the outcome axis that wrap-up codes record. For the recovery runbook when a stamp 404s (DISPOSITION_TAG_NOT_FOUND) or the queue-side wrap-up gate refuses (DISPOSITION_REQUIRED, NOT_IN_WRAPUP), see Disposition and wrap-up errors.