Syllable · AsyncAPI Specification
Syllable Outbound Webhooks
Version
View Spec
View on GitHub
CompanyArtificial IntelligenceAI AgentsVoiceConversational AIContact CenterHealthcareTelephonySMSCustomer ExperienceAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-05'
method: derived
source: openapi/syllable-sdk-openapi-original.yml
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
Syllable publishes no AsyncAPI document. Probes of /asyncapi.yaml and /asyncapi.json on
syllable.ai, docs.syllable.ai and api.syllable.cloud missed, and no event-catalog page
exists in the documentation. The event surface below is derived from the webhook schemas
declared in the provider's own OpenAPI, not fabricated.
summary: >-
The only event/callback surface Syllable exposes is per-outbound-campaign webhooks.
A campaign carries a webhooks[] array; each entry registers an HTTPS URL, an HTTP method,
a set of trigger statuses, and an optional HMAC secret. There is no account-wide event
bus, no webhook subscription resource of its own, and no session/agent lifecycle webhook —
webhooks fire only on outbound communication status transitions.
surface:
scope: outbound campaigns
configured_via: the webhooks[] field on an outbound campaign
input_schema: OutboundCampaignWebhookInput
response_schema: OutboundCampaignWebhookResponse
managing_operations_tag: outbound.campaigns
delivery:
transport: HTTPS
methods:
- POST
- PUT
- PATCH
url_field: url
url_requirement: HTTPS URL to which to send the webhook payload
trigger_field: trigger_statuses
trigger_semantics: >-
Condition expression evaluated when the trigger fires; the spec's own example is
"campaign_id == 1 && channel_manager_status == 'COMPLETED'".
security:
signing: HMAC
secret_field: auth_values.hmac_secret
secret_encoding: standard Base64 (RFC 4648)
secret_key_material: 32-512 bytes
read_back: >-
Responses return auth_value_keys (key names only); secret values are never echoed back.
update_semantics: >-
On update, leaving a key's value null keeps the stored value; omitting the key entirely
removes it.
events:
enum: ChannelManagerStatus
description: Status of an outbound communication request (voice, SMS, or email).
values:
- PENDING
- DUPLICATE
- INVALID
- UNEXPECTED_ERROR
- FILTERED_LINE_TYPE
- PROCESSED
- DROPPED
- DEFERRED
- BOUNCED
- DELIVERED
- OPENED
- CLICKED
- SPAM_REPORT
- UNSUBSCRIBED
- PRIOR_UNSUBSCRIBED
- PRIOR_SPAM_REPORT
- PRIOR_DROPPED
- PRIOR_BOUNCED
- SENT
- ACCEPTED
- QUEUED
- SENDING
- UNDELIVERED
- DELIVERY_UNKNOWN
- DELIVERY_FAILED
- IN-PROGRESS
- BUSY
- CANCELED
- COMPLETED
- DECLINED
- NO-ANSWER
- MACHINE
- HUMAN
- UNKNOWN
- FAILED
- SIP_NOT_FOUND
- SIP_TEMPORARILY_UNAVAILABLE
- SIP_LOOP_DETECTED
- SIP_DOES_NOT_EXIST_ANYWHERE
count: 39
polling_alternative:
operation_id: events_list
path: /api/v1/events/
method: GET
note: >-
For in-session events (tool calls and LLM prompts) there is no push surface at all —
the Events list endpoint is poll-only, keyed on session_id and conversation_id.