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 `. 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