[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"api-page:email-verification-smtp-proof":3},{"status":4,"api":5,"seo":304},"success",{"blocked":6,"description":7,"about":8,"stats":9,"name":11,"title":12,"slug":13,"logo":14,"created_at":15,"agent":16,"user":28,"endpoint_groups":31,"faqs":243,"features":253,"periodic_plans":254,"payasyougo_plans":300,"releases":301,"last_updated":302,"createdAtText":303},false,"Live SMTP mailbox checks that say deliverable only with proof. Catch-all, role and opaque providers come back as risky or unknown with a machine-readable reason - no guessing.","Email verification API with a live SMTP mailbox check: detects invalid and non-existent addresses, catch-all (accept-all) domains, disposable and temporary email, role accounts and domain typos — lowering bounce rate and protecting sender reputation. Answers deliverable only when it has proof. Where confirmation is impossible — Outlook and Yahoo never reveal it, catch-all domains accept everything, greylisting defers — the answer is risky or unknown with a machine-readable reason, not a guess dressed up as a fact.",{"score":10},"1.87","Email Verification with Live SMTP Proof","Email Verification with Live SMTP Proof API","email-verification-smtp-proof","https://cdn.jojapi.com/api/b5bd4c39-629d-48c3-8ed3-c8b963f41d88","2026-10-06 12:24:26",{"enabled":17,"closed":18,"request_enabled":6,"catalog_url":19,"discovery_url":20,"directory_url":21,"rails":22,"networks":25,"docs":27},true,null,"https://apsqq.jojapi.net/_jojapi/agent/plans","https://apsqq.jojapi.net/.well-known/x402","https://agents.jojapi.net/apis/email-verification-smtp-proof",[23,24],"x402","mpp",[26],"eip155:8453","https://docs.jojapi.com/consumers/agents",{"nick":29,"name":30,"verified":6,"website":18},"user-uoqozq","Олег Звичайний",[32],{"endpoints":33,"name":242,"description":40,"ungrouped":17},[34,106,156,193,224],{"blocked":6,"hidden":6,"deprecation":18,"agent_price":18,"credits":18,"flexible_credits_description":18,"consumptions":35,"description":41,"method":42,"name":43,"url_path":44,"root_url":45,"parameters":46,"responses":62,"result_stats":18},[36],{"name":37,"slug":38,"cost":39,"label":40,"avg":18},"Verifications","verifications","1","","Same check as GET /v1/verify, with the address in a JSON body ({\"email\": \"...\"}). Use it when you prefer not to put addresses in URLs or logs.","POST","Verify one address","/v1/verify","https://apsqq.jojapi.net",{"url":47,"header":48,"post":55,"body":56,"path":61},[],[49],{"key":50,"is_auth":17,"example":51,"example_disabled":17,"example_type":52,"name":53,"description":51,"required":17,"always_error":54},"X-JoJAPI-Key","You must log in to get API key","string","JoJ API Key","Please log in to get API key",[],[57],{"key":18,"example":58,"schema":59,"example_disabled":6,"example_type":52,"value_type":52,"enum_values":18,"default_value":40,"required":6,"name":18,"description":60},"{}","{\"type\":\"object\",\"required\":[\"email\"],\"properties\":{\"email\":{\"type\":\"string\",\"example\":\"someone@example.com\"},\"policy\":{\"type\":\"string\",\"enum\":[\"honest\",\"lenient\"],\"default\":\"honest\"},\"smtp\":{\"type\":\"boolean\",\"default\":true},\"wait\":{\"type\":\"boolean\",\"default\":true}}}","''",[],[63,69,78,85,92,99],{"status":64,"status_code":65,"description":66,"schema":67,"examples":68,"example":40},"200",200,"Verdict. A non-2xx status means the request failed, never that the mailbox is bad.","{\"type\":\"object\",\"required\":[\"email\",\"normalized\",\"verdict\",\"reason\",\"confidence\",\"mailbox_verified\",\"suggestion\",\"provider\",\"checks\",\"took_ms\"],\"properties\":{\"email\":{\"type\":\"string\",\"description\":\"The address as submitted, trimmed.\"},\"normalized\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Lower-cased address with the domain in ASCII. null when the address did not parse.\"},\"verdict\":{\"type\":\"string\",\"enum\":[\"deliverable\",\"undeliverable\",\"risky\",\"unknown\"],\"description\":\"deliverable is returned only when an SMTP probe confirmed the mailbox. Everything else that cannot be proven is risky or unknown, with the reason below.\"},\"reason\":{\"type\":\"string\",\"enum\":[\"bad_syntax\",\"null_mx\",\"dns_error\",\"domain_typo\",\"no_mx_record\",\"disposable_domain\",\"catch_all_domain\",\"probe_deferred\",\"smtp_unreachable\",\"mailbox_exists\",\"mailbox_not_found\",\"mailbox_unconfirmed\",\"greylisted\",\"role_account\",\"opaque_provider\"],\"description\":\"Machine-readable reason for the verdict. Branch on this field, not on the prose.\"},\"confidence\":{\"type\":\"number\",\"format\":\"float\",\"minimum\":0,\"maximum\":1,\"description\":\"How much the reason is worth, 0..1. Fixed per reason, not a guess.\"},\"mailbox_verified\":{\"type\":\"boolean\",\"description\":\"true only when a live SMTP dialogue accepted this exact recipient.\"},\"suggestion\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Corrected address when the domain looks like a typo of a popular one.\"},\"provider\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Known mail provider behind the domain, when recognised.\"},\"checks\":{\"type\":\"object\",\"description\":\"What each stage of the pipeline found. Present on every response.\",\"required\":[\"syntax\",\"mx\",\"disposable\",\"role\",\"free\",\"catch_all\",\"mailbox\"],\"properties\":{\"syntax\":{\"type\":\"boolean\",\"description\":\"The address parsed.\"},\"mx\":{\"description\":\"false before the MX lookup ran or when it found nothing; otherwise up to three hosts.\",\"oneOf\":[{\"type\":\"boolean\",\"enum\":[false]},{\"type\":\"array\",\"items\":{\"type\":\"string\"}}]},\"disposable\":{\"type\":\"boolean\",\"description\":\"Domain is a known throwaway-mail provider.\"},\"role\":{\"type\":\"boolean\",\"description\":\"Local part is a role account (info@, support@, \\u2026).\"},\"free\":{\"type\":\"boolean\",\"description\":\"Domain is a known free-mail provider.\"},\"catch_all\":{\"type\":\"boolean\",\"nullable\":true,\"description\":\"true when the domain accepts every recipient, false when it does not, null when it was never established. The three states are distinct on purpose.\"},\"mailbox\":{\"type\":\"string\",\"enum\":[\"accepted\",\"rejected\",\"catch_all\",\"greylisted\",\"inconclusive\",\"blocked\",\"unreachable\",\"deferred\",\"skipped\"],\"description\":\"Outcome of the SMTP probe, or skipped when it did not run.\"}}},\"took_ms\":{\"type\":\"number\",\"format\":\"float\",\"description\":\"Server-side duration in milliseconds.\"},\"retry_after_ms\":{\"type\":\"integer\",\"description\":\"Present only with reason probe_deferred: how long until the probe is worth retrying.\"},\"note\":{\"type\":\"string\",\"description\":\"Extra detail: the syntax error code for bad_syntax, or the remote server text for a probe result.\"},\"cached\":{\"type\":\"boolean\",\"enum\":[true],\"description\":\"Present when the answer came from a stored probe result rather than a fresh dialogue.\"}}}",[],{"status":70,"status_code":71,"description":72,"schema":73,"examples":74,"example":77},"400",400,"Missing or malformed request.","{\"type\":\"object\",\"required\":[\"error\",\"message\"],\"properties\":{\"error\":{\"type\":\"string\",\"description\":\"Machine-readable code. Branch on this.\"},\"message\":{\"type\":\"string\",\"description\":\"Human-readable explanation.\"}}}",[75],{"name":76,"summary":40,"description":40,"example":77},"default","{\"error\":\"missing_email\",\"message\":\"Human-readable explanation.\"}",{"status":79,"status_code":80,"description":81,"schema":73,"examples":82,"example":84},"401",401,"Missing or unknown API key.",[83],{"name":76,"summary":40,"description":40,"example":84},"{\"error\":\"missing_api_key\",\"message\":\"Human-readable explanation.\"}",{"status":86,"status_code":87,"description":88,"schema":73,"examples":89,"example":91},"404",404,"No such route.",[90],{"name":76,"summary":40,"description":40,"example":91},"{\"error\":\"not_found\",\"message\":\"Human-readable explanation.\"}",{"status":93,"status_code":94,"description":95,"schema":73,"examples":96,"example":98},"413",413,"Request body too large.",[97],{"name":76,"summary":40,"description":40,"example":98},"{\"error\":\"body_too_large\",\"message\":\"Human-readable explanation.\"}",{"status":100,"status_code":101,"description":102,"schema":73,"examples":103,"example":105},"500",500,"Unexpected server error.",[104],{"name":76,"summary":40,"description":40,"example":105},"{\"error\":\"internal_error\",\"message\":\"Human-readable explanation.\"}",{"blocked":6,"hidden":6,"deprecation":18,"agent_price":18,"credits":18,"flexible_credits_description":18,"consumptions":107,"description":109,"method":110,"name":111,"url_path":44,"root_url":45,"parameters":112,"responses":138,"result_stats":18},[108],{"name":37,"slug":38,"cost":39,"label":40,"avg":18},"Verify a single address with a live SMTP dialogue. Returns a verdict (deliverable / undeliverable / risky / unknown) with a machine-readable reason; mailbox_verified is true only when the mailbox was confirmed by the SMTP check, never by guessing. Pass the address in the email query parameter.","GET","Verify one address (query string)",{"url":113,"header":133,"post":135,"body":136,"path":137},[114,117,124,129],{"key":115,"example":40,"schema":18,"example_disabled":6,"example_type":52,"value_type":52,"enum_values":18,"default_value":40,"required":17,"name":40,"description":116},"email","The address to check.",{"key":118,"example":40,"schema":18,"example_disabled":6,"example_type":52,"value_type":119,"enum_values":120,"default_value":121,"required":6,"name":40,"description":123},"policy","enum",[121,122],"honest","lenient","honest (default) never calls an unproven mailbox deliverable. lenient downgrades opaque providers such as Gmail and Outlook to deliverable with mailbox_verified false — use it only if you knowingly accept the guess.",{"key":125,"example":40,"schema":18,"example_disabled":6,"example_type":52,"value_type":119,"enum_values":126,"default_value":39,"required":6,"name":40,"description":128},"smtp",[39,127],"0","Set to 0 to skip the SMTP probe entirely. Faster, and never returns deliverable.",{"key":130,"example":40,"schema":18,"example_disabled":6,"example_type":52,"value_type":119,"enum_values":131,"default_value":39,"required":6,"name":40,"description":132},"wait",[39,127],"On by default. Probes are queued per destination mail server, so a request may have to wait a few seconds for its turn. Waiting usually beats being told to come back later. Set to 0 to get probe_deferred immediately instead, with retry_after_ms telling you when to retry.",[134],{"key":50,"is_auth":17,"example":51,"example_disabled":17,"example_type":52,"name":53,"description":51,"required":17,"always_error":54},[],[],[],[139,141,144,147,150,153],{"status":64,"status_code":65,"description":66,"schema":67,"examples":140,"example":40},[],{"status":70,"status_code":71,"description":72,"schema":73,"examples":142,"example":77},[143],{"name":76,"summary":40,"description":40,"example":77},{"status":79,"status_code":80,"description":81,"schema":73,"examples":145,"example":84},[146],{"name":76,"summary":40,"description":40,"example":84},{"status":86,"status_code":87,"description":88,"schema":73,"examples":148,"example":91},[149],{"name":76,"summary":40,"description":40,"example":91},{"status":93,"status_code":94,"description":95,"schema":73,"examples":151,"example":98},[152],{"name":76,"summary":40,"description":40,"example":98},{"status":100,"status_code":101,"description":102,"schema":73,"examples":154,"example":105},[155],{"name":76,"summary":40,"description":40,"example":105},{"blocked":6,"hidden":6,"deprecation":18,"agent_price":18,"credits":18,"flexible_credits_description":18,"consumptions":157,"description":160,"method":42,"name":161,"url_path":162,"root_url":45,"parameters":163,"responses":172,"result_stats":18},[158],{"name":37,"slug":38,"cost":159,"label":40,"avg":18},"{{response.json.total}}","Accepts up to 1000 addresses and returns immediately with a job id. Nothing is verified yet: probing is rate-limited per destination mail server on purpose, so a long list takes hours rather than seconds. Poll the job to collect results as they land. Duplicates and blanks are dropped before the job is created, so total may be smaller than what you sent.","Submit a list for verification","/v1/verify/batch",{"url":164,"header":165,"post":167,"body":168,"path":171},[],[166],{"key":50,"is_auth":17,"example":51,"example_disabled":17,"example_type":52,"name":53,"description":51,"required":17,"always_error":54},[],[169],{"key":18,"example":58,"schema":170,"example_disabled":6,"example_type":52,"value_type":52,"enum_values":18,"default_value":40,"required":6,"name":18,"description":60},"{\"type\":\"object\",\"required\":[\"emails\"],\"properties\":{\"emails\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"maxItems\":1000,\"example\":[\"someone@example.com\",\"other@example.org\"]}}}",[],[173,179,184,187,190],{"status":174,"status_code":175,"description":176,"schema":177,"examples":178,"example":40},"202",202,"Accepted. The work is queued, not done.","{\"description\":\"A batch job. Which fields are present depends on status: a queued job has no results yet, and only a failed one carries an error.\",\"oneOf\":[{\"type\":\"object\",\"required\":[\"id\",\"status\",\"total\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Job id, as returned on submit.\"},\"status\":{\"type\":\"string\",\"enum\":[\"queued\"]},\"total\":{\"type\":\"integer\",\"description\":\"Addresses accepted after dropping blanks and duplicates.\"}}},{\"type\":\"object\",\"required\":[\"id\",\"status\",\"total\",\"done\",\"results\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Job id, as returned on submit.\"},\"status\":{\"type\":\"string\",\"enum\":[\"running\"]},\"total\":{\"type\":\"integer\",\"description\":\"Addresses accepted after dropping blanks and duplicates.\"},\"done\":{\"type\":\"integer\",\"description\":\"How many of them are settled.\"},\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"email\",\"normalized\",\"verdict\",\"reason\",\"confidence\",\"mailbox_verified\",\"suggestion\",\"provider\",\"checks\",\"took_ms\"],\"properties\":{\"email\":{\"type\":\"string\",\"description\":\"The address as submitted, trimmed.\"},\"normalized\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Lower-cased address with the domain in ASCII. null when the address did not parse.\"},\"verdict\":{\"type\":\"string\",\"enum\":[\"deliverable\",\"undeliverable\",\"risky\",\"unknown\"],\"description\":\"deliverable is returned only when an SMTP probe confirmed the mailbox. Everything else that cannot be proven is risky or unknown, with the reason below.\"},\"reason\":{\"type\":\"string\",\"enum\":[\"bad_syntax\",\"null_mx\",\"dns_error\",\"domain_typo\",\"no_mx_record\",\"disposable_domain\",\"catch_all_domain\",\"probe_deferred\",\"smtp_unreachable\",\"mailbox_exists\",\"mailbox_not_found\",\"mailbox_unconfirmed\",\"greylisted\",\"role_account\",\"opaque_provider\"],\"description\":\"Machine-readable reason for the verdict. Branch on this field, not on the prose.\"},\"confidence\":{\"type\":\"number\",\"format\":\"float\",\"minimum\":0,\"maximum\":1,\"description\":\"How much the reason is worth, 0..1. Fixed per reason, not a guess.\"},\"mailbox_verified\":{\"type\":\"boolean\",\"description\":\"true only when a live SMTP dialogue accepted this exact recipient.\"},\"suggestion\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Corrected address when the domain looks like a typo of a popular one.\"},\"provider\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Known mail provider behind the domain, when recognised.\"},\"checks\":{\"type\":\"object\",\"description\":\"What each stage of the pipeline found. Present on every response.\",\"required\":[\"syntax\",\"mx\",\"disposable\",\"role\",\"free\",\"catch_all\",\"mailbox\"],\"properties\":{\"syntax\":{\"type\":\"boolean\",\"description\":\"The address parsed.\"},\"mx\":{\"description\":\"false before the MX lookup ran or when it found nothing; otherwise up to three hosts.\",\"oneOf\":[{\"type\":\"boolean\",\"enum\":[false]},{\"type\":\"array\",\"items\":{\"type\":\"string\"}}]},\"disposable\":{\"type\":\"boolean\",\"description\":\"Domain is a known throwaway-mail provider.\"},\"role\":{\"type\":\"boolean\",\"description\":\"Local part is a role account (info@, support@, \\u2026).\"},\"free\":{\"type\":\"boolean\",\"description\":\"Domain is a known free-mail provider.\"},\"catch_all\":{\"type\":\"boolean\",\"nullable\":true,\"description\":\"true when the domain accepts every recipient, false when it does not, null when it was never established. The three states are distinct on purpose.\"},\"mailbox\":{\"type\":\"string\",\"enum\":[\"accepted\",\"rejected\",\"catch_all\",\"greylisted\",\"inconclusive\",\"blocked\",\"unreachable\",\"deferred\",\"skipped\"],\"description\":\"Outcome of the SMTP probe, or skipped when it did not run.\"}}},\"took_ms\":{\"type\":\"number\",\"format\":\"float\",\"description\":\"Server-side duration in milliseconds.\"},\"retry_after_ms\":{\"type\":\"integer\",\"description\":\"Present only with reason probe_deferred: how long until the probe is worth retrying.\"},\"note\":{\"type\":\"string\",\"description\":\"Extra detail: the syntax error code for bad_syntax, or the remote server text for a probe result.\"},\"cached\":{\"type\":\"boolean\",\"enum\":[true],\"description\":\"Present when the answer came from a stored probe result rather than a fresh dialogue.\"}}},\"description\":\"Verdicts proven so far, in the order the addresses were submitted.\"}}},{\"type\":\"object\",\"required\":[\"id\",\"status\",\"total\",\"results\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Job id, as returned on submit.\"},\"status\":{\"type\":\"string\",\"enum\":[\"completed\"]},\"total\":{\"type\":\"integer\",\"description\":\"Addresses accepted after dropping blanks and duplicates.\"},\"results\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"email\",\"normalized\",\"verdict\",\"reason\",\"confidence\",\"mailbox_verified\",\"suggestion\",\"provider\",\"checks\",\"took_ms\"],\"properties\":{\"email\":{\"type\":\"string\",\"description\":\"The address as submitted, trimmed.\"},\"normalized\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Lower-cased address with the domain in ASCII. null when the address did not parse.\"},\"verdict\":{\"type\":\"string\",\"enum\":[\"deliverable\",\"undeliverable\",\"risky\",\"unknown\"],\"description\":\"deliverable is returned only when an SMTP probe confirmed the mailbox. Everything else that cannot be proven is risky or unknown, with the reason below.\"},\"reason\":{\"type\":\"string\",\"enum\":[\"bad_syntax\",\"null_mx\",\"dns_error\",\"domain_typo\",\"no_mx_record\",\"disposable_domain\",\"catch_all_domain\",\"probe_deferred\",\"smtp_unreachable\",\"mailbox_exists\",\"mailbox_not_found\",\"mailbox_unconfirmed\",\"greylisted\",\"role_account\",\"opaque_provider\"],\"description\":\"Machine-readable reason for the verdict. Branch on this field, not on the prose.\"},\"confidence\":{\"type\":\"number\",\"format\":\"float\",\"minimum\":0,\"maximum\":1,\"description\":\"How much the reason is worth, 0..1. Fixed per reason, not a guess.\"},\"mailbox_verified\":{\"type\":\"boolean\",\"description\":\"true only when a live SMTP dialogue accepted this exact recipient.\"},\"suggestion\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Corrected address when the domain looks like a typo of a popular one.\"},\"provider\":{\"type\":\"string\",\"nullable\":true,\"description\":\"Known mail provider behind the domain, when recognised.\"},\"checks\":{\"type\":\"object\",\"description\":\"What each stage of the pipeline found. Present on every response.\",\"required\":[\"syntax\",\"mx\",\"disposable\",\"role\",\"free\",\"catch_all\",\"mailbox\"],\"properties\":{\"syntax\":{\"type\":\"boolean\",\"description\":\"The address parsed.\"},\"mx\":{\"description\":\"false before the MX lookup ran or when it found nothing; otherwise up to three hosts.\",\"oneOf\":[{\"type\":\"boolean\",\"enum\":[false]},{\"type\":\"array\",\"items\":{\"type\":\"string\"}}]},\"disposable\":{\"type\":\"boolean\",\"description\":\"Domain is a known throwaway-mail provider.\"},\"role\":{\"type\":\"boolean\",\"description\":\"Local part is a role account (info@, support@, \\u2026).\"},\"free\":{\"type\":\"boolean\",\"description\":\"Domain is a known free-mail provider.\"},\"catch_all\":{\"type\":\"boolean\",\"nullable\":true,\"description\":\"true when the domain accepts every recipient, false when it does not, null when it was never established. The three states are distinct on purpose.\"},\"mailbox\":{\"type\":\"string\",\"enum\":[\"accepted\",\"rejected\",\"catch_all\",\"greylisted\",\"inconclusive\",\"blocked\",\"unreachable\",\"deferred\",\"skipped\"],\"description\":\"Outcome of the SMTP probe, or skipped when it did not run.\"}}},\"took_ms\":{\"type\":\"number\",\"format\":\"float\",\"description\":\"Server-side duration in milliseconds.\"},\"retry_after_ms\":{\"type\":\"integer\",\"description\":\"Present only with reason probe_deferred: how long until the probe is worth retrying.\"},\"note\":{\"type\":\"string\",\"description\":\"Extra detail: the syntax error code for bad_syntax, or the remote server text for a probe result.\"},\"cached\":{\"type\":\"boolean\",\"enum\":[true],\"description\":\"Present when the answer came from a stored probe result rather than a fresh dialogue.\"}}},\"description\":\"Verdicts proven so far, in the order the addresses were submitted.\"}}},{\"type\":\"object\",\"required\":[\"id\",\"status\",\"error\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Job id, as returned on submit.\"},\"status\":{\"type\":\"string\",\"enum\":[\"failed\"]},\"error\":{\"type\":\"string\",\"description\":\"Why the job could not be run at all.\"}}}]}",[],{"status":70,"status_code":71,"description":180,"schema":73,"examples":181,"example":183},"Empty list, or more addresses than a batch takes.",[182],{"name":76,"summary":40,"description":40,"example":183},"{\"error\":\"batch_too_large\",\"message\":\"Human-readable explanation.\"}",{"status":79,"status_code":80,"description":81,"schema":73,"examples":185,"example":84},[186],{"name":76,"summary":40,"description":40,"example":84},{"status":93,"status_code":94,"description":95,"schema":73,"examples":188,"example":98},[189],{"name":76,"summary":40,"description":40,"example":98},{"status":100,"status_code":101,"description":102,"schema":73,"examples":191,"example":105},[192],{"name":76,"summary":40,"description":40,"example":105},{"blocked":6,"hidden":6,"deprecation":18,"agent_price":18,"credits":18,"flexible_credits_description":18,"consumptions":194,"description":196,"method":110,"name":197,"url_path":198,"root_url":45,"parameters":199,"responses":209,"result_stats":18},[195],{"name":37,"slug":38,"cost":127,"label":40,"avg":18},"Results appear as they are proven, so a running job already carries everything settled so far. A job belongs to the key that created it; another key gets the same 404 as a job that never existed.","Collect a batch","/v1/verify/batch/{id}",{"url":200,"header":201,"post":203,"body":204,"path":205},[],[202],{"key":50,"is_auth":17,"example":51,"example_disabled":17,"example_type":52,"name":53,"description":51,"required":17,"always_error":54},[],[],[206],{"key":207,"example":40,"example_disabled":6,"example_type":52,"value_type":52,"enum_values":18,"name":40,"description":208,"required":17},"id","The id returned when the batch was submitted.",[210,213,216,221],{"status":64,"status_code":65,"description":211,"schema":177,"examples":212,"example":40},"Current state of the job.",[],{"status":79,"status_code":80,"description":81,"schema":73,"examples":214,"example":84},[215],{"name":76,"summary":40,"description":40,"example":84},{"status":86,"status_code":87,"description":217,"schema":73,"examples":218,"example":220},"No such job, or it belongs to another key.",[219],{"name":76,"summary":40,"description":40,"example":220},"{\"error\":\"job_not_found\",\"message\":\"Human-readable explanation.\"}",{"status":100,"status_code":101,"description":102,"schema":73,"examples":222,"example":105},[223],{"name":76,"summary":40,"description":40,"example":105},{"blocked":6,"hidden":6,"deprecation":18,"agent_price":18,"credits":18,"flexible_credits_description":18,"consumptions":225,"description":227,"method":110,"name":228,"url_path":229,"root_url":45,"parameters":230,"responses":237,"result_stats":18},[226],{"name":37,"slug":38,"cost":127,"label":40,"avg":18},"Service health: whether the SMTP probe is enabled and the sizes of the disposable, free-provider and role lists. Free, not billed.","Service state","/health",{"url":231,"header":232,"post":234,"body":235,"path":236},[],[233],{"key":50,"is_auth":17,"example":51,"example_disabled":17,"example_type":52,"name":53,"description":51,"required":17,"always_error":54},[],[],[],[238],{"status":64,"status_code":65,"description":239,"schema":240,"examples":241,"example":40},"Whether the probe is on, where knowledge is stored, and whether a key is required.","{\"type\":\"object\",\"properties\":{\"ok\":{\"type\":\"boolean\"},\"service\":{\"type\":\"string\"},\"smtp_probe\":{\"type\":\"boolean\"},\"store\":{\"type\":\"string\",\"enum\":[\"postgres\",\"memory\"]},\"auth\":{\"type\":\"boolean\"}}}",[],"Ungrouped Endpoints",[244,247,250],{"question":245,"answer":246},"Why do I get risky or unknown instead of valid?","Because we only say deliverable when a live SMTP check proved the mailbox exists. Catch-all domains accept every address, and providers such as Outlook and Yahoo never reveal whether a mailbox exists. Instead of guessing, we return risky or unknown with a machine-readable reason, so you can decide how to treat those addresses.",{"question":248,"answer":249},"Does the check send an email to the address?","No. The SMTP dialogue stops before any message is transmitted: we ask the recipient's server whether it would accept the address and disconnect. Nothing lands in the inbox.",{"question":251,"answer":252},"How is the batch endpoint billed?","One verification per address in the submitted list. Fetching batch results and the health endpoint are free.",[],[255,270,280,290],{"type":256,"slug":257,"blocked":6,"period":258,"currency":259,"pricing":260,"rate_limit":264,"objects":265,"name":268,"display_name":268,"features":269},"periodic","ypia1g9y7iyazkdz83w0ny8v","1 MONTH","usd",{"price":261,"credits":261,"past_due_timeout_num":262,"past_due_timeout_type":263},0,3,"DAY",{"max_requests":18,"time_window":18},[266],{"id":267,"name":37,"slug":38,"quota":101,"tiers":18},"n14c9b85b","Free",[],{"type":256,"slug":271,"blocked":6,"period":258,"currency":259,"pricing":272,"rate_limit":274,"objects":275,"name":278,"display_name":278,"features":279},"b1xajqsyc7vl9l5iab6zb8dw",{"price":273,"credits":261,"past_due_timeout_num":262,"past_due_timeout_type":263},9,{"max_requests":18,"time_window":18},[276],{"id":267,"name":37,"slug":38,"quota":277,"tiers":18},2500,"Pro",[],{"type":256,"slug":281,"blocked":6,"period":258,"currency":259,"pricing":282,"rate_limit":284,"objects":285,"name":288,"display_name":288,"features":289},"1pr37g0gzce9x6hwpdyws9cd",{"price":283,"credits":261,"past_due_timeout_num":262,"past_due_timeout_type":263},29,{"max_requests":18,"time_window":18},[286],{"id":267,"name":37,"slug":38,"quota":287,"tiers":18},10000,"Ultra",[],{"type":256,"slug":291,"blocked":6,"period":258,"currency":259,"pricing":292,"rate_limit":294,"objects":295,"name":298,"display_name":298,"features":299},"60hxadpj0mnlqwd9v323ygln",{"price":293,"credits":261,"past_due_timeout_num":262,"past_due_timeout_type":263},99,{"max_requests":18,"time_window":18},[296],{"id":267,"name":37,"slug":38,"quota":297,"tiers":18},50000,"Mega",[],[],[],"2026-10-16 18:32:40","2026-10-06",{"canonical":305,"page_title":306,"meta":307},"https://jojapi.com/hub/api/email-verification-smtp-proof","Email Verification with Live SMTP Proof API Documentation & Playground - JoJ API",{"description":7,"keywords":308},"API,API Documentation,API Playground,Plans & Pricing,Email Verification with Live SMTP Proof,user-uoqozq"]