Sign in to fill these examples with your own keys. Sign in Start free trial

Events

Delivery events for a cluster.

Delivery events for the team or a cluster. Optional filters apply first. Newest first by default, 200 at a time, max 1000. Page newer-to-older with before. Catch up in ingest order with after; rows settle for 5 seconds before they appear so a late commit is not skipped. The next cursor is the last id in the array. Same filters as the Events page. Unique args you set at send time live in the stored payload as a JSON object. Bounce, deferred, dropped, and spamreport rows include bounce_classification, bounce_reason, smtp_code, enhanced_code, and a pasteable explanation. Delivered rows return those fields as null. When the receiving server never answered, payload.response.content and payload.reason carry a plain sentence about the connection. A Support key, or a token for someone who is not a Team Administrator, gets no payload, and runs of four or more digits in subject-like fields are masked. Use explanation when you tell a customer what happened.

GET /api/v1/teams/:obfuscated_team_id/message_events

List team events. Filters apply first. Newest first, or page with before / after.

  • cluster_id: Public cluster id. Uses the same window as the cluster Events page.
  • message_id: Exact message id
  • recipient: Case-insensitive exact recipient
  • mx_provider: Case-insensitive exact MX provider
  • sending_ip: Exact sending IP
  • tenant_id: Public tenant id
  • sending_domain_id: Public sending domain id
  • event_type: Exact event type
  • since: Occurred at on or after
  • until: Occurred at on or before
  • query: JSON and/or group of rules. Fields: message_id, recipient, mx_provider, sending_ip, tenant_id, sending_domain_id, cluster_id, event_type, occurred_at. cmp: eq, neq, contains, gte, lte
  • limit: Optional. Page size. Default 200. Max 1000.
  • before: Optional. Public event id. Next newest-first page strictly older than this row.
  • after: Optional. Public event id. Next ingest-order page after this id. Rows settle for 5 seconds before they appear.
request.sh
1curl -sS -X GET \ 2 -H 'Authorization: Bearer YOUR_API_KEY' \ 3 https://app.postshiba.com/api/v1/teams/KjkAJW/message_events
response.json
1[ 2 { 3 "id": "JkLmNp", 4 "event_type": "delivered", 5 "recipient": "dest@example.com", 6 "sender": "hello@mail.example.com", 7 "message_id": "abc", 8 "mx_provider": "gmail", 9 "sending_ip": "203.0.113.10", 10 "bounce_classification": null, 11 "bounce_reason": null, 12 "smtp_code": null, 13 "enhanced_code": null, 14 "explanation": null, 15 "occurred_at": "2026-08-29T00:00:00Z", 16 "drain_status": "pending", 17 "tenant_id": "WbLcFd", 18 "sending_domain_id": "HsVtYk", 19 "node_id": "ZxHvTb", 20 "payload": { 21 "event": "delivered" 22 } 23 } 24]

GET /api/v1/teams/:obfuscated_team_id/clusters/:obfuscated_cluster_id/message_events

List events. Filters apply first. Newest first, or page with before / after.

  • obfuscated_cluster_id: Public cluster id
  • message_id: Exact message id
  • recipient: Case-insensitive exact recipient
  • mx_provider: Case-insensitive exact MX provider
  • sending_ip: Exact sending IP
  • tenant_id: Public tenant id
  • sending_domain_id: Public sending domain id
  • cluster_id: Public cluster id
  • event_type: Exact event type
  • since: Occurred at on or after
  • until: Occurred at on or before
  • query: JSON and/or group of rules. Fields: message_id, recipient, mx_provider, sending_ip, tenant_id, sending_domain_id, cluster_id, event_type, occurred_at. cmp: eq, neq, contains, gte, lte
  • limit: Optional. Page size. Default 200. Max 1000.
  • before: Optional. Public event id. Next newest-first page strictly older than this row.
  • after: Optional. Public event id. Next ingest-order page after this id. Rows settle for 5 seconds before they appear.
request.sh
1curl -sS -X GET \ 2 -H 'Authorization: Bearer YOUR_API_KEY' \ 3 https://app.postshiba.com/api/v1/teams/KjkAJW/clusters/:obfuscated_cluster_id/message_events
response.json
1[ 2 { 3 "id": "JkLmNp", 4 "event_type": "delivered", 5 "recipient": "dest@example.com", 6 "sender": "hello@mail.example.com", 7 "message_id": "abc", 8 "mx_provider": "gmail", 9 "sending_ip": "203.0.113.10", 10 "bounce_classification": null, 11 "bounce_reason": null, 12 "smtp_code": null, 13 "enhanced_code": null, 14 "explanation": null, 15 "occurred_at": "2026-08-29T00:00:00Z", 16 "drain_status": "pending", 17 "tenant_id": "WbLcFd", 18 "sending_domain_id": "HsVtYk", 19 "node_id": "ZxHvTb", 20 "payload": { 21 "event": "delivered" 22 } 23 } 24]

GET /api/v1/message_events/:id

Get one event and its payload. A Support key, or a token for someone who is not a Team Administrator, omits payload.

  • id: Public event id
request.sh
1curl -sS -X GET \ 2 -H 'Authorization: Bearer YOUR_API_KEY' \ 3 https://app.postshiba.com/api/v1/message_events/:message_event_id
response.json
1{ 2 "id": "JkLmNp", 3 "event_type": "delivered", 4 "recipient": "dest@example.com", 5 "sender": "hello@mail.example.com", 6 "message_id": "abc", 7 "mx_provider": "gmail", 8 "sending_ip": "203.0.113.10", 9 "bounce_classification": null, 10 "bounce_reason": null, 11 "smtp_code": null, 12 "enhanced_code": null, 13 "explanation": null, 14 "occurred_at": "2026-08-29T00:00:00Z", 15 "drain_status": "pending", 16 "tenant_id": "WbLcFd", 17 "sending_domain_id": "HsVtYk", 18 "node_id": "ZxHvTb", 19 "payload": { 20 "event": "delivered" 21 } 22}