Channel Manager
Manage communication channels - voice, voicemail, and email - including domain verification, use case provisioning, and reputation management.
The Channel Manager handles provisioning and lifecycle management for all communication channels in a workspace. Each channel type has its own setup and use case flow.
Channels
The platform supports the following channels:
outbound_voice
Outbound phone calls
inbound_voice
Inbound phone calls
ringless_voicemail
Voicemail drops without ringing the recipient
email
Outbound and inbound email
Voice and voicemail channels are managed through Twilio Setups. Email is managed through SES Setups.
SES Setups
An SES Setup represents a verified sending and receiving domain. Each setup provisions a reputation isolation boundary and a domain identity. After creating a setup, the customer must publish DNS records at their DNS provider and then refresh verification status through the API.
Create SES Setup
POST /v1/ses-setup
Provisions the reputation isolation boundary and domain identity, returning the DNS records that must be published.
Request body:
tenant_name
string
Yes
Logical name for reputation and suppression isolation. 1-64 characters, alphanumeric with hyphens and underscores.
domain_identity
string
Yes
Domain to verify for sending and receiving (e.g. mail.customer.com). 1-255 characters.
Response (201):
id
string
Setup identifier
tenant_name
string
Tenant name
domain_identity
string
Verified domain
dns_checked_at
datetime or null
Last DNS verification check time. Null until first refresh.
dns_records
array
DNS records to publish (see below)
created_at
datetime
Creation timestamp
updated_at
datetime
Last update timestamp
Each DNS record in the dns_records array contains:
address
string
Fully-qualified DNS name for the record
record
string
Target value (includes priority prefix for MX records)
type
string
CNAME, MX, or TXT
verified
boolean
Whether this record has been verified
The response includes the following DNS records that must be published:
3 DKIM CNAME records for email authentication
1 MAIL FROM MX record for bounce handling
1 SPF TXT record for sender authorization
1 DMARC TXT record for domain alignment policy
1 inbound MX record for receiving email
Errors: 409 if the tenant name or domain already exists.
List SES Setups
GET /v1/ses-setup
Returns all SES setups with cached verification status. Does not trigger live DNS checks.
Response (200):
items
array
List of setups
Each item contains:
id
string
Setup identifier
tenant_name
string
Tenant name
domain_identity
string
Verified domain
dns_verified
boolean
Whether all DNS records are verified
dns_checked_at
datetime or null
Last DNS verification check time
created_at
datetime
Creation timestamp
updated_at
datetime
Last update timestamp
Get SES Setup
GET /v1/ses-setup/{setup_id}
Returns a single SES setup with a live DNS verification refresh. Checks DKIM, MAIL FROM, DMARC, and inbound MX status and updates the cached verification state.
Path parameters:
setup_id
UUID
Setup identifier
Response (200): Same shape as the POST response, with verified flags updated to reflect current DNS state.
Errors: 404 if the setup does not exist.
Delete SES Setup
DELETE /v1/ses-setup/{setup_id}
Deletes an SES setup and its associated domain identity and reputation boundary.
Path parameters:
setup_id
UUID
Setup identifier
Response: 204 No Content
Errors: 404 if the setup does not exist. 409 if email use cases still reference the setup - delete those first.
Use Cases
A use case binds a channel to a setup and defines how that channel is used. The request body for creating a use case is a discriminated union on the channel field.
Create Use Case
POST /v1/use-case
Twilio-served channels (outbound_voice, inbound_voice, ringless_voicemail)
Request body:
channel
string
Yes
One of outbound_voice, inbound_voice, ringless_voicemail
entity_name
string
Yes
Business entity name. 1-31 characters, letters/spaces/hyphens only.
name
string
Yes
Use case purpose. 1-31 characters, letters/spaces/hyphens only.
description
string
No
Free-text description, max 2000 characters.
twilio_setup_id
UUID
Yes
Twilio setup to bind to. Must have an approved customer profile.
Response (201):
id
string
Use case identifier
entity_name
string
Business entity name
name
string
Use case name
description
string or null
Description
channel
string
Channel value
twilio_setup_id
string
Bound Twilio setup identifier
created_at
datetime
Creation timestamp
updated_at
datetime
Last update timestamp
Email channel
Request body:
channel
string
Yes
"email"
entity_name
string
Yes
Business entity name. 1-31 characters, letters/spaces/hyphens only.
name
string
Yes
Use case purpose. 1-31 characters, letters/spaces/hyphens only.
description
string
No
Free-text description, max 2000 characters.
ses_setup_id
UUID
Yes
SES setup to bind to. DNS must be fully verified.
sender_email_address
string (email)
Yes
From address for outbound sends. Domain must match the setup's domain identity.
email_type
string
Yes
"transactional" or "marketing". Selects the reputation-isolated sending pool family. Immutable after creation.
Response (201):
id
string
Use case identifier
entity_name
string
Business entity name
name
string
Use case name
description
string or null
Description
channel
string
"email"
ses_setup_id
string
Bound SES setup identifier
configuration_set_name
string
Sending configuration set name, derived from entity_name and name
sender_email_address
string
From address
email_type
string
"transactional" or "marketing"
tier
string
Current reputation tier. New use cases start at "onboarding". Values: onboarding, standard, premium, suspended.
created_at
datetime
Creation timestamp
updated_at
datetime
Last update timestamp
Errors:
404 if the referenced setup does not exist
409 if the setup's DNS is not verified, if a use case with the same entity_name/name already exists, if the configuration set name is already in use, or if the sender address is already bound to another use case
422 if the sender email domain does not match the setup's domain identity (returns
sender_domain_mismatcherror withexpected_domain)
List Use Cases
GET /v1/use-case
Query parameters:
entity_name
string
Filter by business entity name
channel
string
Filter by channel
twilio_setup_id
UUID
Filter to use cases bound to this Twilio setup
ses_setup_id
UUID
Filter to use cases bound to this SES setup
All parameters are optional.
Response (200):
Returns an items array. Each item is either a Twilio use case response or an email use case response, discriminated by the channel field.
Delete Use Case
DELETE /v1/use-case/{use_case_id}
Deletes a use case and its channel binding.
For Twilio-served channels: refuses with 409 if phone numbers are still assigned. Unassign them first.
For email: tears down the associated sending configuration and reputation pool binding.
Response: 204 No Content
Errors: 404 if the use case does not exist. 409 if the use case has dependencies that must be removed first.
Email Reputation Tiers
Email use cases progress through reputation tiers based on sending performance:
onboarding
New use cases start here. Lowest daily send capacity.
standard
Promoted after a clean warmup period. Default steady-state tier.
premium
High-volume senders with strong reputation metrics. Highest capacity.
suspended
Reputation breach. Sending falls through to shared infrastructure while the incident is resolved.
Tier changes are managed automatically based on send volume, bounce rates, and complaint rates. The email_type field (transactional vs marketing) determines which pool family the use case sends through - transactional and marketing traffic never share sending infrastructure to prevent reputation cross-contamination.
Last updated
Was this helpful?

