Telnyx Email Validations API

Validate email addresses synchronously or in asynchronous batches.

Operations 3

POST /email_validations Validate a single email address #
POST /email_validations/batch Create a batch email validation job #
GET /email_validations/batch/{id} Get a batch email validation job #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/telnyx:telnyx-email-validations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

telnyx-email-validations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2.0.0
  x-latency-category: responsive
  x-endpoint-cost: light
  title: Telnyx Email Validations 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 Validations
  description: Validate email addresses synchronously or in asynchronous batches.
paths:
  /email_validations:
    post:
      tags:
      - Email Validations
      operationId: CreateEmailValidation
      summary: Validate a single email address
      description: Validates a single email address and returns deliverability checks.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEmailValidationRequest'
            example:
              email: user@example.com
      responses:
        '200':
          description: Email validation result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailValidationResponse'
          headers:
            Idempotent-Replayed:
              $ref: '#/components/headers/IdempotentReplayed'
        '400':
          description: Bad Request / Validation Failed (10015). Invalid, duplicate, empty, malformed, or overlong Idempotency-Key headers are rejected by Edge with HTTP 400 and error code 10015.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/email_ErrorResponse'
              example:
                errors:
                - code: '10015'
                  title: Bad Request
                  detail: email is required
        '401':
          $ref: '#/components/responses/email_UnauthorizedResponse'
        '409':
          $ref: '#/components/responses/IdempotencyConflictResponse'
        '413':
          $ref: '#/components/responses/PayloadTooLargeResponse'
        '422':
          description: The Idempotency-Key was already used for a different request (10027).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/email_ErrorResponse'
              example:
                errors:
                - code: '10027'
                  title: Unprocessable Entity
                  detail: The server understood the syntax of the request but was unable to process the instructions.
        '503':
          $ref: '#/components/responses/email_ServiceUnavailableResponse'
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
  /email_validations/batch:
    post:
      tags:
      - Email Validations
      operationId: CreateEmailValidationBatch
      summary: Create a batch email validation job
      description: Creates an asynchronous batch validation job for up to 1,000 email addresses.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEmailValidationBatchRequest'
            example:
              emails:
              - user@example.com
              - admin@example.org
              webhook_url: https://example.com/webhooks/email-validation
      responses:
        '202':
          description: Batch validation job accepted. Poll GET /email_validations/batch/{id} with the returned batch id to retrieve results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailValidationBatchResponse'
          headers:
            Idempotent-Replayed:
              $ref: '#/components/headers/IdempotentReplayed'
        '400':
          description: Missing or invalid email list, or batch size exceeded. Invalid, duplicate, empty, malformed, or overlong Idempotency-Key headers are rejected by Edge with HTTP 400 and error code 10015.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/email_ErrorResponse'
              examples:
                invalidEmails:
                  value:
                    errors:
                    - code: '10015'
                      title: Bad Request
                      detail: emails is required and must be an array
        '401':
          $ref: '#/components/responses/email_UnauthorizedResponse'
        '409':
          $ref: '#/components/responses/IdempotencyConflictResponse'
        '413':
          $ref: '#/components/responses/PayloadTooLargeResponse'
        '422':
          description: Changeset validation error (e.g. invalid webhook_url). Reusing an Idempotency-Key with a different request also returns 422 (10027).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/email_ErrorResponse'
              example:
                errors:
                - code: '10015'
                  title: Validation Failed
                  detail: webhook_url must be an HTTP or HTTPS URL
                  source:
                    pointer: /data/attributes/webhook_url
        '500':
          $ref: '#/components/responses/email_InternalServerErrorResponse'
        '503':
          $ref: '#/components/responses/email_ServiceUnavailableResponse'
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
  /email_validations/batch/{id}:
    get:
      tags:
      - Email Validations
      operationId: GetEmailValidationBatch
      summary: Get a batch email validation job
      description: Retrieves the current status and, once completed, validation results for a batch job.
      parameters:
      - $ref: '#/components/parameters/BatchId'
      responses:
        '200':
          description: Batch validation job status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailValidationBatchDetailResponse'
              example:
                data:
                  record_type: email_validation_batch
                  id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                  status: pending
                  total: 0
                  webhook_url: https://example.com
                  completed_at: '2024-01-23T18:10:02.574Z'
        '401':
          $ref: '#/components/responses/email_UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/email_NotFoundResponse'
components:
  responses:
    IdempotencyConflictResponse:
      description: A request with the same Idempotency-Key is still being processed (10036). Retry later with the same key and request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/email_ErrorResponse'
          example:
            errors:
            - code: '10036'
              title: Resource is being processed
              detail: A request with this Idempotency-Key is already being processed.
              source:
                pointer: /header/Idempotency-Key
    email_InternalServerErrorResponse:
      description: Internal server error (10019).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/email_ErrorResponse'
          example:
            errors:
            - code: '10019'
              title: Internal Server Error
              detail: Failed to create batch validation
    email_ServiceUnavailableResponse:
      description: Service unavailable (10016), including an unavailable upstream dependency or unavailable Edge idempotency protection for a keyed request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/email_ErrorResponse'
          example:
            errors:
            - code: '10016'
              title: Service Unavailable
              detail: The email domain service is temporarily unavailable. Please try again later.
    email_NotFoundResponse:
      description: Resource not found (10001).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/email_ErrorResponse'
          example:
            errors:
            - code: '10001'
              title: Not Found
              detail: The requested resource was not found
    email_UnauthorizedResponse:
      description: Not authorized (10006).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/email_ErrorResponse'
          example:
            errors:
            - code: '10006'
              title: Not authorized
              detail: Invalid API key
              meta:
                url: https://developers.telnyx.com/docs/overview/errors/10006
    PayloadTooLargeResponse:
      description: Request body exceeds the 8,000,000-byte limit for this endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/email_ErrorResponse'
          example:
            errors:
            - code: '10007'
              title: Unexpected error
              detail: An unexpected error occured.
  schemas:
    EmailValidationChecks:
      type: object
      properties:
        syntax:
          $ref: '#/components/schemas/EmailValidationCheck'
        mx:
          $ref: '#/components/schemas/EmailValidationCheck'
        disposable:
          $ref: '#/components/schemas/EmailValidationCheck'
        role_based:
          $ref: '#/components/schemas/EmailValidationCheck'
        typo:
          $ref: '#/components/schemas/EmailValidationTypoCheck'
      required:
      - syntax
      - mx
      - disposable
      - role_based
      - typo
    EmailValidationBatchDetailResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/EmailValidationBatchDetail'
      required:
      - data
    ErrorObject:
      type: object
      properties:
        code:
          type: string
          description: Telnyx error code. Send admission errors include account daily quota 10011 and sender-domain ramp code domain_graduation_limit_exceeded. Edge idempotency errors use 10027 or 10036. Fallback 404/500 responses from the framework may use string status codes ('404', '500') instead.
          enum:
          - '10001'
          - '10006'
          - '10007'
          - '10011'
          - '10015'
          - '10016'
          - '10019'
          - domain_graduation_limit_exceeded
          - recipient_suppressed
          - reputation_suspended
          - '404'
          - '500'
          - '10027'
          - '10036'
        title:
          type: string
        detail:
          description: Human-readable error detail. Changeset responses may return a structured object.
          oneOf:
          - type: string
          - type: object
            additionalProperties: true
        source:
          type: object
          additionalProperties: true
          nullable: true
        meta:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata. Present on 401 errors with a documentation URL.
      required:
      - code
      - title
      - detail
    EmailValidationBatchResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/EmailValidationBatch'
      required:
      - data
    EmailValidation:
      type: object
      properties:
        record_type:
          type: string
          enum:
          - email_validation
        email:
          type: string
        valid:
          type: boolean
        risk_score:
          type: number
          format: float
          minimum: 0
        did_you_mean:
          type: string
          description: Suggested correction for typo. Omitted when nil.
        checks:
          $ref: '#/components/schemas/EmailValidationChecks'
      required:
      - record_type
      - email
      - valid
      - risk_score
      - checks
    email_ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorObject'
        suppressed:
          type: array
          description: Present when every recipient is suppressed, so the request is rejected and no message is created.
          items:
            $ref: '#/components/schemas/SuppressedRecipient'
      required:
      - errors
    EmailValidationTypoCheck:
      allOf:
      - $ref: '#/components/schemas/EmailValidationCheck'
      - type: object
        properties:
          suggestion:
            type: string
            description: Suggested correction for common typos. Omitted when nil.
    EmailValidationBatchDetail:
      description: Shape returned by the GET endpoint. Does not include duplicates_removed.
      allOf:
      - type: object
        properties:
          record_type:
            type: string
            enum:
            - email_validation_batch
          id:
            type: string
            format: uuid
          status:
            $ref: '#/components/schemas/EmailValidationBatchStatus'
          total:
            type: integer
            minimum: 0
          webhook_url:
            type: string
            format: uri
          completed_at:
            type: string
            format: date-time
          results:
            type: object
            description: Map keyed by original email address. Present only when the batch is completed.
            additionalProperties:
              $ref: '#/components/schemas/EmailValidationResult'
        required:
        - record_type
        - id
        - status
        - total
    SuppressedRecipient:
      type: object
      properties:
        to:
          type: string
          format: email
          description: Suppressed recipient email address.
        reason:
          type: string
          description: Suppression reason returned by the recipient suppression service.
        scope:
          type: string
          description: Scope at which the suppression applies.
        override_allowed:
          type: boolean
          description: Whether an authorized send may override this suppression.
      required:
      - to
      - reason
      - scope
      - override_allowed
    EmailValidationBatch:
      type: object
      description: Shape returned by the create endpoint. Includes duplicates_removed.
      properties:
        record_type:
          type: string
          enum:
          - email_validation_batch
        id:
          type: string
          format: uuid
        status:
          $ref: '#/components/schemas/EmailValidationBatchStatus'
        total:
          type: integer
          minimum: 0
        duplicates_removed:
          type: integer
          minimum: 0
        webhook_url:
          type: string
          format: uri
      required:
      - record_type
      - id
      - status
      - total
      - duplicates_removed
    CreateEmailValidationRequest:
      type: object
      properties:
        email:
          type: string
          description: Email address to validate. Any non-empty string is accepted; invalid syntax returns valid=false rather than a request error.
      required:
      - email
    EmailValidationCheck:
      type: object
      properties:
        pass:
          type: boolean
        details:
          type: string
          description: Human-readable check detail. Omitted when nil.
      required:
      - pass
    EmailValidationBatchStatus:
      type: string
      enum:
      - pending
      - processing
      - completed
      - failed
    EmailValidationResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/EmailValidation'
      required:
      - data
    EmailValidationResult:
      type: object
      properties:
        email:
          type: string
        valid:
          type: boolean
        risk_score:
          type: number
          format: float
          minimum: 0
        did_you_mean:
          type: string
          description: Suggested correction for typo. Omitted when nil.
        checks:
          $ref: '#/components/schemas/EmailValidationChecks'
      required:
      - email
      - valid
      - risk_score
      - checks
    CreateEmailValidationBatchRequest:
      type: object
      properties:
        emails:
          type: array
          minItems: 1
          maxItems: 1000
          items:
            type: string
            description: Email address to validate. Any string is accepted; validation results indicate whether the address is valid. Blank strings are discarded and counted in duplicates_removed; if all entries are blank, returns 400.
        webhook_url:
          type: string
          format: uri
          maxLength: 2048
          pattern: ^https?://
          description: URL for batch completion webhook. Empty string is treated as omitted. SSRF-protected; private/reserved IPs and internal hostnames are rejected.
      required:
      - emails
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: Optional opaque, unquoted key for safely retrying the same logical request. Keys must contain 1 to 255 letters, numbers, hyphens, or underscores. Generate a unique UUID v4 for each operation and reuse it only when retrying that operation with the same request. Invalid headers—including duplicate, empty, malformed, or overlong values—return 400 with error code 10015. A request already in progress with the same key returns 409; reusing the key with a different request returns 422. Only successful responses are replayed, for up to 24 hours. Do not include sensitive data in the key.
      schema:
        type: string
        minLength: 1
        maxLength: 255
        pattern: ^[A-Za-z0-9_-]{1,255}$
      example: 8e03978e-40d5-43e8-bc93-6894a57f9326
    BatchId:
      name: id
      in: path
      required: true
      description: Email validation batch UUID.
      schema:
        type: string
        format: uuid
  headers:
    IdempotentReplayed:
      description: Present with value `true` when Edge replayed a stored successful response for the supplied Idempotency-Key. Omitted for first-time requests and error responses.
      schema:
        type: boolean
        enum:
        - true
        example: true
  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