Skip to content

List valid call disposition values (system + this org's custom)

GET
/workflows/dispositions

Return every disposition value accepted by disposition_filters on the new_call_disposition trigger - system values AND the caller org’s own custom dispositions.

Each entry carries origin: system for the built-in vocabulary, custom for an org-defined one (whose value is the stored custom_{id} key, never the display name). category keeps its existing meaning: sdr_selectable a rep can pick it, system_set only the dialer backend writes it.

Authority for the system half is voice’s SDR_SELECTABLE_DISPOSITIONS (voice/graph8_livekit/schemas/dispositions.py) plus the two system-set values the dialer also emits (sdr_hangup, failed). That half is inlined here and a parity test (developer_api/tests/test_workflow_dispositions.py) fails the build if voice adds a value that is not mirrored - the previous “mirror the change here” comment was not enforced and silently went stale when busy was added.

The custom half comes from voice’s GET /api/dialer/dispositions/{org_id}, with the org pinned server-side from the authenticated caller and echoed in the X-Org-Id header voice’s tenant gate requires. Nothing about the request body or query can influence which org is read.

Degraded mode: if voice is unreachable or errors, this returns the system vocabulary alone with source='static_fallback' and logs a warning, rather than failing the whole call. An agent that sees source='static_fallback' should say it could not confirm custom dispositions instead of asserting none exist.

Legacy aliases (positive/neutral/negative) are deliberately absent: normalize_disposition rewrites them before storage, so a filter on them could never match.

Authorizations

Parameters

Header Parameters

X-Target-Org-Id
Any of:
string

Responses

200

Successful Response

object
key
additional properties
any

422

Validation Error

object
detail
Array<object>
object
loc
required
Array
msg
required
string
type
required
string