Skip to content

Create Session Draft

POST
/dialer/sessions/draft

CONTACTS NOBODY. Creates a DRAFT session and dials no one.

The safe first step: it resolves the list or sequence, snapshots the filter, and stops. POST /dialer/sessions/{id}/next-batch is what turns a draft into ringing telephones.

Not idempotent in the way it looks: voice REUSES a live session for the same list rather than creating a second one, so calling this twice does not double-dial - it returns the existing session. from_phone is optional here and enforced at dial time.

Authorizations

Parameters

Header Parameters

X-Target-Org-Id
Any of:
string

Request Body required

Mirrors CreateBeQueueSessionRequest minus org_id.

Either list_id or sequence_id is required - voice 400s with neither, and that is left to voice rather than duplicated here so the two cannot disagree about which combinations are legal.

object
agent_id
Any of:
string
campaign_builder_campaign_id
Any of:
string
campaign_id
Any of:
string
dialing_mode
Any of:
string
Allowed values: power parallel
entity_type
Any of:
string
filter_spec
Any of:

Which contacts in the list are eligible to be dialed.

Narrowing this on a RUNNING session changes who gets called next. It is not a display filter.

object
exclude_dispositions
Array<string>
predicates
Array<object>

One clause of a queue filter. conditions nests for AND/OR groups.

conditions is typed as a list of plain objects rather than as a list of FilterPredicate, ON PURPOSE. Voice’s own model IS recursive, and this one was too, which made it the only self-referencing schema in the published contract - and the developer-docs renderer recurses on a self-referencing schema with no depth limit until Node runs out of memory (verify-help-docs and User help coverage and rendering both died with exit 134 on every head that carried it). The wire format is unchanged: each entry has this same shape (field, op, value, values, conditions) and is forwarded to voice as-is, which validates it against its recursive model. The parity test compares field NAMES, so it still pins this model to voice’s.

object
conditions
Any of:
Array<object>
object
key
additional properties
any
field
required
string
op
required
string
value
Any of:
values
Any of:
Array
search
Any of:
string
from_phone
Any of:
string
list_id
Any of:
string
list_title
Any of:
string
name
Any of:
string
order_spec
Any of:

The order the queue is worked in, and which phone field is tried first.

object
mode
string
default: natural_skip_dialed
Allowed values: natural_skip_dialed dialed_first
phone_priority
Array<string>
sort_model
Array<object>
object
key
additional properties
string
parallel_count
integer
default: 1
selected_event_type_id
Any of:
integer
sequence_id
Any of:
string
sequence_step_order
Any of:
integer
user_email
Any of:
string
user_id
required
string
user_timezone
Any of:
string

Responses

201

Successful Response

object
data
required

An open envelope for one dialer result.

Open because voice owns the shape of a session, a call stub and a queue stat, and it grows them without a contract bump here. A dropped field would otherwise turn an added upstream field into a removed public one.

object
key
additional properties
any
pagination
Any of:
object
has_next
required

Whether there are more pages

boolean
limit
required

Items per page

integer
next_cursor
Any of:
string
page
required

Current page number (1-indexed)

integer
total
required

Total number of items

integer

422

Validation Error

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