> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aefer.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Verify an email domain

> Checks the four records now instead of waiting for the next scheduled check, and
answers each record's `valid` and the domain's `status`. DNS changes can take a few hours
to be visible.




## OpenAPI

````yaml /openapi.yaml post /email_domains/{id}/verify
openapi: 3.1.0
info:
  title: _æfer API
  description: >
    The _æfer API lets you build a meetings feature into your product: users
    connect

    a calendar, a notetaker joins their calls, and you get the transcript,
    speakers and

    summary of each meeting.
  version: '2026-11-13'
  contact:
    name: _æfer Developer Support
    email: support@aefer.ai
servers:
  - url: https://api.aefer.ai/api/v1
security:
  - apiKeyAuth: []
tags:
  - name: Agent sessions
    description: Exchange the code a user hands their AI agent for API credentials.
  - name: Uploads
    description: Get signed URLs to upload media files directly to _æfer storage.
  - name: Transcribe
    description: Create transcription orders from media URLs.
  - name: Subtitle
    description: Create subtitling orders from media URLs.
  - name: Translate
    description: Create translation orders from existing conversations.
  - name: Orders
    description: Retrieve and confirm the orders created by the service endpoints.
  - name: Conversations
    description: List, retrieve, update, and delete conversations.
  - name: Exports
    description: Export conversations to text, subtitle, video-editing, and data formats.
  - name: Bots
    description: Send a notetaker bot to Zoom, Google Meet, or Microsoft Teams calls.
  - name: Glossaries
    description: List glossaries to apply custom terminology to orders.
  - name: Style guides
    description: List style guides to apply formatting preferences to orders.
  - name: Workspaces
    description: List the workspaces the authenticated user belongs to.
  - name: Organization memberships
    description: Manage which users belong to a workspace.
  - name: Members
    description: A partner's end users inside a workspace (_æfer).
  - name: Meetings
    description: >-
      Every meeting of a workspace, from calendars and bots, with its results
      (_æfer).
  - name: Calendar connections
    description: >-
      Members' Google and Microsoft calendars, connected through a hosted
      consent link and synced by _æfer.
  - name: Calendar events
    description: Calendar events a partner pushes from its own calendar sync (_æfer).
  - name: Settings
    description: >-
      What gets recorded and how, as values you assign to a workspace, a member,
      a meeting category or one meeting (_æfer).
  - name: Settings assignments
    description: Where settings apply (_æfer).
  - name: Files
    description: Images uploaded to a workspace, to use in a brand kit (_æfer).
  - name: Email domains
    description: >-
      The domains an account sends summary emails from, each verified with three
      CNAME records and an ownership TXT record (_æfer).
  - name: Webhook endpoints
    description: Register the receivers of a workspace's webhooks, and test them.
  - name: Webhook events
    description: >-
      The webhooks sent to a workspace's endpoints, how each delivery went, and
      redelivery.
  - name: People
    description: >-
      Language Services. People found in your transcripts (Memory API, private
      beta).
  - name: Companies
    description: >-
      Language Services. Companies found in your transcripts (Memory API,
      private beta).
paths:
  /email_domains/{id}/verify:
    parameters:
      - $ref: '#/components/parameters/EmailDomainId'
    post:
      tags:
        - Email domains
      summary: Verify an email domain
      description: >
        Checks the four records now instead of waiting for the next scheduled
        check, and

        answers each record's `valid` and the domain's `status`. DNS changes can
        take a few hours

        to be visible.
      operationId: verifyEmailDomain
      responses:
        '200':
          description: The email domain after the check.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailDomain'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/AccountKeyRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: >-
            Another account verified this domain first (`domain_taken`), or the
            domain is being added or checked right now
            (`registration_in_progress`; try again).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '502':
          description: >-
            The email provider did not answer (`email_provider_error`). Your
            domain stays as it was; try again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
components:
  parameters:
    EmailDomainId:
      name: id
      in: path
      required: true
      description: Email domain ID, beginning with `edm_`. Treat it as an opaque string.
      schema:
        type: string
        example: edm_01m7a4k2r9s8x7c2dvq3m5n6p4
  schemas:
    EmailDomain:
      type: object
      properties:
        id:
          type: string
          description: >-
            Email domain ID, beginning with `edm_`. Treat it as an opaque
            string.
          example: edm_01m7a4k2r9s8x7c2dvq3m5n6p4
        object:
          type: string
          description: Always `email_domain`.
        domain:
          type: string
          description: The domain summary emails are sent from, lowercase.
          example: mail.acme.com
        status:
          description: >
            Whether the domain's records resolve.


            - `pending`: not all four records resolve yet. Checked every hour
            for 7 days, and whenever you verify it; removed if still pending
            after 7 days.

            - `verified`: all four records resolve. Checked once a day.

            - `failing`: was verified, but a record stopped resolving on two
            checks in a row. It is verified again once all four resolve.
          type: string
          enum:
            - pending
            - verified
            - failing
        dns_records:
          type: array
          description: >-
            The four records to add at your DNS provider, three CNAMEs and an
            ownership TXT record.
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - CNAME
                  - TXT
                description: >
                  The record type.


                  - `CNAME`: points `host` at a name _æfer serves, for sending
                  and signing.

                  - `TXT`: proves your account controls the domain; its value is
                  unique to this registration.
              host:
                type: string
                description: The record's name, under your domain.
                example: aefer.mail.acme.com
              value:
                type: string
                description: >-
                  What the record points at, or for the TXT record its exact
                  text.
                example: rp.sg1.dkim.aefer.ai
              valid:
                type: boolean
                description: >-
                  Whether the record checked out on the last check. Keep every
                  record in place once the domain is verified, the TXT record
                  included.
        verified_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the domain last became `verified`, in ISO 8601. Null until
            then.
        last_checked_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the records were last checked, in ISO 8601. Null before the
            first check.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            When a `pending` domain is removed if it isn't verified by then, in
            ISO 8601, 7 days after it was added. Null once the domain is
            verified.
        created_at:
          type: string
          format: date-time
          description: When the domain was added, in ISO 8601.
      example:
        id: edm_01m7a4k2r9s8x7c2dvq3m5n6p4
        object: email_domain
        domain: mail.acme.com
        status: pending
        dns_records:
          - type: CNAME
            host: aefer.mail.acme.com
            value: rp.sg1.dkim.aefer.ai
            valid: false
          - type: CNAME
            host: s1._domainkey.mail.acme.com
            value: s1.sg1.dkim.aefer.ai
            valid: false
          - type: CNAME
            host: s2._domainkey.mail.acme.com
            value: s2.sg1.dkim.aefer.ai
            valid: false
          - type: TXT
            host: _aefer.mail.acme.com
            value: aefer-verification=2kVh9wQx7LmN3pR8sT4uY6zA
            valid: false
        verified_at: null
        last_checked_at: null
        expires_at: '2026-11-27T10:02:11Z'
        created_at: '2026-11-20T10:02:11Z'
    Errors:
      type: object
      required:
        - errors
      description: >
        Every error the API returns, `401` and `429` included. See
        [Errors](/api-reference/errors).
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
        retry_in_seconds:
          type: integer
          description: >-
            On `429`, how long to wait before retrying. Also sent as
            `Retry-After`.
      example:
        errors:
          - code: invalid
            field: recording.methods.bot.mode
            message: 'must be one of: audio_and_video, audio_only, inherit'
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: >-
            A stable snake_case word, safe to branch on. See
            [Errors](/api-reference/errors) for the list.
        message:
          type: string
          description: A sentence for humans. It may change; do not parse it.
        field:
          type: string
          description: >-
            The dotted path to the request field at fault, such as
            `recording.methods.bot.mode`. Present only when one field is.
  responses:
    Unauthorized:
      description: >-
        Your API key is missing (`missing_api_key`) or wrong
        (`invalid_api_key`), or its account is suspended (`account_suspended`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    AccountKeyRequired:
      description: >-
        A personal key was used; email domains belong to an account
        (`account_key_required`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    NotFound:
      description: >-
        The specified resource could not be found, or this key cannot see it
        (`not_found`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your API key, sent bare. See
        [Authentication](/api-reference/authentication).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.