Tools
Every operation in this group: what it accepts, what it returns and the errors it can answer with.
Operations
The free tools on the Nextmail website, which need no scope. Three check the public mail records of any domain: its DMARC policy, its BIMI logo, and a deliverability report across MX, SPF, DKIM, DMARC and BIMI. They read public DNS and nothing in the workspace, and every answer is what DNS said at that moment. One reads the sign-in code in a message you pass in, and one prices every plan for a usage.
GET/tools/dmarc
Check a domain's DMARC policy
Reads the domain's DMARC record from public DNS, or the record of the organisational domain it inherits from, and says how strict it is and what is wrong with it. stage is missing, invalid, monitor for p=none, quarantine or reject.
Needs no scope: any key or access token for the workspace may run it.
Query parameters
domainstringRequiredThe domain to check, such as
acme.com. An email address, a URL or a domain with a trailing dot is read as its domain. Any public domain works, not only the ones in this workspace.Up to 320 characters
Returns
What the DMARC record says.
Errors
- 422
invalid_parameterondomain: it does not read as a domain.- 503
unreachable: public DNS did not answer for the domain just now. Nothing about the domain was decided, so try again in a moment.
The errors every operation can return400401403404429500Error catalog
Also available in
GET/tools/bimi
Check a domain's BIMI logo
Reads the domain's BIMI record, fetches the logo it names and checks the DMARC policy beside it, since inboxes draw a logo only at p=quarantine or p=reject. status is present, partial when the record is there but something stops inboxes showing it, absent or invalid, and issues says why.
Needs no scope: any key or access token for the workspace may run it.
Query parameters
domainstringRequiredThe domain to check, such as
acme.com. An email address, a URL or a domain with a trailing dot is read as its domain. Any public domain works, not only the ones in this workspace.Up to 320 characters
Returns
What the BIMI record says and whether inboxes can draw the logo.
Errors
- 422
invalid_parameterondomain: it does not read as a domain.- 503
unreachable: public DNS did not answer for the domain just now. Nothing about the domain was decided, so try again in a moment.
The errors every operation can return400401403404429500Error catalog
Also available in
GET/tools/deliverability
Check a domain's deliverability
Checks the records a receiving mailbox reads before it trusts mail from the domain: MX, SPF, DKIM at the selectors its mail provider uses, DMARC and BIMI. Each check says pass, warn, fail or absent with a verdict and notes written to be shown to a person, and score weighs them into 0 to 100, graded A to F.
Needs no scope: any key or access token for the workspace may run it.
Query parameters
domainstringRequiredThe domain to check, such as
acme.com. An email address, a URL or a domain with a trailing dot is read as its domain. Any public domain works, not only the ones in this workspace.Up to 320 characters
Returns
Each check, the score and the grade.
Errors
- 422
invalid_parameterondomain: it does not read as a domain.- 503
unreachable: public DNS did not answer for the domain just now. Nothing about the domain was decided, so try again in a moment.
The errors every operation can return400401403404429500Error catalog
Also available in
POST/tools/verification-code
Read the sign-in code in a message
Finds the sign-in or verification code in a message you pass in, with the reader that puts a code at the top of a message in Nextmail. Send the message as raw (the whole MIME source) or as subject with html or text.
It answers only when it is sure. The message has to hold exactly one code worded as one, such as a verification code, a one-time code or a security code, in any of the common languages. Two different codes, or a number that could be an order, a booking, a meeting, a phone number or a promotion, give code: null. The code comes back as you would type it: digits only, or capital letters and digits, without spaces or dashes.
It reads only what you send, so it cannot tell whether the sender is who it claims to be. The verificationCode on a message in your mailbox also requires the sender to pass authentication. Nothing is stored, and no model is called.
Needs no scope: any key or access token for the workspace may run it.
Request body
subjectstringSubject line, at most 998 characters.
Up to 998 charactershtmlstringHTML body. Links are left out before the code is looked for.
Up to 1000000 characterstextstringPlain text body, used when there is no
html.Up to 1000000 charactersrawstringThe whole message as MIME source, as it was received. Wins over the other fields when it is set.
Up to 5000000 characters
Returns
The code, or null when the reader is not sure.
Errors
The errors every operation can return400401403404422429500Error catalog
Also available in
GET/tools/address
Check an email address
Says whether an address is worth sending to: valid, risky, invalid or unknown, with the reasons. It checks the syntax, whether the domain takes mail at all, whether it is a throwaway domain or a role address such as info@, and offers a correction for a likely typo such as gmial.com. With the emails:read scope it also says what this workspace knows: whether it suppressed the address and when it last delivered to it or saw it bounce. It never shows another workspace's history.
deep also asks whether the mailbox exists. A deep check is billed per address through pay as you go, $1.50 per 100 addresses on every plan, needs the emails:send scope, and is refused when pay as you go is off. Without it the check is free and checks.mailbox is null.
Needs no scope: any key or access token for the workspace may run it.
Query parameters
emailstringThe address to check.
1 to 320 charactersdeepbooleanAlso ask whether the mailbox exists. Billed per address. Defaults to false.
Defaultfalse
Returns
What the check found.
Errors
- 409
deep_check_unavailableordeep_check_limit_reached: a deep check needs pay as you go, and has to fit under its monthly limit.- 503
deep_check_unavailable: the mailbox check did not answer. Nothing was billed.
The errors every operation can return400401403404422429500Error catalog
Also available in
POST/tools/addresses
Check several email addresses
Checks up to 100 addresses in one call, each as GET /tools/address does, and returns them in the order they were sent. deep applies to every address and is billed for each one that reaches the mailbox check.
Needs no scope: any key or access token for the workspace may run it.
Request body
emailsstring[]RequiredThe addresses to check, from 1 to 100.
1 to 100 itemsdeepbooleanAlso ask whether each mailbox exists. Billed per address through pay as you go. Defaults to false.
Defaultfalse
Returns
One check per address, in order.
Errors
- 409
deep_check_unavailableordeep_check_limit_reached: a deep check needs pay as you go, and has to fit under its monthly limit.- 503
deep_check_unavailable: the mailbox check did not answer. Nothing was billed.
The errors every operation can return400401403404422429500Error catalog
Also available in
GET/tools/cost
Estimate what Nextmail costs for a usage
Prices every plan for the usage you describe, as the cost calculator on the Nextmail website does: the plan itself, the extra sends and AI actions it would bill, the monthly total, and whether the plan fits at all. A plan does not fit when the usage needs more domains than it includes, more than one person without team access, or more sends than it allows without billing extra. cheapest names the cheapest plan that fits.
Amounts are in US cents per month. With interval set to year, the plan price is the monthly equivalent of paying yearly.
Needs no scope: any key or access token for the workspace may run it.
Query parameters
sendsintegerEmails sent in a month. Defaults to 0.
At least 0At most 1000000000domainsintegerDomains you send from. Defaults to 1.
At least 0At most 1000000peopleintegerPeople who use the workspace. Defaults to 1.
At least 1At most 1000000aiActionsintegerAI actions in a day, such as drafts, rewrites and summaries. Defaults to 0.
At least 0At most 10000000intervalstringHow you pay:
monthoryear. Defaults tomonth.One of"month""year"
Returns
Every plan priced for the usage, and the cheapest one that fits.
Errors
The errors every operation can return400401403404422429500Error catalog
Also available in
Objects
AddressCheckobject
objectstringRequired- One of
"address_check" emailstringRequiredThe address as it was sent.
normalizedstringRequiredThe address lower-cased, with an international domain in its ASCII form. Null when the syntax is wrong.
Can be nullresultstringRequiredvalidis safe to send to,riskymay bounce or annoy,invalidwill not be delivered, andunknownmeans DNS did not answer.One of"valid""risky""invalid""unknown"reasonsstring[]RequiredWhy the result is not
valid. Empty for a valid address.One of"invalid_syntax""domain_not_found""no_mail_server""null_mx""no_mx_record""dns_unreachable""disposable""role_address""typo_suspected""suppressed""bounced_before""mailbox_not_found""mailbox_uncertain""random_input"suggestionstringRequiredThe address with a likely typo in its domain corrected, or null.
Can be nullchecksobjectRequiredsyntaxbooleanRequiredmxobjectRequiredstatusstringRequiredfoundhas mail servers,implicithas none but the domain itself answers,missing,null_mxanddomain_not_foundtake no mail, andunknownmeans DNS did not answer.One of"found""implicit""missing""null_mx""domain_not_found""unknown"hostsstring[]Required
nullMxbooleanRequiredThe domain says it takes no mail.
disposablebooleanRequiredA throwaway mailbox domain.
rolebooleanRequiredA shared address such as
info@orsupport@.freeProviderbooleanRequiredA public mailbox provider such as Gmail.
mailboxobjectRequiredOnly with
deep: how sure the mailbox check is. Null otherwise.Can be nullexistsstringRequired- One of
"high""medium""low" validstringRequired- One of
"high""medium""low" randomInputstringRequired- One of
"high""medium""low"
workspaceobjectRequiredWhat this workspace knows about the address. Null without the
emails:readscope.Can be nullsuppressedbooleanRequiredlastBouncedAtstringRequired- Can be nullFormat
date-time lastDeliveredAtstringRequired- Can be nullFormat
date-time
checkedAtstringRequired- Format
date-time
AddressCheckListobject
objectstringRequired- One of
"list" dataAddressCheck[]Required
BimiReportobject
objectstringRequired- One of
"bimi_report" domainstringRequiredrecordstringRequiredThe BIMI record at
default._bimi, or null.Can be nullversionstring- Can be null
logoUrlstringThe
l=of the record: where the SVG logo is served.Can be nullauthorityUrlstringThe
a=of the record: where the mark certificate is served, or null without one.Can be nulllogoSvgstringThe logo as it was fetched, when it could be, to show it.
Can be nulllogoReachablebooleandmarcPolicystringThe
p=of the DMARC record beside it.Can be nulldmarcEnforcedbooleanWhether that policy is
quarantineorreject, the only ones under which a logo is drawn.statusstringRequired- One of
"present""partial""absent""invalid" issuesstring[]Required
CostEstimateobject
objectstringRequired- One of
"cost_estimate" intervalstringRequired- One of
"month""year" needobjectRequiredThe usage that was priced, with the defaults filled in.
sendsintegerRequireddomainsintegerRequiredpeopleintegerRequiredaiActionsintegerRequired
plansPlanEstimate[]RequiredcheapeststringRequiredThe id of the cheapest plan that fits, or null when none does.
Can be null
DeliverabilityCheckobject
idstringRequired- One of
"mx""spf""dkim""dmarc""bimi" labelstringRequiredstatusstringRequired- One of
"pass""warn""fail""absent" verdictstringRequiredOne line saying what was found.
recordstringRequiredThe record that was read, when there is one.
Can be nullnotesstring[]Required
DeliverabilityReportobject
objectstringRequired- One of
"deliverability_report" domainstringRequiredscoreintegerRequired- At least 0At most 100
gradestringRequired- One of
"A""B""C""D""F" providerstringRequiredThe mail provider its MX records point at, such as
Google Workspace, when it is known.Can be nullchecksDeliverabilityCheck[]Required
DmarcReportobject
objectstringRequired- One of
"dmarc_report" domainstringRequiredThe domain that was checked, lower-cased.
recordstringRequiredThe DMARC record as published, or null when there is none.
Can be nullinheritedFromstringRequiredThe parent domain whose record applies, when the domain has none of its own. Null when the record is its own or there is none.
Can be nulltagsRecord<string, string>RequiredEvery tag of the record, such as
p,sp,pctandrua, as written.stagestringRequired- One of
"missing""invalid""monitor""quarantine""reject" issuesstring[]RequiredProblems found, each written to be shown to a person. Empty when there are none.
PlanEstimateobject
objectstringRequired- One of
"plan_estimate" planstringRequired- One of
"free""starter""business""enterprise" namestringRequiredThe plan as it is named on the pricing page.
fitsbooleanRequiredWhether the plan can carry the usage at all. False when
blockersnames anything.blockersstring[]RequiredWhat the plan cannot carry:
domainsbeyond the ones it includes,peoplewithout team access, orsendsbeyond its limit on a plan that bills no extra sends.One of"domains""people""sends"baseCentsintegerRequiredThe plan price per month, or its monthly equivalent when paid yearly.
extraSendsintegerRequiredSends beyond what the plan includes in a month.
sendsCentsintegerRequiredWhat those extra sends cost in a month.
extraAiActionsintegerRequiredAI actions beyond what the plan includes, over a 30-day month.
aiCentsintegerRequiredWhat those extra AI actions cost in a month.
extrasCentsintegerRequiredsendsCentsandaiCentstogether.totalCentsintegerRequiredThe plan price and the extras: what a month costs.
VerificationCodeResultobject
objectstringRequired- One of
"verification_code" codestringRequiredThe code as you would type it, or null when the message holds no code the reader is sure of.
Can be null