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/done-dmarc-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: 3.2.0
info:
title: Bulk Record Lookup Dmarc API
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
servers:
- url: https://dmarc-lookup.underscoredone.com
description: Production
tags:
- name: dmarc
paths:
/dmarc-lookup:
post:
tags:
- dmarc
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:
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
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
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
securitySchemes:
siwx:
type: apiKey
in: header
name: SIGN-IN-WITH-X
description: CAIP-122 wallet signature for repeat access after payment
x-payment-accepts:
- scheme: exact
network: eip155:8453
payTo: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
- scheme: exact
network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
payTo: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v