For the complete documentation index, see llms.txt. This page is also available as Markdown.

Operators

Human-in-the-loop call monitoring, takeover, escalation management, and operator analytics.

Operators are human agents who can monitor, join, and take over live voice calls. The operator system provides escalation management, live call monitoring, call transcripts, and operator-action audit records built on the platform's world model.

API integration required. The Developer Console's operator pages, takeover controls, and Runs Live tab are retired. This page documents retained operator-scoped endpoints (/operators/{operator_id}/...). The Runs API addresses controls by channel-neutral run_id. Both paths act on supported underlying sessions; confirm runtime support and operator access before implementing your own intervention interface. A route in the public schema does not establish support on every voice provider.

Operator Lifecycle

  • Listen mode: the operator monitors the call silently. The AI agent continues handling the conversation. The operator is muted at the telephony level.

  • Takeover mode: the AI agent's audio output is muted (speaker suppressed) and the operator speaks directly with the caller. Agent speech and turn processing are suspended while the operator drives. When the operator leaves or switches back to listen, the agent can resume without re-initializing the session; control and telephony propagation can add delay.

Mode switching: toggling between listen and takeover requests changes to the telephony mute state and agent speaker mute without recreating the underlying session. The change takes effect after the relevant control and telephony updates propagate. Operator transcripts during takeover can be captured as human_segment turns through a dedicated per-participant STT stream.

Connection Methods

Voice operators join by phone. The platform dials the phone number in the operator profile and adds the answered leg to the existing conference. Your integration provides controls and displays available transcripts; the phone carries audio. Browser WebRTC operator joining and its access-token routes have been removed.

Request listen mode explicitly when the operator should monitor silently before taking over. Check the join operation's default in its embedded contract below, and implement a confirmation step before requesting takeover. The API does not supply a user-interface confirmation flow.

Joining is idempotent for the same operator and call. A different operator attempting to join an already occupied call receives a conflict response.

Three-Party Speaker Resolution

When an operator is on the call, three participants produce audio simultaneously. Speaker attribution uses a priority chain:

Recorded turns can carry speaker_id and speaker_role to support transcript attribution in three-party conversations. Clients should still tolerate missing or ambiguous speaker metadata when a stream or persistence step is incomplete.

Escalations

An escalation hands a call to a human. There are two paths:

Path
How It Happens

Operator join

An integration requests operator join in listen or takeover mode. Joining a call that has no open escalation creates one with trigger operator.

Agent call forwarding

The agent's context graph reaches a forwarding action (forward_call) and transfers the caller to a human phone number - for example when the caller asks for a person or the flow requires human judgment. See call forwarding.

Escalation Lifecycle

Dual-entity event writes: supported escalation events are written to the call entity and operator entity when both writes succeed, enabling independent state recomputation for each. The call entity tracks escalation history; the operator entity tracks availability and performance.

Event chain: successful escalation events can supersede the previous event (escalation.requested → escalation.connected → escalation.handback → escalation.completed), forming a versioned event history.

Event
Written When
Key Data

escalation.requested

Escalation created

escalation_id, trigger, trigger source, reason

escalation.connected

Operator joins and takes over

Operator entity ID, connection type, response time

escalation.handback

Operator returns to listen mode

Agent resumes

escalation.completed

Call ends or operator explicitly completes

handle_time_seconds, outcome

Operator Flow

Operator Guidance

Operators in listen mode can send text guidance to the agent without taking over the call:

Send text guidance to agent during call

post

Inject operator guidance into an active call. The agent incorporates it into its next response.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body
call_sidstring · min: 1 · max: 64Required
messagestring · min: 1 · max: 5000Required
Responses
200

Successful Response

application/json
statusstring · enumRequired

Delivery status

Possible values:
call_sidstringRequired

Call SID the guidance was sent to

post/v1/{workspace_id}/operators/{operator_id}/send-guidance
POST /v1/{workspace_id}/operators/{operator_id}/send-guidance HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 36

{
  "call_sid": "text",
  "message": "text"
}
{
  "status": "delivered",
  "call_sid": "text"
}

The guidance is injected into the active session as a guidance event type. When delivery succeeds, the session can interrupt current agent speech and incorporate the guidance into its next response. Delivery does not guarantee exact response timing or that the model will follow the instruction verbatim. This is distinct from operator takeover: the operator does not speak directly to the caller.

Permission: requires Operator:Update on the operator entity. The operator must belong to the same workspace as the call.

How it works: the platform delivers the guidance to the active voice session as an injected event (see session event injection). The operator's identity is recorded in the call transcript as the event sender.

Delivery status: the response includes a status field. "delivered" confirms the session received the guidance; "failed" indicates the guidance could not be delivered. The "queued_no_subscriber" semantics (call ended or session not yet listening) apply only to the session event-injection endpoint documented in session event injection.

Dashboard & Analytics

These are API views for an integration, not current Developer Console pages.

View
Description

Dashboard

Composite view: operator status counts, active escalation count, daily escalation stats, recent escalations

Active Escalations

Paginated queue of active escalations with trigger and call context

Escalation Stats

Aggregation by period (day, week, month) and dimension (status, trigger, operator)

Performance

Operator rankings by response time, resolution rate, and average handle time

Call Transcript

Human-segment events for a specific operator's call participation

Audit Log

The supported lifecycle actions below emit world model events when their event writes succeed, providing an operator-action audit record:

Action
Event Written
Entities Updated

Join call

operator.joined_call

Call + Operator (status → busy)

Switch to takeover

operator.mode_changed

Call (audit)

Switch to listen

operator.mode_changed

Call (audit)

Leave call

operator.left_call

Call + Operator (status → online)

Complete escalation

escalation.completed

Call + Operator (handle time recorded)

Dual-entity writes: supported escalation events are written to both entities when both writes succeed, enabling entity-scoped queries for a call or operator without a cross-entity join. This design does not establish an API latency or computational-complexity guarantee.

Entity Types

Operator Entity

Projected state from operator events:

Field
Description

status

Current availability (online, busy, offline)

profile

Name, contact info

total_escalations_handled

Lifetime count of escalations handled

avg_handle_time_seconds

Average escalation duration

last_call_at

Timestamp of the operator's last completed escalation call

last_status_change

Timestamp of the last availability transition

Call Entity (Escalation Fields)

The call entity's projected state includes escalation-specific fields:

Field
Description

escalation.status

Current escalation state (none, requested, connected, handback, completed)

escalation

Escalation detail: trigger, trigger source, requested/connected/completed timestamps, wait and handle time

human_segments

Operator speech transcripts captured during takeover

audit

Operator action audit summary (event count, latest event)

Operator API

Get the Operator Dashboard

Operator dashboard overview

get

Live dashboard with operator status counts, active escalation queue, and today's escalation statistics.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
workspace_idstring · uuidRequired
active_escalationsintegerRequired
get/v1/{workspace_id}/operators/dashboard
GET /v1/{workspace_id}/operators/dashboard HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200

Successful Response

{
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "operators": {
    "total": 1,
    "online": 1,
    "busy": 1,
    "offline": 1
  },
  "active_escalations": 1,
  "escalations_today": {
    "requested": 0,
    "connected": 0,
    "completed": 0,
    "avg_wait_seconds": 1,
    "avg_handle_time_seconds": 1
  },
  "recent_escalations": [
    {
      "call_entity_id": "123e4567-e89b-12d3-a456-426614174000",
      "call_sid": "text",
      "escalation_id": "text",
      "status": "text",
      "trigger": "text",
      "trigger_source": "text",
      "concept": "text",
      "operator_type": "clinical",
      "regulatory_basis": "text",
      "immediate": true,
      "risk_score": 1,
      "requested_at": "text",
      "connected_at": "text",
      "wait_seconds": 1,
      "operator_entity_id": "123e4567-e89b-12d3-a456-426614174000",
      "caller_id": "text",
      "direction": "inbound",
      "phone_number": "text",
      "started_at": "text"
    }
  ]
}

Get Operator Performance

Operator performance summary

get

Aggregate performance across all operators with per-operator breakdown.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
workspace_idstring · uuidRequired
total_operatorsintegerRequired
onlineintegerRequired
busyintegerRequired
offlineintegerRequired
total_escalations_handledintegerRequired
avg_handle_time_secondsnumberRequired
get/v1/{workspace_id}/operators/performance
GET /v1/{workspace_id}/operators/performance HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200

Successful Response

{
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "total_operators": 1,
  "online": 1,
  "busy": 1,
  "offline": 1,
  "total_escalations_handled": 1,
  "avg_handle_time_seconds": 1,
  "operators": [
    {
      "operator_id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "status": "online",
      "total_escalations_handled": 1,
      "avg_handle_time_seconds": 1,
      "last_call_at": "text"
    }
  ]
}

List Active Escalations

List active escalations

get

List calls with active escalations (status: requested or connected).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Query parameters
limitinteger · max: 200OptionalDefault: 50
continuation_tokenanyOptional
Responses
200

Successful Response

application/json
has_morebooleanRequired
continuation_tokenanyOptional
get/v1/{workspace_id}/operators/escalations/active
GET /v1/{workspace_id}/operators/escalations/active HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "items": [
    {
      "call_entity_id": "123e4567-e89b-12d3-a456-426614174000",
      "call_sid": "text",
      "escalation_id": "text",
      "status": "text",
      "trigger": "text",
      "trigger_source": "text",
      "concept": "text",
      "operator_type": "clinical",
      "regulatory_basis": "text",
      "immediate": true,
      "risk_score": 1,
      "requested_at": "text",
      "connected_at": "text",
      "wait_seconds": 1,
      "operator_entity_id": "123e4567-e89b-12d3-a456-426614174000",
      "caller_id": "text",
      "direction": "inbound",
      "phone_number": "text",
      "started_at": "text"
    }
  ],
  "has_more": true,
  "continuation_token": null
}

Get Escalation Statistics

Escalation statistics

get

Aggregated escalation statistics over a time period.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Query parameters
periodstring · enumOptional

Time period: day, week, or month.

Default: dayPossible values:
group_bystring · enumOptional

Grouping dimension: status, trigger, or operator.

Default: statusPossible values:
Responses
200

Successful Response

application/json
workspace_idstring · uuidRequired
periodstringRequired
group_bystringRequired
totalintegerRequired
get/v1/{workspace_id}/operators/escalations/stats
GET /v1/{workspace_id}/operators/escalations/stats HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "period": "text",
  "group_by": "text",
  "buckets": [
    {
      "key": "text",
      "count": 1
    }
  ],
  "total": 1
}

List Escalation Events

List escalation events

get

List escalation lifecycle events for a workspace.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Query parameters
limitinteger · max: 200OptionalDefault: 50
continuation_tokenanyOptional
Responses
200

Successful Response

application/json
has_morebooleanRequired
continuation_tokenanyOptional
get/v1/{workspace_id}/operators/escalations
GET /v1/{workspace_id}/operators/escalations HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "items": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
      "event_type": "text",
      "data": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "source": "text",
      "confidence": 1,
      "ingested_at": "2026-01-01T00:00:00.000Z",
      "created_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "has_more": true,
  "continuation_token": null
}

Query the Operator Audit Log

Query audit log

get

Query audit events (operator actions) for a workspace.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Query parameters
limitinteger · max: 200OptionalDefault: 50
continuation_tokenanyOptional
operator_idstring · uuid · nullableOptional

Filter by operator entity UUID.

actionstring · enum · nullableOptional

Filter by exact operator audit event type.

Possible values:
Responses
200

Successful Response

application/json
has_morebooleanRequired
continuation_tokenanyOptional
get/v1/{workspace_id}/operators/audit-log
GET /v1/{workspace_id}/operators/audit-log HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "items": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
      "event_type": "text",
      "data": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "source": "text",
      "ingested_at": "2026-01-01T00:00:00.000Z",
      "created_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "has_more": true,
  "continuation_token": null
}

Get an Operator Call Transcript

Get call transcript

get

Per-speaker transcript segments from operator takeover sessions.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
call_sidstringRequired
Responses
200

Successful Response

application/json
call_entity_idstring · uuidRequired
call_sidstring · nullableRequired
total_segmentsintegerRequired
get/v1/{workspace_id}/operators/calls/{call_sid}/transcript
GET /v1/{workspace_id}/operators/calls/{call_sid}/transcript HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "call_entity_id": "123e4567-e89b-12d3-a456-426614174000",
  "call_sid": "text",
  "total_segments": 1,
  "segments": [
    {
      "speaker_role": "text",
      "transcript": "text",
      "timestamp": "text",
      "escalation_id": "text",
      "confidence": 1
    }
  ]
}

Get the Operator Queue

Priority-ranked operator queue

get

Active calls ranked by operator priority: risk, wait time, emotion, loops, and safety concerns.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
workspace_idstring · uuidRequired
total_activeintegerRequired
get/v1/{workspace_id}/operators/queue
GET /v1/{workspace_id}/operators/queue HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "queue": [
    {
      "call_sid": "text",
      "caller_id": "",
      "caller_phone": "text",
      "service_id": "",
      "service_name": "text",
      "direction": "inbound",
      "data_quality_flags": [
        "text"
      ],
      "started_at": "2026-01-01T00:00:00.000Z",
      "priority_score": 1,
      "priority_reasons": [
        "high_risk"
      ],
      "wait_seconds": 0,
      "risk_score": 1,
      "risk_level": "low",
      "current_emotion": "text",
      "current_valence": 1,
      "current_state": "",
      "turn_count": 0,
      "escalation_active": false,
      "entity_name": "text",
      "brief_context": "text"
    }
  ],
  "total_active": 1
}

Generate an Operator Briefing

Generate operator briefing

post

Structured briefing for an operator about to join a call. Template-rendered from call intelligence and entity context.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body

Request for operator briefing on a specific call.

call_sidstring · min: 1 · max: 64Required
Responses
200

Successful Response

application/json

Structured operator briefing for a call.

call_sidstringRequired
operator_idstring · uuidRequired
generated_atstring · date-timeRequired
post/v1/{workspace_id}/operators/{operator_id}/briefing
POST /v1/{workspace_id}/operators/{operator_id}/briefing HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 19

{
  "call_sid": "text"
}
{
  "call_sid": "text",
  "operator_id": "123e4567-e89b-12d3-a456-426614174000",
  "sections": [
    {
      "title": "text",
      "content": "text"
    }
  ],
  "generated_at": "2026-01-01T00:00:00.000Z"
}

Join a Call

Join active call as operator

post

Add operator to an active call's Twilio Conference.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body

Request to join an active call as operator.

call_sidstring · min: 1 · max: 64Required
modestring · enumOptionalDefault: takeoverPossible values:
Responses
200

Successful Response

application/json

Confirmation of operator joining a call's conference.

participant_call_sidstringRequired

Twilio participant call SID

conference_sidstringRequired

Twilio conference SID

modestring · enumRequired

Operator mode: listen or takeover

Possible values:
operator_entity_idstring · uuidRequired

World entity ID of the operator

post/v1/{workspace_id}/operators/{operator_id}/join-call
POST /v1/{workspace_id}/operators/{operator_id}/join-call HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 37

{
  "call_sid": "text",
  "mode": "takeover"
}
{
  "participant_call_sid": "text",
  "conference_sid": "text",
  "mode": "listen",
  "operator_entity_id": "123e4567-e89b-12d3-a456-426614174000"
}

Leave a Call

Remove operator from active call

post

Remove operator from an active call's Twilio Conference.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body

Request to remove operator from an active call.

call_sidstring · min: 1 · max: 64Required
Responses
200

Successful Response

application/json
successbooleanRequired
post/v1/{workspace_id}/operators/{operator_id}/leave-call
POST /v1/{workspace_id}/operators/{operator_id}/leave-call HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 19

{
  "call_sid": "text"
}
{
  "success": true
}

Switch Operator Mode

Toggle operator listen/takeover mode

post

Switch between listen mode and takeover mode.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body

Request to toggle operator mode on an active call.

call_sidstring · min: 1 · max: 64Required
participant_call_sidstring · max: 64OptionalDefault: ""
modestring · enumRequiredPossible values:
Responses
200

Successful Response

application/json
modestring · enumRequired

New operator mode

Possible values:
post/v1/{workspace_id}/operators/{operator_id}/switch-mode
POST /v1/{workspace_id}/operators/{operator_id}/switch-mode HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 61

{
  "call_sid": "text",
  "participant_call_sid": "",
  "mode": "listen"
}
{
  "mode": "listen"
}

Record Operator Wrap-Up

Record operator intervention wrap-up

post

Persist the outcome and notes from an operator's call intervention.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body

Request to record operator intervention wrap-up.

call_sidstring · min: 1 · max: 64Required
outcomestring · enumRequiredPossible values:
notesstring · max: 2000OptionalDefault: ""
Responses
200

Successful Response

application/json
successbooleanRequired
post/v1/{workspace_id}/operators/{operator_id}/wrap-up
POST /v1/{workspace_id}/operators/{operator_id}/wrap-up HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 51

{
  "call_sid": "text",
  "outcome": "resolved",
  "notes": ""
}
{
  "success": true
}

Register an Operator

Register an operator

post

Create an operator entity with profile and initial offline status.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Body
namestring · min: 1 · max: 256Required
emailstring · emailRequired
typestring · enumOptionalDefault: clinicalPossible values:
skillsstring[] · max: 50Optional
connection_methodstring · enumOptionalDefault: phonePossible values:
phone_numberstring · min: 2 · max: 16 · nullableOptional
rolestring · enumOptionalDefault: operatorPossible values:
Responses
201

Successful Response

application/json
idstring · uuidRequired
workspace_idstring · uuidRequired
namestring · nullableOptional

Display name

emailstring · nullableOptional

Contact email

typestring · enum · nullableOptional

Operator specialization

Possible values:
skillsstring[]Required

Skill tags for routing

connection_methodstring · enumRequired

How the operator connects to calls

Possible values:
phone_numberstring · nullableOptional

E.164 phone number for phone-based operators

rolestring · enumRequired

Permission role

Possible values:
statusstring · enumRequired

Current availability

Possible values:
last_status_changestring · nullableOptional

ISO-8601 timestamp of last status transition

active_call_sidstring · nullableOptional

Call SID if currently on a call

total_escalations_handledintegerRequired

Lifetime escalation count

avg_handle_time_secondsnumberRequired

Average escalation handle time in seconds

last_call_atstring · nullableOptional

ISO-8601 timestamp of last call

created_atstring · date-time · nullableOptional

When the operator was created

updated_atstring · date-time · nullableOptional

When the operator was last updated

post/v1/{workspace_id}/operators
POST /v1/{workspace_id}/operators HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 144

{
  "name": "text",
  "email": "name@gmail.com",
  "type": "clinical",
  "skills": [
    "text"
  ],
  "connection_method": "phone",
  "phone_number": "text",
  "role": "operator"
}
{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "name": "text",
  "email": "text",
  "type": "clinical",
  "skills": [
    "text"
  ],
  "connection_method": "browser",
  "phone_number": "text",
  "role": "operator",
  "status": "online",
  "last_status_change": "text",
  "active_call_sid": "text",
  "total_escalations_handled": 1,
  "avg_handle_time_seconds": 1,
  "last_call_at": "text",
  "created_at": "2026-01-01T00:00:00.000Z",
  "updated_at": "2026-01-01T00:00:00.000Z"
}

List Operators

List operators

get

List all operator entities for a workspace.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Query parameters
limitinteger · max: 200OptionalDefault: 50
continuation_tokenanyOptional
Responses
200

Successful Response

application/json
has_morebooleanRequired
continuation_tokenanyOptional
get/v1/{workspace_id}/operators
GET /v1/{workspace_id}/operators HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "items": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "email": "text",
      "type": "clinical",
      "skills": [
        "text"
      ],
      "connection_method": "browser",
      "phone_number": "text",
      "role": "operator",
      "status": "online",
      "last_status_change": "text",
      "active_call_sid": "text",
      "total_escalations_handled": 1,
      "avg_handle_time_seconds": 1,
      "last_call_at": "text",
      "created_at": "2026-01-01T00:00:00.000Z",
      "updated_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "has_more": true,
  "continuation_token": null
}

Get an Operator

Get an operator

get

Get operator entity with computed state (profile, availability, performance).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Responses
200

Successful Response

application/json
idstring · uuidRequired
workspace_idstring · uuidRequired
namestring · nullableOptional

Display name

emailstring · nullableOptional

Contact email

typestring · enum · nullableOptional

Operator specialization

Possible values:
skillsstring[]Required

Skill tags for routing

connection_methodstring · enumRequired

How the operator connects to calls

Possible values:
phone_numberstring · nullableOptional

E.164 phone number for phone-based operators

rolestring · enumRequired

Permission role

Possible values:
statusstring · enumRequired

Current availability

Possible values:
last_status_changestring · nullableOptional

ISO-8601 timestamp of last status transition

active_call_sidstring · nullableOptional

Call SID if currently on a call

total_escalations_handledintegerRequired

Lifetime escalation count

avg_handle_time_secondsnumberRequired

Average escalation handle time in seconds

last_call_atstring · nullableOptional

ISO-8601 timestamp of last call

created_atstring · date-time · nullableOptional

When the operator was created

updated_atstring · date-time · nullableOptional

When the operator was last updated

get/v1/{workspace_id}/operators/{operator_id}
GET /v1/{workspace_id}/operators/{operator_id} HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "name": "text",
  "email": "text",
  "type": "clinical",
  "skills": [
    "text"
  ],
  "connection_method": "browser",
  "phone_number": "text",
  "role": "operator",
  "status": "online",
  "last_status_change": "text",
  "active_call_sid": "text",
  "total_escalations_handled": 1,
  "avg_handle_time_seconds": 1,
  "last_call_at": "text",
  "created_at": "2026-01-01T00:00:00.000Z",
  "updated_at": "2026-01-01T00:00:00.000Z"
}

Update an Operator

Update an operator

patch

Update operator profile fields or status. Each change writes a world event.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
operator_idstring · uuidRequired
Body
namestring · min: 1 · max: 256 · nullableOptional
emailstring · email · nullableOptional
typestring · enum · nullableOptionalPossible values:
skillsstring[] · max: 50 · nullableOptional
connection_methodstring · enum · nullableOptionalPossible values:
phone_numberstring · min: 2 · max: 16 · nullableOptional
rolestring · enum · nullableOptionalPossible values:
statusstring · enum · nullableOptionalPossible values:
Responses
200

Successful Response

application/json
idstring · uuidRequired
workspace_idstring · uuidRequired
namestring · nullableOptional

Display name

emailstring · nullableOptional

Contact email

typestring · enum · nullableOptional

Operator specialization

Possible values:
skillsstring[]Required

Skill tags for routing

connection_methodstring · enumRequired

How the operator connects to calls

Possible values:
phone_numberstring · nullableOptional

E.164 phone number for phone-based operators

rolestring · enumRequired

Permission role

Possible values:
statusstring · enumRequired

Current availability

Possible values:
last_status_changestring · nullableOptional

ISO-8601 timestamp of last status transition

active_call_sidstring · nullableOptional

Call SID if currently on a call

total_escalations_handledintegerRequired

Lifetime escalation count

avg_handle_time_secondsnumberRequired

Average escalation handle time in seconds

last_call_atstring · nullableOptional

ISO-8601 timestamp of last call

created_atstring · date-time · nullableOptional

When the operator was created

updated_atstring · date-time · nullableOptional

When the operator was last updated

patch/v1/{workspace_id}/operators/{operator_id}
PATCH /v1/{workspace_id}/operators/{operator_id} HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 164

{
  "name": "text",
  "email": "name@gmail.com",
  "type": "clinical",
  "skills": [
    "text"
  ],
  "connection_method": "browser",
  "phone_number": "text",
  "role": "operator",
  "status": "online"
}
{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
  "name": "text",
  "email": "text",
  "type": "clinical",
  "skills": [
    "text"
  ],
  "connection_method": "browser",
  "phone_number": "text",
  "role": "operator",
  "status": "online",
  "last_status_change": "text",
  "active_call_sid": "text",
  "total_escalations_handled": 1,
  "avg_handle_time_seconds": 1,
  "last_call_at": "text",
  "created_at": "2026-01-01T00:00:00.000Z",
  "updated_at": "2026-01-01T00:00:00.000Z"
}

Last updated

Was this helpful?