Skip to navigation

Welcome

Send transactional email over a simple, predictable HTTP API

rray is a transactional email platform: you POST a message, we hand it to our sending fleet and stream delivery outcomes back into the API, where you can query them at any time.

Base URL

https://api.rray.app

All endpoints are versioned under /v1. Requests and responses are JSON; errors are RFC 9457 problem details.

The 60-second tour

  1. Create an API key on the Keys page of the dashboard — keys look like rray_live_... and are shown exactly once.
  2. Send your first message — one POST /v1/messages, optionally with an idempotency key.
  3. Track it — GET /v1/messages/{id} returns the live status plus the per-recipient delivery timeline, and GET /v1/messages gives you a cursor-paginated, filterable feed.

Head to the Quickstart to run all three now, or browse the API Reference — every endpoint there is annotated with the exact errors it can return.

The three things to know first

  • A message is one send; a delivery is one recipient’s copy of it. Every address across to, cc and bcc becomes its own delivery, with its own status and its own place in the timeline. Message lifecycle has the whole state machine.
  • Every message belongs to one workspace. A workspace key carries its workspace; a platform key names one per request. See Credentials and Workspaces.
  • Every number the API enforces is on one page. Batch size, attachment budget, rate limits, retention, id formats: Limits & facts.

Design principles you can rely on

  • Machine-readable everything: every error carries a stable dotted code (message.not_found), a category to switch on, and a type URL that resolves to the public error catalog.
  • Safe retries: sending is idempotent when you pass Idempotency-Key; reads are always safe.
  • No surprises at scale: list endpoints paginate by cursor and never slow down as your history grows.