MXcatch

REST API reference

Everything you can see in the dashboard (domains, aliases and received messages) is also available as JSON over HTTPS. The API is included in the Business and Scale plans.

Authentication

Create a key under Settings → API keys and send it as a bearer token. Keys start with mxc_, are shown once, and can be revoked at any time.

curl https://www.mxcatch.net/api/v1/domains \
  -H "Authorization: Bearer mxc_your_key_here"
StatusMeaning
401Missing, malformed or revoked key.
402The key's account is not on a plan with API access.
404The domain or message does not exist, or is not shared with you.
422Validation failed. The body lists the fields that failed.
429More than 120 requests in a minute. Back off and retry.

Domains

EndpointDescription
GET /api/v1/domainsAll domains you own or were invited to.
GET /api/v1/domains/{name}One domain, addressed by its name, e.g. /domains/acme.com.
{
  "data": {
    "name": "acme.com",
    "verified": true,
    "mx_healthy": true,
    "verified_at": "2026-10-02T08:11:45+00:00",
    "sending_enabled": false,
    "spam_action": "tag",
    "aliases_count": 4,
    "emails_count": 1290,
    "created_at": "2026-10-02T08:02:10+00:00"
  }
}

Aliases

EndpointDescription
GET /api/v1/domains/{name}/aliasesAliases with their actions.
POST /api/v1/domains/{name}/aliasesCreate an alias. Body: {"local_part": "billing"} or {"catch_all": true}.
DELETE /api/v1/domains/{name}/aliases/{id}Delete an alias. Returns 204.

Emails

EndpointDescription
GET /api/v1/emailsReceived messages, newest first, 25 per page.
GET /api/v1/emails/{id}One message with headers, text and HTML bodies, spam verdict and signed attachment URLs (valid 60 minutes).
DELETE /api/v1/emails/{id}Move a message to the trash. Returns 204.

Filters for GET /api/v1/emails, all optional:

ParameterExampleEffect
domainacme.comOnly this domain.
qinvoiceSearch subject, preview and sender.
from@stripe.comSender contains this text.
statusfailedOne of received, delivered, failed, filtered, partial.
spam01 for spam only, 0 to exclude it.
since / until2026-11-01Received at or after / before.
per_page1001–100.
{
  "data": [
    {
      "id": 48213,
      "domain": "acme.com",
      "from": { "address": "notify@stripe.com", "name": "Stripe" },
      "to": "billing@acme.com",
      "subject": "Invoice paid",
      "status": "delivered",
      "is_spam": false,
      "spam_score": 0.5,
      "attachments_count": 1,
      "received_at": "2026-11-10T09:14:02+00:00"
    }
  ],
  "meta": { "current_page": 1, "last_page": 12, "per_page": 25, "total": 290 },
  "links": { "next": "https://www.mxcatch.net/api/v1/emails?page=2", "prev": null }
}

Tips

  • Prefer webhooks for reacting to new mail in real time; use the API for backfills, dashboards and cleanup.
  • Message IDs are stable, so you can safely store them and fetch the full message later.
  • Keep keys server-side. Anyone holding a key can read every message on your domains.

Build on your inbound mail.

Create an API key in Settings and make your first request in under a minute.

Create your free account