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