MailSenseAI

API reference

Public API, coming soon.

REST for reads, webhooks for events — landing with the Team plan. Generate a key in the dashboard and pipe signal into your stack. No partnership form, no "contact sales for an API key."

Authentication

Bearer keys.

Every request is authenticated with a secret key in the Authorization header. Keys are scoped per workspace and revocable from the dashboard. API + webhooks are coming with the Team plan.

GET · /v1/threads
curl https://api.mailsenseai.com/v1/threads \
  -H "Authorization: Bearer $MAILSENSEAI_KEY"

{
  "data": [
    {
      "thread_id":   "th_8m2KQ",
      "subject":     "Re: Q2 procurement — pricing addendum",
      "recipient":   "maya@northwind.co",
      "opens":       3,
      "clicks":      1,
      "replied":     false,
      "health":      82,
      "updated_at":  "2026-05-09T13:14:02Z"
    }
  ],
  "has_more": false
}

Endpoints

REST surface.

GET/v1/threadsList tracked threads with rollup signal.
GET/v1/threads/:idFull event history for a single thread.
GET/v1/eventsStream raw open / click / reply events.
POST/v1/webhooksSubscribe an endpoint to thread events.
GET/v1/webhooksList your webhook subscriptions.
DELETE/v1/webhooks/:idRemove a webhook subscription.

Webhooks

Events, pushed.

Subscribe an HTTPS endpoint and we POST a signed JSON payload the moment something happens. Retries with exponential backoff for 24 hours.

  • thread.opened
  • thread.clicked
  • thread.replied
  • recipient.opted_out
POST · /v1/webhooks
# Subscribe to thread.opened events
curl https://api.mailsenseai.com/v1/webhooks \
  -H "Authorization: Bearer $MAILSENSEAI_KEY" \
  -d url=https://hooks.acme.dev/inbound \
  -d events[]=thread.opened \
  -d events[]=thread.clicked

# You'll receive:
{
  "event":      "thread.opened",
  "thread_id":  "th_8m2KQ",
  "recipient":  "maya@northwind.co",
  "device":     "iPhone",
  "city":       "Brooklyn, NY",
  "occurred_at":"2026-05-09T13:14:02Z"
}