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