Bulk DMARC Record Lookup

Check email security (DMARC) configuration for one or many domains in a single request. Give this tool a list of domain names and it will instantly check each one's DMARC email security record. DMARC is a standard that tells email providers how to handle fake or spoofed emails pretending to come from your domain. For each domain you submit, you get back whether a valid record exists, what the policy is (none, quarantine, or reject), whether reporting addresses are set up, and the full raw record text. Perfect for auditing many domains at once without any setup. Pay-per-call at $0.01 USDC over x402 on Base or Solana — no account, no API key. OpenAPI 3.1.0; 1 operation(s): POST /dmarc-lookup.

OpenAPI Specification

done-dmarc-lookup-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Bulk DMARC Record Lookup
  description: Give this tool a list of domain names and it will instantly check each one's DMARC email security record. DMARC
    is a standard that tells email providers how to handle fake or spoofed emails pretending to come from your domain. For
    each domain you submit, you get back whether a valid record exists, what the policy is (none, quarantine, or reject),
    whether reporting addresses are set up, and the full raw record text. Perfect for auditing many domains at once without
    any setup.
  version: 1.0.0
  contact:
    name: _done
    url: https://forms.gle/5KzuSFH7p8hHtDmz7
    email: info@underscoredone.com
  x-openapi-url: https://dmarc-lookup.underscoredone.com/openapi.json
  x-logo:
    url: https://underscoredone.com/logo.png
    altText: _done
  x-guidance: 'Call this endpoint with POST and a JSON body containing a ''domains'' array of bare domain names (no http://
    or www), e.g. {"domains": ["example.com", "mycompany.org"]}. Comma-separated strings inside an array entry are also tolerated
    and will be split. Each domain in the response will have: ''domain'' (the input domain), ''recordStatus'' (''Valid'',
    ''Invalid'', or ''Not Found''), ''domainPolicy'' (the p= tag value such as ''none'', ''quarantine'', ''reject'', or empty
    string if not found), ''reportingEnabled'' (true if rua or ruf tags are present), and ''rawRecord'' (the full TXT record
    string, or empty string if none). A ''Valid'' record has both v=DMARC1 and a p= tag. ''Invalid'' means a record was found
    but is missing one of those required tags. ''Not Found'' means no TXT record exists at _dmarc.{domain}. DNS failures for
    a specific domain are returned as ''Not Found'' rather than errors. A 400 is only returned if the domains array is empty
    or every entry is blank. A 422 is returned if the ''domains'' field is missing from the body or is not an array.'
  x-ai-instructions: 'Call this endpoint with POST and a JSON body containing a ''domains'' array of bare domain names (no
    http:// or www), e.g. {"domains": ["example.com", "mycompany.org"]}. Comma-separated strings inside an array entry are
    also tolerated and will be split. Each domain in the response will have: ''domain'' (the input domain), ''recordStatus''
    (''Valid'', ''Invalid'', or ''Not Found''), ''domainPolicy'' (the p= tag value such as ''none'', ''quarantine'', ''reject'',
    or empty string if not found), ''reportingEnabled'' (true if rua or ruf tags are present), and ''rawRecord'' (the full
    TXT record string, or empty string if none). A ''Valid'' record has both v=DMARC1 and a p= tag. ''Invalid'' means a record
    was found but is missing one of those required tags. ''Not Found'' means no TXT record exists at _dmarc.{domain}. DNS
    failures for a specific domain are returned as ''Not Found'' rather than errors. A 400 is only returned if the domains
    array is empty or every entry is blank. A 422 is returned if the ''domains'' field is missing from the body or is not
    an array.'
  x-provider: _done — single-purpose utility APIs for developers and AI agents. Pay per call with USDC on Base Mainnet or
    Solana Mainnet.
  x-pricing:
    model: pay-per-call
    currency: USDC
    network: Base Mainnet or Solana Mainnet
    price: $0.01
  x-keywords: []
  x-category: dmarc
  x-provider-url: https://underscoredone.com
  x-agentcash-auth:
    mode: paid
  x-402:
    price: $0.01
    network: eip155:8453
    asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
    pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
    facilitator: https://api.cdp.coinbase.com/platform/v2/x402
    scheme: exact
    description: Give this tool a list of domain names and it will instantly check each one's DMARC email security record.
      DMARC is a standard that tells email providers how to handle fake or spoofed emails pretending to come from your domain.
      For each domain you submit, you get back whether a valid record exists, what the policy is (none, quarantine, or reject),
      whether reporting addresses are set up, and the full raw record text. Perfect for auditing many domains at once without
      any setup.
    mime_type: application/json
    networks:
    - network: eip155:8453
      asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
      pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
    - network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
      asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
      pay_to: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
paths:
  /dmarc-lookup:
    post:
      tags:
      - dmarc
      - dmarc record
      - email security
      - dmarc lookup
      - email authentication
      - spf
      - dkim
      - email spoofing
      - spf dkim dmarc
      - check dmarc
      - email deliverability
      - anti-spoofing
      - dmarc policy
      - bulk dmarc
      - domain email security
      summary: Look up DMARC email security records for one or many domains at once.
      description: Check the DMARC email security record for one or many domain names at once. Send a JSON body with a 'domains'
        array of bare domain names and get back the record status, policy, and full record text for each one.
      operationId: handler_dmarc_lookup_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Request'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
              examples:
                success:
                  summary: Successful response
                  value:
                    api_version: 1.0.0
                    results:
                    - domain: onescales.com
                      recordStatus: Valid
                      domainPolicy: reject
                      reportingEnabled: true
                      rawRecord: v=DMARC1;p=reject;rua=mailto:3e873edd60aa449aa519421775786d39@dmarc-reports.cloudflare.net,mailto:dmarc@onescales.com,mailto:27da9b4b47@rua.easydmarc.us;ruf=mailto:27da9b4b47@ruf.easydmarc.us;fo=1;
                    - domain: hillms.com
                      recordStatus: Valid
                      domainPolicy: reject
                      reportingEnabled: true
                      rawRecord: v=DMARC1;p=reject;rua=mailto:info@hillms.com;
                    - domain: nodmarc-example.com
                      recordStatus: Not Found
                      domainPolicy: ''
                      reportingEnabled: false
                      rawRecord: ''
                    total: 3
                    valid_count: 2
                    invalid_count: 0
                    not_found_count: 1
        '422':
          description: Unprocessable — a required field is missing or the wrong type. Check the detail field for specifics.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: array
        '402':
          description: Payment required. Send a signed USDC payment on Base Mainnet or Solana Mainnet using the x402 protocol.
          headers:
            X-Payment-Response:
              description: x402 payment challenge — base64-encoded JSON with payment details.
              schema:
                type: string
        '400':
          description: Bad request — your input failed validation or could not be processed. Check the detail field for specifics.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
      x-ai-instructions: 'Call this endpoint with POST and a JSON body containing a ''domains'' array of bare domain names
        (no http:// or www), e.g. {"domains": ["example.com", "mycompany.org"]}. Comma-separated strings inside an array entry
        are also tolerated and will be split. Each domain in the response will have: ''domain'' (the input domain), ''recordStatus''
        (''Valid'', ''Invalid'', or ''Not Found''), ''domainPolicy'' (the p= tag value such as ''none'', ''quarantine'', ''reject'',
        or empty string if not found), ''reportingEnabled'' (true if rua or ruf tags are present), and ''rawRecord'' (the
        full TXT record string, or empty string if none). A ''Valid'' record has both v=DMARC1 and a p= tag. ''Invalid'' means
        a record was found but is missing one of those required tags. ''Not Found'' means no TXT record exists at _dmarc.{domain}.
        DNS failures for a specific domain are returned as ''Not Found'' rather than errors. A 400 is only returned if the
        domains array is empty or every entry is blank. A 422 is returned if the ''domains'' field is missing from the body
        or is not an array.'
      x-guidance: 'Call this endpoint with POST and a JSON body containing a ''domains'' array of bare domain names (no http://
        or www), e.g. {"domains": ["example.com", "mycompany.org"]}. Comma-separated strings inside an array entry are also
        tolerated and will be split. Each domain in the response will have: ''domain'' (the input domain), ''recordStatus''
        (''Valid'', ''Invalid'', or ''Not Found''), ''domainPolicy'' (the p= tag value such as ''none'', ''quarantine'', ''reject'',
        or empty string if not found), ''reportingEnabled'' (true if rua or ruf tags are present), and ''rawRecord'' (the
        full TXT record string, or empty string if none). A ''Valid'' record has both v=DMARC1 and a p= tag. ''Invalid'' means
        a record was found but is missing one of those required tags. ''Not Found'' means no TXT record exists at _dmarc.{domain}.
        DNS failures for a specific domain are returned as ''Not Found'' rather than errors. A 400 is only returned if the
        domains array is empty or every entry is blank. A 422 is returned if the ''domains'' field is missing from the body
        or is not an array.'
      x-payment-info:
        price:
          fixed:
            mode: fixed
            currency: USD
            amount: '0.01'
        protocols:
        - x402: {}
components:
  schemas:
    DomainResult:
      properties:
        domain:
          type: string
          title: Domain
          description: The domain name that was checked.
        recordStatus:
          type: string
          title: Recordstatus
          description: Whether the DMARC record is 'Valid', 'Invalid', or 'Not Found'.
        domainPolicy:
          type: string
          title: Domainpolicy
          description: 'The email handling policy from the DMARC record: ''none'', ''quarantine'', ''reject'', or empty if
            not found.'
        reportingEnabled:
          type: boolean
          title: Reportingenabled
          description: True if the domain has reporting addresses set up (rua or ruf tags present).
        rawRecord:
          type: string
          title: Rawrecord
          description: The full raw DMARC record text, or empty string if no record was found.
      type: object
      required:
      - domain
      - recordStatus
      - domainPolicy
      - reportingEnabled
      - rawRecord
      title: DomainResult
      example:
        domain: onescales.com
        domainPolicy: reject
        rawRecord: v=DMARC1; p=reject; rua=mailto:dmarc@onescales.com;
        recordStatus: Valid
        reportingEnabled: true
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Request:
      properties:
        domains:
          items:
            type: string
          type: array
          title: Domains
          description: 'A list of one or more domain names to check. Use bare domain names only — no http://, https://, or
            www. Example: ["onescales.com", "hillms.com"]'
      type: object
      required:
      - domains
      title: Request
      example:
        domains:
        - onescales.com
        - hillms.com
        - google.com
    Response:
      properties:
        api_version:
          type: string
          title: Api Version
          description: API version
          default: 1.0.0
        results:
          items:
            $ref: '#/components/schemas/DomainResult'
          type: array
          title: Results
          description: One result entry for each domain you submitted, in the same order.
        total:
          type: integer
          title: Total
          description: Total number of domains checked.
        valid_count:
          type: integer
          title: Valid Count
          description: Number of domains with a valid DMARC record.
        invalid_count:
          type: integer
          title: Invalid Count
          description: Number of domains with a DMARC record that is missing required fields.
        not_found_count:
          type: integer
          title: Not Found Count
          description: Number of domains with no DMARC record found.
      type: object
      required:
      - results
      - total
      - valid_count
      - invalid_count
      - not_found_count
      title: Response
      example:
        api_version: 1.0.0
        invalid_count: 0
        not_found_count: 1
        results:
        - domain: onescales.com
          domainPolicy: reject
          rawRecord: v=DMARC1; p=reject; rua=mailto:dmarc@onescales.com;
          recordStatus: Valid
          reportingEnabled: true
        - domain: hillms.com
          domainPolicy: ''
          rawRecord: ''
          recordStatus: Not Found
          reportingEnabled: false
        total: 2
        valid_count: 1
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
  securitySchemes:
    siwx:
      type: apiKey
      in: header
      name: SIGN-IN-WITH-X
      description: CAIP-122 wallet signature for repeat access after payment
servers:
- url: https://dmarc-lookup.underscoredone.com
  description: Production
tags:
- name: dmarc
- name: dmarc record
- name: email security
- name: dmarc lookup
- name: email authentication
- name: spf
- name: dkim
- name: email spoofing
- name: spf dkim dmarc
- name: check dmarc
- name: email deliverability
- name: anti-spoofing
- name: dmarc policy
- name: bulk dmarc
- name: domain email security
x402Version: 2
x-payment-accepts:
- scheme: exact
  network: eip155:8453
  payTo: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
  asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
- scheme: exact
  network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
  payTo: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
  asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v