{"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 a comma-separated list of bare domain names (no http:// or www) in the 'domains' query parameter. 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 parameter is missing or all values are unparseable.","x-ai-instructions":"Call this endpoint with a comma-separated list of bare domain names (no http:// or www) in the 'domains' query parameter. 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 parameter is missing or all values are unparseable.","x-provider":"_done — single-purpose utility APIs for developers and AI agents. Pay per call with USDC on Base.","x-pricing":{"model":"pay-per-call","currency":"USDC","network":"Base Mainnet","price":"$0.01"},"x-keywords":["dmarc","dmarc lookup","dmarc checker","dmarc validation","email security","email authentication","spf","dkim","dns lookup","dns check","txt record","bulk domain check","domain validation","email deliverability","anti-spoofing","validation","utility","api","ai-agent","pay-per-call","usdc","x402"],"x-category":"validation","x-provider-url":"https://underscoredone.com","x-402":{"price":"$0.01","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","pay_to":"0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08","facilitator":"https://facilitator.payai.network","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"}},"paths":{"/dmarc-lookup":{"get":{"tags":["Validation"],"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. Submit bare domain names separated by commas and get back the record status, policy, and full record text for each one.","operationId":"handler_dmarc_lookup_get","parameters":[{"name":"domains","in":"query","required":true,"schema":{"type":"string","description":"One or more domain names separated by commas. Use bare domain names only — no http://, https://, or www. Example: onescales.com,hillms.com","title":"Domains"},"description":"One or more domain names separated by commas. Use bare domain names only — no http://, https://, or www. Example: onescales.com,hillms.com"}],"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:dmarc@onescales.com;"},{"domain":"hillms.com","recordStatus":"Not Found","domainPolicy":"","reportingEnabled":false,"rawRecord":""}],"total":2,"valid_count":1,"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 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 a comma-separated list of bare domain names (no http:// or www) in the 'domains' query parameter. 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 parameter is missing or all values are unparseable.","x-guidance":"Call this endpoint with a comma-separated list of bare domain names (no http:// or www) in the 'domains' query parameter. 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 parameter is missing or all values are unparseable.","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"},"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"}]}