Skip to main content

Sending messages

Two ways to send messages: within an existing thread, or using quick send.
Sending first messages requires the Outbound Messages addon. Replying to contacts who have already messaged you works on all plans. Sending the first message to a new contact requires the Outbound Messages addon ($199/mo) on a paid plan. Enable the addon in your Inbox dashboard under Settings → Billing, or contact support@inboxapp.com for help.

Standard send (existing thread)

Send a message in a thread you’ve already created or looked up:
Response:
The send message endpoint returns the Message object directly — not wrapped in { message: ... }.

Quick send

Quick send combines thread lookup/creation and message sending in one request:
Response:
Quick send accepts either externalPlatformId (the X user ID) or externalId (the Inbox external ID) to identify the prospect. When to use quick send:
  • One-off messages where you don’t need thread details
  • Simplifying your code flow
When to use standard send:
  • Sending multiple messages in sequence
  • You’re already working with a thread object

Retrieving messages

Get message history for a thread:
Response:

Determining message direction

There is no direction field on messages. Use authorId to determine who sent a message:
Don’t rely on userId to determine message direction. userId is null for messages sent from the X mobile app or web client — even if they were sent by your account. Always check authorId against your account link IDs instead.
origin describes where the message entered Inbox, not who sent it. An "external" message could be from the prospect or from your account (sent via the X client). Campaign messages have origin: "internal" with a non-null campaignId. Check campaignId to distinguish campaign messages from messages sent manually through the Inbox UI.

Pagination

For long conversations, paginate through messages using cursorId and cursorTimestamp:
See Pagination for streaming patterns and error handling.

Replying to a specific message

You can reply to a specific message by providing replyToMessageId:

Editing messages

Edit a message in an X Chat (encrypted DM) thread:
Editing is only supported for X Chat (encrypted DM) threads. Check the thread’s variant field — if it’s "unencrypted", the API will throw an error.
The message must have existing text content to be eligible for editing. If a message was sent with only an attachment and no text content, it cannot be edited.

Deleting messages

Delete a message in an X Chat thread:
Deleting is only supported for X Chat (encrypted DM) threads. Check the thread’s variant field — if it’s "unencrypted", the API will throw an error.

Reactions

Add or remove emoji reactions on messages:

Message history

Get the edit history and deletion status of a message:

Common workflows

Send a follow-up

Don’t use userId to check if the last message is from your team. Your team member may have sent the message from the X mobile app or web client, in which case userId would be null. Always check lastMessage.authorId against your account link IDs. Keep your account links cached so you can make this comparison quickly.

Calculate response time

Bulk send messages

Rate limits are per team across all endpoints. Add delays between bulk sends and implement retry logic with exponential backoff when you receive a 429 response. See Rate limits for current limits and backoff strategies.

Send message

POST /threads//messages

Quick send

POST /threads/messages

List messages

GET /threads//messages

Managing threads

Thread operations and filtering