Count how many addresses look bad (free)
/api/v1/verifications/peekAbout how many of these addresses look bad — invalid, throwaway, or a full inbox we already know of — free, and never which ones. Nothing is probed: the count comes from what we already know and from checks that need no conversation with a mail server.
The answer is deliberately rough, so a free count never becomes a free answer:
band |
When | Numbers |
|---|---|---|
too_few |
fewer than 10 distinct addresses | none; we do not look |
fewer_than_10 |
fewer than 10 look bad | none |
about |
10 or more look bad | look_bad_about: rounded down to tens, or to two significant figures from 1,000 (12,873 → 12,000); look_bad_percent_about, rounded down |
partial: true means the checker could not be asked, so the count covers only broken
addresses, misspelt domains and domains that cannot receive mail.
Addresses are counted once, whatever their letter case. Up to 50,000 a request; more is
a 422. Free, but limited to 30 counts an hour and 100 a UTC day per account (then 429
with Retry-After); the same set again within 10 minutes is answered from memory and does
not count.
Request body
addressesarray<string>requiredThe addresses to count. `emails` is accepted as another name for it.
Request
/api/v1/verifications/peekcurl -X POST 'https://app.mailyte.com/api/v1/verifications/peek' \
-H 'Authorization: Bearer mk_live_YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"addresses": [
"ada@example.com",
"grace@example.org",
"…"
]
}'const response = await fetch('https://app.mailyte.com/api/v1/verifications/peek', {
method: 'POST',
headers: {
Authorization: 'Bearer mk_live_YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"addresses": [
"ada@example.com",
"grace@example.org",
"…"
]
}),
});
const { data } = await response.json();import requests
response = requests.post(
"https://app.mailyte.com/api/v1/verifications/peek",
headers={"Authorization": "Bearer mk_live_YOUR_API_KEY"},
json={
"addresses": [
"ada@example.com",
"grace@example.org",
"…"
]
},
)
data = response.json()["data"]<?php
$response = Http::withToken('mk_live_YOUR_API_KEY')
->post('https://app.mailyte.com/api/v1/verifications/peek', [
'addresses' => [
'ada@example.com',
'grace@example.org',
'…',
],
]);
$data = $response->json('data');require "net/http"
require "json"
uri = URI("https://app.mailyte.com/api/v1/verifications/peek")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer mk_live_YOUR_API_KEY"
request["Content-Type"] = "application/json"
request.body = {
"addresses": [
"ada@example.com",
"grace@example.org",
"…"
]
}.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
The count. Every accepted request answers 200, fewer than 10 addresses included.
dataobjectobjectstringaddress_counttotalintegerDistinct addresses counted.
bandstringtoo_few | fewer_than_10 | about`too_few`: fewer than 10 addresses, so we did not look. `fewer_than_10`: fewer than 10 look bad. `about`: 10 or more look bad, and the numbers say about how many.
look_bad_aboutintegerAbout how many look bad, rounded down (to tens; to two significant figures from 1,000). Null unless `band` is `about`.
look_bad_percent_aboutintegerThe same as a whole percentage of `total`, rounded down. Null unless `band` is `about`.
partialbooleanTrue when the checker could not be asked: only broken addresses, misspelt domains and domains that cannot receive mail were counted.
Returned inside the standard envelope.
Errors
| Status | When |
|---|---|
401 | The API key is missing, unknown, revoked or expired. All four answer identically, on purpose: distinguishing them would confirm which keys exist. |
403 | The key is valid but may not do this: it lacks the required scope, its IP allowlist does not include you, or this endpoint does not accept API keys. |
404 | No such resource in this organization. |
422 | The request was understood but the values were not acceptable. |
429 | Too many requests, or the organization has spent its sending allowance. `Retry-After` says how long to wait. |
Every status, with what causes it and what to do, is on the error reference.