Launch special — let's split the check with SPLITCHECK for 50% off

SendGrid fixture

Event Webhook (batched)

SendGrid batches multiple email events into a single webhook delivery — the payload is an array, not an object. Handle each event in the array independently.

When does it fire?

Emails sent through SendGrid generate events: processed, delivered, open, click, bounce, dropped, deferred, spamreport, unsubscribe. Default batching is up to 30 seconds.

Request headers

Content-Type: application/json
X-Twilio-Email-Event-Webhook-Signature: MEUCIQDx4hKkBHd9...
X-Twilio-Email-Event-Webhook-Timestamp: 1715600000

Payload

[
  {
    "email": "[email protected]",
    "timestamp": 1715600000,
    "event": "delivered",
    "sg_event_id": "rWVYmVk9bWFil1ZRz5_LBQ",
    "sg_message_id": "14c5d75ce93.dfd.64b469.filter0001.16648.5515E0B88.0",
    "smtp-id": "<[email protected]>",
    "response": "250 OK"
  },
  {
    "email": "[email protected]",
    "timestamp": 1715600060,
    "event": "open",
    "sg_event_id": "8X4kQX4tQK_6OBP-XAJD2A",
    "sg_message_id": "14c5d75ce93.dfd.64b469.filter0001.16648.5515E0B88.0",
    "useragent": "Mozilla/5.0",
    "ip": "192.0.2.1"
  }
]

Key fields

  • [].event

    delivered | open | click | bounce | dropped | spamreport | unsubscribe — switch on this.

  • [].sg_event_id

    Unique per event — dedup key.

  • [].sg_message_id

    Per-message ID — useful for joining open/click events back to the original send.

  • []

    Always an array. Iterate even if you expect a single event.

Test it with cURL

Replace your-endpoint with your HookSense endpoint slug — or any URL you want to test against.

curl -X POST https://hooksense.com/w/your-endpoint \
  -H "Content-Type: application/json" \
  -H "X-Twilio-Email-Event-Webhook-Signature: MEUCIQDx4hKkBHd9..." \
  -H "X-Twilio-Email-Event-Webhook-Timestamp: 1715600000" \
  -d '[
  {
    "email": "[email protected]",
    "timestamp": 1715600000,
    "event": "delivered",
    "sg_event_id": "rWVYmVk9bWFil1ZRz5_LBQ",
    "sg_message_id": "14c5d75ce93.dfd.64b469.filter0001.16648.5515E0B88.0",
    "smtp-id": "<[email protected]>",
    "response": "250 OK"
  },
  {
    "email": "[email protected]",
    "timestamp": 1715600060,
    "event": "open",
    "sg_event_id": "8X4kQX4tQK_6OBP-XAJD2A",
    "sg_message_id": "14c5d75ce93.dfd.64b469.filter0001.16648.5515E0B88.0",
    "useragent": "Mozilla/5.0",
    "ip": "192.0.2.1"
  }
]'

Capture this in HookSense

Fire the cURL above at your HookSense endpoint and inspect the request in real time — with headers, body, signature verification, and replay.

Get a free endpoint

More SendGrid fixtures