The Inbox API manages DM conversations across messaging platforms. Understanding these core entities will help you build effective integrations.
Multi-Platform Future: The API currently supports X (Twitter) DMs.
Instagram and LinkedIn are coming in Q2 2026. The data model is
platform-agnostic — see Supported platforms.
Messages are individual DMs sent or received in a thread.
Copy
{ "id": "p8rvk2m5j0xn4wq7ybftcael", "platform": "twitter", "platformId": "1876543210987654322", "threadId": "l44e15irdq4db30i77cgphhx", "teamId": "hzcai5t59nn9vsck3rbuepyg", "authorId": "df6jbw4h36qm5d9iu2sgn7kx", "userId": "r3km7xj9wq5p2bvnhfdteoly", "campaignId": null, "content": "Thanks for reaching out! I'd love to learn more about your project.", "origin": "api", "createdAt": "2025-01-15T10:30:00.000Z", "updatedAt": null, "isEdited": false, "entities": null, "attachment": null, "reactions": [], "replyData": null, "forwardData": null}
Key fields:
Field
Description
content
The message text
authorId
Either the accountLinkId or the prospect’s externalId — identifies the sender within Inbox (not a platform ID)
userId
Inbox user ID if sent from Inbox by a team member. null if the message is from the prospect, was sent from the X client, or was otherwise sent outside of Inbox. A null value does not necessarily mean the message is from the prospect — it just means it wasn’t sent from Inbox.
origin
Where the message originated: "external" (pulled from X), "internal" (sent from the Inbox UI or a campaign), "api" (sent via the API), or null
campaignId
Non-null if the message was sent by a campaign (these have origin: "internal")
"verified" (blue check), "business" (gold), "government" (gray), or "none"
Profile type
—
"personal", "business", or "government"
Source
—
"cached", "indexed", "live", or "merged"
Prospects are shared across all account links in your team. When retrieved as part of a thread or via the prospects endpoints, they include a context object with your team’s custom data.
A prospect can have multiple tags. Colors accept either a predefined name (e.g., "red", "blue", "green") or a hex code (e.g., "#ef4444"). Use GET /colors to see all predefined options.
Inbox uses two types of IDs for platform-related objects:
Inbox ID (id)
e.g. l44e15irdq4db30i77cgphhxThe internal Inbox ID (CUID2 format). Use this for all API operations.
Platform ID (platformId)
e.g. 1876543210987654321The original ID from X. Use this for lookups and constructing X URLs.
Copy
// Use Inbox IDs for API operationsawait client.get(`/threads/${thread.id}/messages`);// Use Platform IDs for lookupsawait client.get("/threads/lookup", { params: { externalPlatformId: "1876543210987654321", accountLinkId: account.id, },});
You can use platform IDs to construct direct links to X:
Link type
URL pattern
User profile (by ID)
https://x.com/i/user/{platformId}
User profile (by username)
https://x.com/{username}
Tweet/Post
https://x.com/anyusername/status/{tweetId}
DM conversation
https://x.com/i/chat/{conversationPlatformId}
The user-by-ID link (/i/user/{platformId}) is the most reliable since
usernames can change. For tweet URLs, X ignores the username — only the tweet
ID matters.
The thread status field ("active" or "idle") controls whether the thread is visible in the inbox. Active threads appear in inbox views; idle threads are hidden (e.g., threads created via Quick Peek that haven’t had a real conversation yet).This is separate from inbox views, which are filtered using the inbox query parameter:
inbox value
Description
"default"
Active conversations needing attention
"no-reply"
The prospect sent the last message and is awaiting your reply
"requests"
New message requests from unknown prospects
"archived"
Threads marked as done (done: true)
Filter by inbox view:
Copy
// Active conversationsconst { data } = await client.get("/threads", { params: { inbox: "default" },});// Threads where the prospect is awaiting your replyconst { data: noReply } = await client.get("/threads", { params: { inbox: "no-reply" },});// Archived threadsconst { data: archived } = await client.get("/threads", { params: { inbox: "archived" },});