Skip to main content
POST

Authorizations

X-API-Key
string
header
required

Authenticate every request by passing your API key in the X-API-Key header. Keys are scoped to your organization hierarchy.

Headers

Idempotency-Key
string

Optional idempotency key: a unique string of 16-200 printable ASCII characters (a UUID is recommended). Retrying the write with the same key within 24 hours returns the stored response of the first call with an X-Idempotent-Replayed: true response header instead of executing it again. Reusing a key with a different request body returns 422 (IDEMPOTENCY_MISMATCH); a duplicate sent while the first call is still running returns 409 with a Retry-After header. Keys are scoped per endpoint and organization.

Required string length: 16 - 200

Body

application/json

Unknown body properties are rejected with a 400 (strict validation).

organization_id
string
required
name
string
required
protocol
enum<string>
required
Available options:
sms,
mms
message_text
string
required
type
enum<string>

Project type. Optional for broadcast (the default).

Available options:
broadcast
channel
enum<string>
default:10dlc

Messaging channel. Defaults to 10dlc.

Available options:
10dlc,
toll-free
brand_id
string

Required when channel=10dlc; omit when channel=toll-free.

campaign_id
string

Required when channel=10dlc; omit when channel=toll-free.

toll_free_verification_id
string

Required when channel=toll-free; omit when channel=10dlc. Must match the verification behind the chosen phone_number_ids.

phone_number_ids
string[]

Sending phone number IDs (1-49). At least one of phone_number_ids or phone_number_id is required. New conversations are spread randomly across the numbers; each recipient is then pinned to one number.

Required array length: 1 - 49 elements
phone_number_id
string
deprecated

Deprecated. Use phone_number_ids. A single id is accepted and treated as a one-element phone_number_ids. Provide one of phone_number_ids or phone_number_id.

contact_list_ids
string[]

Optional. Omit to create the project as a draft with no audience; attach lists later via PATCH /projects/{id}. When present, must contain at least one list id.

Minimum array length: 1
suppression_list_ids
string[]
media_ids
string[]

Where tracking links redirect. May embed the selected link parameter anywhere via a placeholder named after it, e.g. 'https://test.com?utm_content=xyzd_{linkid}' redirects as '...utm_content=xyzd_ABC123' (URL-encoded value, empty when the contact has none; the parameter is then not appended separately). A placeholder that does not match link_tracking_param_field is rejected with a 400 (INVALID_LINK_PLACEHOLDER). Without a placeholder the parameter is appended as its own query pair.

Contact field carried on tracking-link redirects. Use 'phone', a contact custom-field name, or omit for no param (default). By default the field's name becomes an appended query-param key with the contact's value; a matching {field} placeholder in link_tracking_destination_url embeds the value there instead.

Maximum string length: 64

Whether the 'STOP=END' opt-out footer is appended to every outbound message. Defaults to true. Broadcast projects only; surveys never carry the footer.

Response

Project created. Status reflects completeness (awaiting_test when ready to test).

success
boolean
required
data
object
required