Scopes
Endpoints
List Emails
Query parameters:page, per_page (max 100), contact_id, to_email, sent_by (a team member’s user ID), status, since and until (ISO 8601, on the sent time).
status is one of queued (being sent), sent, delivered, opened, replied, bounced, complained or failed (the email provider refused it). Emails scheduled from the composer can also be scheduled (waiting for scheduled_at), cancelled (cancelled before they went) or not_sent (stopped at send time; failure_reason says why). While an email waits, sent_at is the time it is due to go.
If the person’s record access is limited to their own or their team’s contacts, pass contact_id: they can list the emails sent to a contact they can see, one contact at a time.
The person’s email access applies too (Settings → Members → Record access → Emails). With Their team’s or Only theirs, the list holds their own emails and those sent by the people their scope covers; a teammate who keeps their email private is listed only for the emails the person is on. An email they can’t see answers 404 by id.
GET /v1/contact-emails/{id} returns the same fields plus body_html and body_markdown.
Send an Email
POST /v1/contact-emails
Answers
201 with { "data": { "id", "contact_id", "to_email", "status": "sent", "replayed": false } }, or 200 with "replayed": true for a repeated idempotency_key.
Sending is refused when:
- the contact isn’t one the person’s record access shows (
404), or it is in Recently deleted; - the contact unsubscribed, bounced, reported spam or is blocked, or is marked unsubscribed (
409 suppressed); - the person’s access to companies or deals is limited and the email uses company or deal merge fields (
403): send it from the contact page instead; - the workspace has no verified sending domain, or the sender’s address can’t be used (
409, with the reason aserror); - the workspace’s subscription has ended or sending isn’t on its plan (
403); - a sending cap is reached (
429, withRetry-After). The caps are shared with the contact page: 20 emails a minute and 100 an hour per person, and 300 an hour per workspace.
Inbox Conversations
A conversation is an email thread with a contact in the team Inbox: mail forwarded or synced from members’ mailboxes, mail to the workspace’s team inbox address, emails sent from Orbit and the replies to them. Each is assigned to one member (or nobody) and isopen or closed. A member’s own mail starts assigned to them; mail to the team inbox address starts unassigned, or with the next member when the workspace uses round robin. A new reply from the contact reopens a closed conversation (automatic replies such as out-of-office notes don’t).
GET /v1/conversations query parameters: page, per_page (max 100), status (open or closed), assigned_to (me, unassigned, any or a member’s user ID), contact_id, channel (personal or shared, the team inbox address). A person sees their own conversations (their mailbox’s, and those assigned to them) and the team inbox address’s, never a teammate’s own mailbox; a person whose record access is limited sees only those with contacts they can see. The messages inside follow the person’s email access (see Emails).
GET /v1/conversations/{id} adds messages (oldest first: id, kind (activity for mail captured from a mailbox or the team address, contact_email for mail sent from Orbit), direction, subject, from, to, cc, occurred_at, status, contact_id, member_user_id, body_text, body_html) and history (newest first: kind assigned, unassigned, closed or reopened, actor_user_id, from_user_id, to_user_id, reason manual, reply or round_robin, created_at).
PATCH /v1/conversations/{id} takes { "assigned_to": "<member id>" | "me" | null, "status": "open" | "closed" } (either or both) and answers with the conversation. The new assignee is notified. It is refused when:
- the assignee isn’t a member who can reply (viewers can’t be assigned) (
422 invalid_assignee); - the assignee’s record access doesn’t include the conversation’s contact (
422 assignee_cannot_see_contact): assigning never widens what someone can see; - the person the credential acts as is a viewer (
403), or can’t see the conversation (404).
MCP tools
The same operations as MCP tools
Rate Limits
API rate limit details