Check an email
const url = 'https://api.proxymail.qa/v1/addresses/k7f2x9ab12cd%40mailclub.dev/checks?expect_host=staging.example.com&expect_text=Welcome%2C%20Maya&expect_language=de&type=code';const options = { method: 'GET', headers: { 'Proxy-Mail-QA-Test': 'sign-up%20%E2%80%BA%20sends%20one%20code', Authorization: 'Bearer <token>' }};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.proxymail.qa/v1/addresses/k7f2x9ab12cd%40mailclub.dev/checks?expect_host=staging.example.com&expect_text=Welcome%2C%20Maya&expect_language=de&type=code' \ --header 'Authorization: Bearer <token>' \ --header 'Proxy-Mail-QA-Test: sign-up%20%E2%80%BA%20sends%20one%20code'Runs checks on one email the address received: the one named by email_id, or the newest matching the filters. Doesn’t wait: wait for the email first (/code, /link or /count). Each check passes, fails, warns or is skipped, with a one-line reason: SPF, DKIM and DMARC (the receiving server’s verdicts), links to localhost or a private address (also after a redirect), plain http links, the site its sign-in, verify, reset or invite link goes to (expect_host), whether it says when its code or link expires, a plain-text version, the HTML’s size against Gmail’s 102 KB limit, image-only emails, whether it fits a phone, and, when asked, given phrases (expect_text) and the language (expect_language). Verdicts only: never the email’s text or its links (reasons name at most a domain or a link’s host).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The test address, URL-encoded. A variant also works: capitals, or a +tag (k7f2x9ab12cd+o’brien@mailclub.dev). It acts on the plain address; waiting on a +tag variant, or listing its messages, only finds mail sent to that variant.
Example
k7f2x9ab12cd@mailclub.devQuery Parameters
Section titled “Query Parameters”The email to check, as /count gives it. Default: the newest that matches.
Only email received at or after this time.
The site its sign-in, verify, reset or invite link should go to, after any redirect (subdomains count). Without it, that check is skipped.
Example
staging.example.comA phrase the subject or body should contain; repeat for more (up to 10). Case, curly quotes and spacing don’t matter, and the answer names only the missing ones.
Example
?expect_text=Welcome%2C%20MayaThe language it should be in, such as de or pt-BR. Without it, that check is skipped.
Example
deOnly email from this service, by name or domain (e.g. ‘spotify’).
Only emails with a code, or with a link. Codes leave out coupons, and links count verify, magic_signin, invite and reset, unless subtype says otherwise.
With type, comma-separated: otp or coupon for codes; verify, magic_signin, invite, reset or other for links; or any.
Header Parameters
Section titled “Header Parameters”A run’s id (POST /v1/runs): adds what this call saw to the run. If it can’t be added (the run finished, or isn’t in this project), the call still works and the Proxy-Mail-QA-Run-Warning response header says why.
With Proxy-Mail-QA-Run: the test this call belongs to, percent-encoded (encodeURIComponent), up to 200 characters once decoded. The run’s report shows it beside what the call saw.
Example
sign-up%20%E2%80%BA%20sends%20one%20codeResponses
Section titled “Responses”The checks
object
Which email was checked, without its content.
object
Its main code or link.
No check failed. Warnings don’t count.
object
Example
{ "email": { "type": "code" }, "checks": [ { "check": "spf", "status": "pass", "detail": "The sending server is allowed to send for acme.example." } ]}An error
object
Example generated
{ "error": "example", "message": "example"}An error
object
Example generated
{ "error": "example", "message": "example"}