Message activity
Look up delivery status per message, filter by tags, and read events.
Message activity is the read-only log of everything you've sent: status, recipients, tags, and timing — newest first.
Listing
curl "https://api.emitd.com/v1/messages?limit=25" \
-H "Authorization: Bearer $EMITD_API_KEY"?limit=— default 25, max 100?cursor=— a bare epoch-millisecondcreated_atfrom the previous page; returns rows strictly older?tag_key=campaign&tag_value=welcome— filter on thetagsJSON column (tag_valuealone is ignored). There is nostatusfilter on this endpoint.
{
"data": [
{
"id": "msg_2h8Kd0Rk9Qa",
"from_addr": "hello@yourdomain.com",
"to_addr": "ada@lovelace.io",
"subject": "Your receipt #4021",
"status": "sent",
"ses_message_id": "0100018f...",
"error": null,
"created_at": 1783386190000,
"updated_at": 1783386190864
}
],
"next_cursor": 1783386190000
}Status is one of queued, sent, failed, suppressed, scheduled,
cancelled. Note to_addr is the primary recipient only — the full
recipient set isn't stored on this row.
Detail
GET /v1/messages/{id} returns the full record for one message (404 if it
doesn't exist or isn't yours — the API never distinguishes the two).
Events
Delivery, bounce, complaint, open, and click events are joined to messages
and streamed to your webhooks. Simulated events from
test mode live at GET /v1/email/test-events.
Filtering patterns
# all messages tagged campaign=welcome, one page
curl "https://api.emitd.com/v1/messages?tag_key=campaign&tag_value=welcome&limit=100" \
-H "Authorization: Bearer $EMITD_API_KEY"Tag every send at the source (tags: { "campaign": "welcome" }) — tags are
written once at send time and are what both activity filtering and analytics
hang off.