{"openapi":"3.1.0","info":{"title":"Sendly free email tools API","version":"1.0.0","description":"No-key access to the free email tools on https://sendly.now/tools: domain health, SPF, DKIM, DMARC, MX, BIMI and blocklist checks, and SPF and DMARC record generators. No account or API key; CORS is open. Each address may make 30 calls a minute and 300 a day. Send Accept: text/markdown for a Markdown answer.","contact":{"email":"support@sendly.now","url":"https://sendly.now/tools"}},"externalDocs":{"url":"https://sendly.now/tools"},"servers":[{"url":"https://sendly.now"}],"security":[],"tags":[{"name":"Free tools","description":"No key, no login. CORS *. JSON, or Markdown with Accept: text/markdown. Errors are RFC 9457 problem+json."}],"paths":{"/api/tools/domain-health":{"get":{"operationId":"domainHealth","summary":"Email domain health check","description":"Check SPF, DKIM, DMARC, MX and BIMI for a domain in one read, with the exact fix for each problem. Returns a verdict, each record's findings and fixes, and the domain's standing against Gmail and Yahoo's sender requirements.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/domain-health"},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A URL or an email address is reduced to its domain.","schema":{"type":"string"},"example":"example.com"},{"name":"selector","in":"query","required":false,"description":"DKIM selectors to check, comma separated (up to 5). Without one, common provider selectors are tried.","schema":{"type":"string"},"example":"google"}],"responses":{"200":{"description":"A verdict, each record's findings and fixes, and the domain's standing against Gmail and Yahoo's sender requirements.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"domain-health"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/spf-checker":{"get":{"operationId":"spfChecker","summary":"SPF record checker","description":"Validate a domain's SPF record and count its DNS lookups across every include against the limit of 10. Returns the SPF record, its terms, the lookup and void-lookup counts across the include tree, and findings with fixes.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/spf-checker"},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A URL or an email address is reduced to its domain.","schema":{"type":"string"},"example":"example.com"}],"responses":{"200":{"description":"The SPF record, its terms, the lookup and void-lookup counts across the include tree, and findings with fixes.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"spf-checker"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/dkim-checker":{"get":{"operationId":"dkimChecker","summary":"DKIM record checker","description":"Look up a domain's DKIM public key by selector and check its type, size and flags. Returns the DKIM key records found at each selector, with key type, key size and findings.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/dkim-checker"},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A URL or an email address is reduced to its domain.","schema":{"type":"string"},"example":"example.com"},{"name":"selector","in":"query","required":false,"description":"DKIM selectors, comma separated (up to 5). Without one, common provider selectors are tried.","schema":{"type":"string"},"example":"selector1"}],"responses":{"200":{"description":"The DKIM key records found at each selector, with key type, key size and findings.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"dkim-checker"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/dmarc-checker":{"get":{"operationId":"dmarcChecker","summary":"DMARC record checker","description":"Check a domain's DMARC policy, reporting addresses and coverage, including subdomain inheritance. Returns the DMARC record and where it was found, the effective policy, pct, report addresses and findings.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/dmarc-checker"},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A URL or an email address is reduced to its domain.","schema":{"type":"string"},"example":"example.com"}],"responses":{"200":{"description":"The DMARC record and where it was found, the effective policy, pct, report addresses and findings.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"dmarc-checker"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/mx-lookup":{"get":{"operationId":"mxLookup","summary":"MX record lookup","description":"List a domain's mail servers in priority order, resolve each one and identify the mail provider. Returns the MX hosts in priority order with their addresses and recognised provider, and findings.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/mx-lookup"},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A URL or an email address is reduced to its domain.","schema":{"type":"string"},"example":"example.com"}],"responses":{"200":{"description":"The MX hosts in priority order with their addresses and recognised provider, and findings.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"mx-lookup"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/bimi-checker":{"get":{"operationId":"bimiChecker","summary":"BIMI record checker","description":"Check whether a domain's BIMI logo can show in inboxes: the record, DMARC enforcement and the certificate. Returns the BIMI record, logo and certificate URLs, DMARC enforcement and findings.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/bimi-checker"},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A URL or an email address is reduced to its domain.","schema":{"type":"string"},"example":"example.com"}],"responses":{"200":{"description":"The BIMI record, logo and certificate URLs, DMARC enforcement and findings.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"bimi-checker"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/blocklist-check":{"get":{"operationId":"blocklistCheck","summary":"Email blocklist check","description":"Check a mail server's IPv4 address, or a hostname's addresses, against public DNS blocklists. Returns each address's result on each blocklist (listed, clear or could not check) with removal links.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/blocklist-check"},"parameters":[{"name":"target","in":"query","required":true,"description":"An IPv4 address, or a hostname whose IPv4 addresses are checked (up to 4).","schema":{"type":"string"},"example":"mail.sendly.now"}],"responses":{"200":{"description":"Each address's result on each blocklist (listed, clear or could not check) with removal links.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"blocklist-check"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/spf-generator":{"get":{"operationId":"spfGenerator","summary":"SPF record generator","description":"Build an SPF record from the services and servers that send your mail, with every term explained. Returns the SPF TXT value to publish, an explanation of each term, and warnings about the lookup limit.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/spf-generator"},"parameters":[{"name":"service","in":"query","required":false,"description":"A sending service: google, microsoft, amazonses, zoho, fastmail or proton.","schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"example":["google"]},{"name":"include","in":"query","required":false,"description":"Other include domains from your providers' instructions, comma separated.","schema":{"type":"string"},"example":"spf.example.net"},{"name":"ip4","in":"query","required":false,"description":"IPv4 addresses or ranges, comma separated.","schema":{"type":"string"},"example":"203.0.113.10"},{"name":"ip6","in":"query","required":false,"description":"IPv6 addresses or ranges, comma separated.","schema":{"type":"string"},"example":"2001:db8::/32"},{"name":"mx","in":"query","required":false,"description":"1 to authorise the domain's MX servers.","schema":{"type":"string"},"example":"1"},{"name":"all","in":"query","required":false,"description":"~all (soft fail, default) or -all (hard fail).","schema":{"type":"string"},"example":"~all"}],"responses":{"200":{"description":"The SPF TXT value to publish, an explanation of each term, and warnings about the lookup limit.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"spf-generator"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/dmarc-generator":{"get":{"operationId":"dmarcGenerator","summary":"DMARC record generator","description":"Build a DMARC record with the policy, reporting and alignment settings you choose, each one explained. Returns the DMARC TXT value to publish at _dmarc, an explanation of each tag, and warnings.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/dmarc-generator"},"parameters":[{"name":"p","in":"query","required":false,"description":"Policy: none, quarantine or reject.","schema":{"type":"string"},"example":"none"},{"name":"sp","in":"query","required":false,"description":"Subdomain policy: none, quarantine or reject.","schema":{"type":"string"},"example":"quarantine"},{"name":"pct","in":"query","required":false,"description":"Percentage of failing mail the policy applies to (0-100).","schema":{"type":"string"},"example":"100"},{"name":"rua","in":"query","required":false,"description":"Aggregate report addresses, comma separated.","schema":{"type":"string"},"example":"dmarc@example.com"},{"name":"ruf","in":"query","required":false,"description":"Failure report addresses, comma separated.","schema":{"type":"string"},"example":"dmarc@example.com"},{"name":"adkim","in":"query","required":false,"description":"s for strict DKIM alignment (default relaxed).","schema":{"type":"string"},"example":"r"},{"name":"aspf","in":"query","required":false,"description":"s for strict SPF alignment (default relaxed).","schema":{"type":"string"},"example":"r"}],"responses":{"200":{"description":"The DMARC TXT value to publish at _dmarc, an explanation of each tag, and warnings.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"dmarc-generator"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/subject-line-tester":{"get":{"operationId":"subjectLineTester","summary":"Email subject line tester","description":"shows where phones and desktops cut a subject and preheader, and flags merge tags that did not render, shouting and spammy habits. Returns character and word counts, phone and desktop previews, and findings with a fix for each.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/subject-line-tester"},"parameters":[{"name":"subject","in":"query","required":true,"description":"The subject line.","schema":{"type":"string"},"example":"Your March invoice is ready"},{"name":"preheader","in":"query","required":false,"description":"The preview text shown after the subject.","schema":{"type":"string"},"example":"Due on the 15th"}],"responses":{"200":{"description":"Character and word counts, phone and desktop previews, and findings with a fix for each.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"subject-line-tester"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}},"/api/tools/email-signature-generator":{"get":{"operationId":"emailSignatureGenerator","summary":"Email signature generator","description":"builds a table-based HTML signature with inline styles that Gmail, Outlook and Apple Mail render alike, plus a plain-text version. Returns the signature as HTML and as plain text, with a note for any value that was left out.","tags":["Free tools"],"security":[],"externalDocs":{"url":"https://sendly.now/tools/email-signature-generator"},"parameters":[{"name":"name","in":"query","required":true,"description":"Your name.","schema":{"type":"string"},"example":"Ada Lovelace"},{"name":"title","in":"query","required":false,"description":"Job title.","schema":{"type":"string"},"example":"Head of Engineering"},{"name":"company","in":"query","required":false,"description":"Company.","schema":{"type":"string"},"example":"Example Ltd"},{"name":"email","in":"query","required":false,"description":"Email address, linked with mailto:.","schema":{"type":"string"},"example":"ada@example.com"},{"name":"phone","in":"query","required":false,"description":"Phone number, linked with tel:.","schema":{"type":"string"},"example":"+1 555 010 2030"},{"name":"website","in":"query","required":false,"description":"Website, linked over https.","schema":{"type":"string"},"example":"example.com"},{"name":"accent","in":"query","required":false,"description":"Accent colour: rust, ink, blue, green, purple or slate.","schema":{"type":"string"},"example":"blue"}],"responses":{"200":{"description":"The signature as HTML and as plain text, with a note for any value that was left out.","content":{"application/json":{"schema":{"type":"object","required":["tool","checked_at","result","docs"],"properties":{"tool":{"type":"string","const":"email-signature-generator"},"checked_at":{"type":"string","format":"date-time"},"result":{"type":"object"},"docs":{"type":"string","format":"uri"}}}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"The tool cannot use the input (`invalid_input`); `detail` says why.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Too many calls from one address. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"description":"Seconds until the caller may try again.","schema":{"type":"integer"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","description":"RFC 9457 problem details.","required":["type","title","status","detail","code"],"properties":{"type":{"type":"string","format":"uri","description":"https://sendly.now/tools#problem-<code>"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"code":{"type":"string","enum":["invalid_input","unknown_tool","method_not_allowed","rate_limited"]}}}}}}