Webhooks

A recipient replied

Posted to the subscriptions to email.received when a recipient replies on reply.<your domain> — only for a domain where reply receiving is turned on (the domain's screen in the app, one MX record). The whole reply is in the body except attachments, which come as signed download links valid for 7 days. Replies over 150 KB are refused by Amazon and never arrive. Signed and retried like every event. The test event (POST /api/v1/webhooks/{id}/test) can arrive under this type too, with data: { test: true, message } and none of the fields of the real event: check data.test first.

postWebhookemail.received

Headers

Mailcheer-Signaturestring required

t=<unix timestamp>,v1=<hex>: v1 is the HMAC-SHA256 of "<t>.<raw body>" keyed with the subscription's secret. Reject a t more than 300 seconds away from your clock.

Mailcheer-Timestampstring required

The same t, in seconds.

Mailcheer-Event-Idstring required

The event's id — the same on every attempt and every replay: the deduplication key.

Mailcheer-Event-Typestring required

The event's type.

Mailcheer-Delivery-Idstring required

This delivery. A manual replay gets a new one.

Mailcheer-Attemptstring required

The attempt number, starting at 1.

Payload

OR

Example payload

{
  "id": "evt_R3pL9yQ2wE5tY8uI",
  "type": "email.received",
  "created_at": "2026-09-25T15:02:11.520Z",
  "data": {
    "reply_id": "cmu8r2d5k00031n7nq4w9pxyz",
    "email": "claire@example.com",
    "from": "claire@example.com",
    "from_name": "Claire Martin",
    "to": [
      "billing+cmu651xf200021n7nm68sikfw@reply.yourdomain.com"
    ],
    "subject": "Re: Your September invoice",
    "text": "Hello, can you send it to our accounting team too?\n\nOn 25 Sept 2026, Your company wrote:\n> Please find your invoice attached.",
    "received_at": "2026-09-25T15:02:11.482Z",
    "headers": {
      "message_id": "CAF3k9x@mail.gmail.com",
      "in_reply_to": "0102019a7c3e1b2f-3d1e-000000@eu-west-1.amazonses.com",
      "references": [
        "0102019a7c3e1b2f-3d1e-000000@eu-west-1.amazonses.com"
      ],
      "date": "Thu, 25 Sep 2026 17:02:08 +0200",
      "auto_submitted": null
    },
    "attachments": [
      {
        "filename": "purchase-order.pdf",
        "content_type": "application/pdf",
        "size": 48213,
        "url": "https://mailcheer.com/api/reponses/pj/Y211OHIy…~kQ3v…",
        "url_expires_at": "2026-10-02T15:02:11.520Z"
      }
    ],
    "message_id": "cmu651xf200021n7nm68sikfw",
    "source": "api",
    "tags": {
      "customer": "4821"
    },
    "spam": false,
    "automatic": false,
    "authentication": {
      "spf": "PASS",
      "dkim": "PASS",
      "dmarc": "PASS"
    }
  }
}

Response

Any 2xx within 15 seconds acknowledges receipt. Anything else — another status, a redirect (not followed), no answer, a network error — is retried: 5 attempts in all, the next ones 30 s, 2 min, 10 min and 1 h after the previous failure.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.