Start a run
const url = 'https://api.proxymail.qa/v1/runs';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"Run","source":"ci","meta":{"repository":"acme/web","branch":"example","commit":"example","pull_request":1,"workflow":"example","job_url":"https://example.com","agent":"Claude Code"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.proxymail.qa/v1/runs \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "Run", "source": "ci", "meta": { "repository": "acme/web", "branch": "example", "commit": "example", "pull_request": 1, "workflow": "example", "job_url": "https://example.com", "agent": "Claude Code" } }'Groups a CI job or an agent session as one run, with a report for a pull request. Send its id in the Proxy-Mail-QA-Run header of later calls and each adds what it saw: addresses made, emails that arrived and how long after since, the code, a link’s site and path (never its query or anything that looks like a token), email checks, counts, and emails that never came or came when none should. Then finish it. Runs are kept 90 days, and the project’s people can open them in the app. The GitHub Action (https://proxymail.qa/docs/ci) does all of this for you.
Authorizations
Section titled “Authorizations”Request Body
Section titled “Request Body”object
Example
Sign-up testsWhere it runs. Default: agent for keys from an MCP sign-in, api for the rest.
object
Example
acme/webA commit hash.
An https:// link to the job.
Example
Claude CodeResponses
Section titled “Responses”The run
object
object
The run in the app.
object
What the run saw, oldest first. Not in lists.
object
Email: type, subtype, service, received_at, after_seconds, and code or link and goes_to ({ site, path }). missing: what was waited for and hint. none: arrived, since, until. count: count. checks: passed, failed, warnings and notes. note: text.
object
Example
{ "source": "ci", "status": "running", "events": [ { "kind": "address" } ]}An error
object
Example generated
{ "error": "example", "message": "example"}