Telnyx Email Webhooks API
Per-domain webhook endpoints with event subscriptions
Per-domain webhook endpoints with event subscriptions
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/telnyx:telnyx-email-webhooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: 2.0.0
x-latency-category: responsive
x-endpoint-cost: light
title: Telnyx Email Webhooks API
description: SIP trunking, SMS, MMS, Call Control and Telephony Data Services.
contact:
email: support@telnyx.com
servers:
- url: https://api.telnyx.com/v2
description: Version 2.0.0 of the Telnyx API
security:
- bearerAuth: []
tags:
- name: Email Webhooks
description: Per-domain webhook endpoints with event subscriptions
paths:
/email_domains/{domain_id}/webhooks:
get:
tags:
- Email Webhooks
summary: List webhooks for an email domain
operationId: listEmailDomainWebhooks
parameters:
- $ref: '#/components/parameters/EmailDomainDomainId'
- $ref: '#/components/parameters/email_PageNumber'
- $ref: '#/components/parameters/DomainsPageSize'
- name: sort
in: query
description: Field to sort by. Prefix with `-` for descending order.
required: false
schema:
type: string
enum:
- created_at
- -created_at
responses:
'200':
description: A paginated list of email webhooks
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWebhookListResponse'
'404':
$ref: '#/components/responses/email_NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
description: Returns a paginated list of webhook subscriptions scoped to the email domain. Results can be sorted by creation time.
post:
tags:
- Email Webhooks
summary: Create a webhook for an email domain
description: Creates a webhook endpoint subscribed to a specific allowlist of event types. Both `email.*` events (published by email-api) and `email_domain.*` events (published by this service) flow through the same webhooks.
operationId: createEmailDomainWebhook
parameters:
- $ref: '#/components/parameters/EmailDomainDomainId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateEmailWebhookRequest'
example:
url: https://example.com/webhooks/email
events:
- email.sent
- email.delivered
- email.bounced
responses:
'201':
description: Email webhook created
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWebhookResponse'
'404':
$ref: '#/components/responses/email_NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/InternalServerError'
/email_domains/{domain_id}/webhooks/{id}:
delete:
tags:
- Email Webhooks
summary: Delete a webhook
operationId: deleteEmailDomainWebhook
parameters:
- $ref: '#/components/parameters/EmailDomainDomainId'
- $ref: '#/components/parameters/WebhookId'
responses:
'200':
description: Email webhook deleted
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWebhookResponse'
'404':
$ref: '#/components/responses/email_NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
description: Deletes the webhook subscription identified by ID within the specified email domain and returns the deleted subscription.
get:
tags:
- Email Webhooks
summary: Retrieve a webhook
operationId: getEmailDomainWebhook
parameters:
- $ref: '#/components/parameters/EmailDomainDomainId'
- $ref: '#/components/parameters/WebhookId'
responses:
'200':
description: Email webhook details
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWebhookResponse'
'404':
$ref: '#/components/responses/email_NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
description: Returns the webhook subscription identified by ID within the specified email domain.
patch:
tags:
- Email Webhooks
summary: Update a webhook
description: Update a webhook's URL and/or event subscription. A webhook is bound to its domain — `domain_id` is not mutable.
operationId: updateEmailDomainWebhook
parameters:
- $ref: '#/components/parameters/EmailDomainDomainId'
- $ref: '#/components/parameters/WebhookId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateEmailWebhookRequest'
example:
events:
- email.sent
- email.delivered
- email.opened
responses:
'200':
description: Email webhook updated
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWebhookResponse'
'404':
$ref: '#/components/responses/email_NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
OffsetPaginationMeta:
type: object
required:
- page_number
- page_size
- total_pages
- total_results
properties:
page_number:
type: integer
minimum: 1
page_size:
type: integer
minimum: 1
total_pages:
type: integer
minimum: 0
total_results:
type: integer
minimum: 0
EmailWebhookEvent:
type: string
description: Event types accepted by domain webhook subscriptions. Allowlists match the legacy event_type, not canonical_event_type. Of the 22 accepted types, email.sending is stored but intentionally not published. Cancellation, daily-limit failures, and system failures publish after commit when a matching domain webhook is configured.
enum:
- email.scheduled
- email.sandbox
- email.queued
- email.sending
- email.sent
- email.delivered
- email.deferred
- email.bounced
- email.failed
- email.complained
- email.opened
- email.clicked
- email.unsubscribed
- email.received
- email.cancelled
- email.daily_limit_exceeded
- email_domain.created
- email_domain.verified
- email_domain.degraded
- email_domain.suspended
- email_domain.deleted
- email_domain.dkim_rotated
UpdateEmailWebhookRequest:
type: object
properties:
url:
type: string
format: uri
events:
type: array
minItems: 1
items:
$ref: '#/components/schemas/EmailWebhookEvent'
EmailWebhookResponse:
type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/EmailWebhook'
DomainsErrorResponse:
type: object
required:
- errors
properties:
errors:
type: array
items:
$ref: '#/components/schemas/email_Error'
EmailWebhookListResponse:
type: object
required:
- data
- meta
properties:
data:
type: array
items:
$ref: '#/components/schemas/EmailWebhook'
meta:
$ref: '#/components/schemas/OffsetPaginationMeta'
email_Error:
type: object
required:
- code
- title
- detail
properties:
code:
type: string
enum:
- '10001'
- '10015'
- '500'
- '10007'
- '10008'
- '10020'
- '40901'
title:
type: string
detail:
type: string
source:
type: object
properties:
pointer:
type: string
EmailWebhook:
type: object
required:
- id
- record_type
- url
- events
- domain_id
- created_at
- updated_at
properties:
id:
type: string
format: uuid
record_type:
type: string
enum:
- email_webhook
url:
type: string
format: uri
description: HTTPS endpoint to deliver subscribed events to.
events:
type: array
minItems: 1
items:
$ref: '#/components/schemas/EmailWebhookEvent'
description: 'Allowlist of event types delivered to this webhook. At least one event is required — there is no default-to-all.
'
domain_id:
type: string
format: uuid
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
example:
id: 123e4567-e89b-12d3-a456-426614174003
record_type: email_webhook
url: https://example.com/webhooks/email
events:
- email.sent
- email.delivered
- email.bounced
domain_id: 123e4567-e89b-12d3-a456-426614174000
created_at: '2026-06-18T12:00:00Z'
updated_at: '2026-06-18T12:00:00Z'
CreateEmailWebhookRequest:
type: object
required:
- url
- events
properties:
url:
type: string
format: uri
description: HTTPS endpoint to deliver subscribed events to.
events:
type: array
minItems: 1
items:
$ref: '#/components/schemas/EmailWebhookEvent'
description: At least one event type is required.
parameters:
WebhookId:
name: id
in: path
required: true
description: Email webhook UUID
schema:
type: string
format: uuid
email_PageNumber:
name: page[number]
in: query
required: false
description: Page number to return (offset pagination)
schema:
type: integer
minimum: 1
default: 1
EmailDomainDomainId:
name: domain_id
in: path
required: true
description: Email domain UUID
schema:
type: string
format: uuid
DomainsPageSize:
name: page[size]
in: query
required: false
description: Number of records per page
schema:
type: integer
minimum: 1
maximum: 100
default: 25
responses:
ValidationFailed:
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/DomainsErrorResponse'
example:
errors:
- code: '10015'
title: Validation Failed
detail: domain is invalid
source:
pointer: /data/attributes/domain
InternalServerError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/DomainsErrorResponse'
example:
errors:
- code: '500'
title: Internal Server Error
detail: An unexpected error occurred
email_NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/DomainsErrorResponse'
example:
errors:
- code: '10001'
title: Not Found
detail: The requested email domain was not found
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: API key
description: 'Telnyx API key supplied as `Authorization: Bearer <token>`. In production, auth may be validated by the API gateway and forwarded via Telnyx auth headers.'
Payment:
type: apiKey
in: header
name: Authorization
description: 'Machine Payment Protocol credential used on paid retries, sent as `Authorization: Payment ...`. Obtained by paying a challenge returned in the `WWW-Authenticate` header of a 402 response. This is not a Telnyx API key; initial challenge requests use standard bearer authentication instead.'
agent-memory_bearerAuth:
type: http
scheme: bearer
description: Telnyx API key
bearerAuth:
type: http
scheme: bearer
branded-calling_bearerAuth:
type: http
scheme: bearer
description: Telnyx API key. Generate one at https://portal.telnyx.com/#/app/api-keys.
collections_bearerAuth:
type: http
scheme: bearer
description: Telnyx API key. Collections and results are automatically scoped to the authenticated user's organization.
number-reputation_bearerAuth:
type: http
scheme: bearer
description: Telnyx API key. Generate one at https://portal.telnyx.com/#/app/api-keys.
oauthClientAuth:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://api.telnyx.com/v2/oauth/token
scopes:
admin: Administrative access to Telnyx resources
authorizationCode:
authorizationUrl: https://api.telnyx.com/v2/oauth/authorize
tokenUrl: https://api.telnyx.com/v2/oauth/token
refreshUrl: https://api.telnyx.com/v2/oauth/token
scopes:
admin: Administrative access to Telnyx resources
description: OAuth 2.0 authentication for Telnyx API and MCP integrations
outbound-voice-profiles_bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
pronunciation-dicts_bearerAuth:
type: http
scheme: bearer
description: Telnyx API v2 key. Obtain from https://portal.telnyx.com
rcs-registration_bearerAuth:
type: http
scheme: bearer
bearerFormat: API key
stored-payment-transactions_bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
transcriptions-search_bearerAuth:
type: http
scheme: bearer
description: Telnyx API key. Results are automatically scoped to the authenticated user's organization.
web-search_bearerAuth:
type: http
scheme: bearer
description: Telnyx API key
x-service-info:
categories:
- communication
- developer-tools
docs:
apiReference: https://developers.telnyx.com
homepage: https://telnyx.com
llms: https://telnyx.com/llms.txt