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

# Get domain details and DNS status.

> Get domain details and DNS status.



## OpenAPI

````yaml api-reference/openapi.json post /v1.DomainService/GetDomain
openapi: 3.1.0
info:
  title: SimpleEmailAPI
  description: >-
    The SimpleEmailAPI is a type-safe email API for sending transactional emails
    with real-time event streaming. Built on Connect RPC for maximum type safety
    and developer experience.
  contact:
    name: SimpleEmailAPI Support
    url: https://simpleemailapi.dev
    email: support@simpleemailapi.dev
  version: 1.0.0
servers:
  - url: https://api.simpleemailapi.dev
    description: Production
security:
  - BearerAuth: []
tags:
  - name: v1.DomainService
    description: |-
      DomainService handles sending domains.
       To send emails with good deliverability, you need to:
       1. Add a domain (AddDomain)
       2. Configure the DNS records we give you
       3. Verify the layout (VerifyDomain)
  - name: v1.EmailService
    description: >-
      EmailService is the core service for sending emails and listening to
      events.
       It provides a simple, stateless API designed for developer happiness.
paths:
  /v1.DomainService/GetDomain:
    post:
      tags:
        - v1.DomainService
      summary: Get domain details and DNS status.
      description: Get domain details and DNS status.
      operationId: v1.DomainService.GetDomain
      parameters:
        - name: Connect-Protocol-Version
          in: header
          required: true
          schema:
            $ref: '#/components/schemas/connect-protocol-version'
        - name: Connect-Timeout-Ms
          in: header
          schema:
            $ref: '#/components/schemas/connect-timeout-header'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/v1.GetDomainRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1.GetDomainResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/connect.error'
components:
  schemas:
    connect-protocol-version:
      type: number
      title: Connect-Protocol-Version
      enum:
        - 1
      description: Define the version of the Connect protocol
      const: 1
    connect-timeout-header:
      type: number
      title: Connect-Timeout-Ms
      description: Define the timeout, in ms
    v1.GetDomainRequest:
      type: object
      properties:
        id:
          type: string
          title: id
      title: GetDomainRequest
      additionalProperties: false
    v1.GetDomainResponse:
      type: object
      properties:
        domain:
          $ref: '#/components/schemas/v1.Domain'
          title: domain
      title: GetDomainResponse
      additionalProperties: false
    connect.error:
      type: object
      properties:
        code:
          type: string
          examples:
            - not_found
          enum:
            - canceled
            - unknown
            - invalid_argument
            - deadline_exceeded
            - not_found
            - already_exists
            - permission_denied
            - resource_exhausted
            - failed_precondition
            - aborted
            - out_of_range
            - unimplemented
            - internal
            - unavailable
            - data_loss
            - unauthenticated
          description: >-
            The status code, which should be an enum value of
            [google.rpc.Code][google.rpc.Code].
        message:
          type: string
          description: >-
            A developer-facing error message, which should be in English. Any
            user-facing error message should be localized and sent in the
            [google.rpc.Status.details][google.rpc.Status.details] field, or
            localized by the client.
        details:
          type: array
          items:
            $ref: '#/components/schemas/connect.error_details.Any'
          description: >-
            A list of messages that carry the error details. There is no limit
            on the number of messages.
      title: Connect Error
      additionalProperties: true
      description: >-
        Error type returned by Connect:
        https://connectrpc.com/docs/go/errors/#http-representation
    v1.Domain:
      type: object
      properties:
        id:
          type: string
          title: id
        domain:
          type: string
          title: domain
          description: The domain name (e.g. "example.com").
        status:
          $ref: '#/components/schemas/v1.DomainStatus'
          title: status
          description: Overall verification status.
        region:
          type: string
          title: region
          description: AWS Region (e.g. "us-east-1").
        createdAt:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: created_at
        updatedAt:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: updated_at
        lastCheckedAt:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: last_checked_at
        summary:
          $ref: '#/components/schemas/v1.DomainSummary'
          title: summary
          description: Simple summary of what's needed next.
        records:
          $ref: '#/components/schemas/v1.DomainRecords'
          title: records
          description: Detailed DNS records list.
      title: Domain
      additionalProperties: false
      description: A sending domain.
    connect.error_details.Any:
      type: object
      properties:
        type:
          type: string
          description: >-
            A URL that acts as a globally unique identifier for the type of the
            serialized message. For example:
            `type.googleapis.com/google.rpc.ErrorInfo`. This is used to
            determine the schema of the data in the `value` field and is the
            discriminator for the `debug` field.
        value:
          type: string
          format: binary
          description: >-
            The Protobuf message, serialized as bytes and base64-encoded. The
            specific message type is identified by the `type` field.
        debug:
          oneOf:
            - type: object
              title: Any
              additionalProperties: true
              description: Detailed error information.
          discriminator:
            propertyName: type
          title: Debug
          description: >-
            Deserialized error detail payload. The 'type' field indicates the
            schema. This field is for easier debugging and should not be relied
            upon for application logic.
      additionalProperties: true
      description: >-
        Contains an arbitrary serialized message along with a @type that
        describes the type of the serialized message, with an additional debug
        field for ConnectRPC error details.
    v1.DomainStatus:
      type: string
      title: DomainStatus
      enum:
        - DOMAIN_STATUS_UNSPECIFIED
        - DOMAIN_STATUS_PENDING
        - DOMAIN_STATUS_VERIFYING
        - DOMAIN_STATUS_READY
        - DOMAIN_STATUS_DEGRADED
        - DOMAIN_STATUS_FAILED
      description: DomainStatus tracks the verification lifecycle.
    google.protobuf.Timestamp:
      type: string
      examples:
        - '2023-01-15T01:30:15.01Z'
        - '2024-12-25T12:00:00Z'
      format: date-time
      description: >-
        A Timestamp represents a point in time independent of any time zone or
        local
         calendar, encoded as a count of seconds and fractions of seconds at
         nanosecond resolution. The count is relative to an epoch at UTC midnight on
         January 1, 1970, in the proleptic Gregorian calendar which extends the
         Gregorian calendar backwards to year one.

         All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
         second table is needed for interpretation, using a [24-hour linear
         smear](https://developers.google.com/time/smear).

         The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
         restricting to that range, we ensure that we can convert to and from [RFC
         3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.

         # Examples

         Example 1: Compute Timestamp from POSIX `time()`.

             Timestamp timestamp;
             timestamp.set_seconds(time(NULL));
             timestamp.set_nanos(0);

         Example 2: Compute Timestamp from POSIX `gettimeofday()`.

             struct timeval tv;
             gettimeofday(&tv, NULL);

             Timestamp timestamp;
             timestamp.set_seconds(tv.tv_sec);
             timestamp.set_nanos(tv.tv_usec * 1000);

         Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.

             FILETIME ft;
             GetSystemTimeAsFileTime(&ft);
             UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

             // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
             // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
             Timestamp timestamp;
             timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
             timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

         Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.

             long millis = System.currentTimeMillis();

             Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
                 .setNanos((int) ((millis % 1000) * 1000000)).build();

         Example 5: Compute Timestamp from Java `Instant.now()`.

             Instant now = Instant.now();

             Timestamp timestamp =
                 Timestamp.newBuilder().setSeconds(now.getEpochSecond())
                     .setNanos(now.getNano()).build();

         Example 6: Compute Timestamp from current time in Python.

             timestamp = Timestamp()
             timestamp.GetCurrentTime()

         # JSON Mapping

         In JSON format, the Timestamp type is encoded as a string in the
         [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
         format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
         where {year} is always expressed using four digits while {month}, {day},
         {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
         seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
         are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
         is required. A proto3 JSON serializer should always use UTC (as indicated by
         "Z") when printing the Timestamp type and a proto3 JSON parser should be
         able to accept both UTC and other timezones (as indicated by an offset).

         For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
         01:30 UTC on January 15, 2017.

         In JavaScript, one can convert a Date object to this format using the
         standard
         [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
         method. In Python, a standard `datetime.datetime` object can be converted
         to this format using
         [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
         the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
         the Joda Time's [`ISODateTimeFormat.dateTime()`](
         http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
         ) to obtain a formatter capable of generating timestamps in this format.
    v1.DomainSummary:
      type: object
      properties:
        message:
          type: string
          title: message
          description: A friendly message like "Add 3 DNS records to start sending".
        nextAction:
          type: string
          title: next_action
          description: >-
            Next logical step: "CONFIGURE_DNS", "WAIT" (for receiver cache), or
            "NONE" (done).
        recordsPending:
          type: integer
          title: records_pending
          format: int32
        recordsConfigured:
          type: integer
          title: records_configured
          format: int32
        canSend:
          type: boolean
          title: can_send
          description: If true, you can start sending emails (even if not fully optimized).
        canReceive:
          type: boolean
          title: can_receive
          description: If true, you can receive inbound emails.
      title: DomainSummary
      additionalProperties: false
      description: Human-readable status summary.
    v1.DomainRecords:
      type: object
      properties:
        dkimRecords:
          type: array
          items:
            $ref: '#/components/schemas/v1.DnsRecord'
          title: dkim_records
          description: DKIM keys (usually CNAMES).
        spfRecord:
          $ref: '#/components/schemas/v1.DnsRecord'
          title: spf_record
          description: SPF record (TXT).
        dmarcRecord:
          $ref: '#/components/schemas/v1.DnsRecord'
          title: dmarc_record
          description: DMARC record (TXT).
        mxRecords:
          type: array
          items:
            $ref: '#/components/schemas/v1.DnsRecord'
          title: mx_records
          description: Inbound MX records.
        mailFromRecords:
          type: array
          items:
            $ref: '#/components/schemas/v1.DnsRecord'
          title: mail_from_records
          description: Custom MAIL FROM records.
      title: DomainRecords
      additionalProperties: false
      description: DNS configuration.
    v1.DnsRecord:
      type: object
      properties:
        type:
          type: string
          title: type
          description: 'Record type: "CNAME", "TXT", or "MX".'
        name:
          type: string
          title: name
          description: Hostname to set (e.g. "email._domainkey").
        value:
          type: string
          title: value
          description: Value to set (e.g. "k=rsa; ...").
        priority:
          type: integer
          title: priority
          format: int32
          description: Priority (only for MX records).
        recordType:
          $ref: '#/components/schemas/v1.RecordType'
          title: record_type
          description: What this record is for.
        status:
          $ref: '#/components/schemas/v1.RecordStatus'
          title: status
          description: Verification status.
        nameShort:
          type: string
          title: name_short
          description: >-
            Shortened hostname (e.g. "email._domainkey" instead of full FQDN)
            for easier copy-pasting.
        discoveredValue:
          type: string
          title: discovered_value
          description: The value we actually found in your DNS (useful for debugging).
        instructions:
          type: string
          title: instructions
          description: >-
            User-friendly instructions, e.g. "Add this TXT record to verify
            ownership".
      title: DnsRecord
      additionalProperties: false
      description: A single DNS record.
    v1.RecordType:
      type: string
      title: RecordType
      enum:
        - RECORD_TYPE_UNSPECIFIED
        - RECORD_TYPE_DKIM
        - RECORD_TYPE_SPF
        - RECORD_TYPE_DMARC
        - RECORD_TYPE_MX_INBOUND
        - RECORD_TYPE_MAIL_FROM_MX
        - RECORD_TYPE_MAIL_FROM_SPF
      description: Types of DNS records we require.
    v1.RecordStatus:
      type: string
      title: RecordStatus
      enum:
        - RECORD_STATUS_UNSPECIFIED
        - RECORD_STATUS_PENDING
        - RECORD_STATUS_FOUND
        - RECORD_STATUS_MISMATCH
        - RECORD_STATUS_MISSING
      description: Status of a single DNS record.
  securitySchemes:
    BearerAuth:
      type: http
      description: >-
        API key authentication. Get your API key from the SimpleEmailAPI
        dashboard and include it in the Authorization header as: Bearer
        sea_live_xxxxx
      scheme: bearer

````