curl --request POST \
--url https://inboxapp.com/api/v1/threads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"accountLinkId": "<string>",
"externalPlatformId": "1234567890",
"externalId": "<string>"
}
'import requests
url = "https://inboxapp.com/api/v1/threads"
payload = {
"accountLinkId": "<string>",
"externalPlatformId": "1234567890",
"externalId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountLinkId: '<string>',
externalPlatformId: '1234567890',
externalId: '<string>'
})
};
fetch('https://inboxapp.com/api/v1/threads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://inboxapp.com/api/v1/threads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accountLinkId' => '<string>',
'externalPlatformId' => '1234567890',
'externalId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://inboxapp.com/api/v1/threads"
payload := strings.NewReader("{\n \"accountLinkId\": \"<string>\",\n \"externalPlatformId\": \"1234567890\",\n \"externalId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://inboxapp.com/api/v1/threads")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"accountLinkId\": \"<string>\",\n \"externalPlatformId\": \"1234567890\",\n \"externalId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v1/threads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountLinkId\": \"<string>\",\n \"externalPlatformId\": \"1234567890\",\n \"externalId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "df6jbw4h36...",
"platform": "twitter",
"platformId": "1234567890",
"done": true,
"assigneeId": "df6jbw4h36...",
"lastMessageTimestamp": "2025-08-22T12:00:00.000Z",
"computedSortTimestamp": "2025-08-22T12:00:00.000Z",
"createdAt": "2025-08-22T12:00:00.000Z",
"status": "active",
"variant": "unencrypted",
"accountLinkId": "df6jbw4h36...",
"isSyncing": false,
"isRequest": false,
"typingIndicatorsEnabled": true,
"lastMessage": {
"id": "df6jbw4h36...",
"content": "Hey, I'm reaching out from Acme Agency...",
"authorId": "df6jbw4h36...",
"createdAt": "2025-08-22T12:00:00.000Z",
"userId": "df6jbw4h36...",
"campaignId": "df6jbw4h36..."
},
"prospect": {
"platform": "twitter",
"platformId": "1566123362161725440",
"externalId": "l44e15irdq4db30i77cgphhx",
"documentId": 858224163,
"displayName": "Inbox",
"username": "InboxApp_",
"handle": "@InboxApp_",
"image": "https://pbs.twimg.com/profile_images/1954360649393295360/rwp-vVt6.jpg",
"imageNormalized": "https://pbs.twimg.com/profile_images/1954360649393295360/rwp-vVt6.jpg",
"bio": "Social Selling CRM Close deals faster, stay organized, and never miss an opportunity. Starting with X",
"location": "San Francisco, CA",
"profileUrl": "https://x.com/InboxApp_",
"websiteUrl": "https://inboxapp.com",
"websiteDomain": "inboxapp.com",
"verified": "business",
"profileType": "business",
"isProtected": false,
"followerCount": 3068,
"followingCount": 288,
"postCount": 836,
"engagementCount": 2613,
"listedCount": 18,
"platformCreatedAt": "2022-09-03T17:58:06.000Z",
"firstSeenAt": "2024-07-09T14:08:49.000Z",
"lastUpdatedAt": "2025-11-10T18:03:16.000Z",
"lastEnrichedAt": "2025-11-10T18:03:16.000Z",
"lastActiveAt": "2025-11-10T12:00:00.000Z",
"source": "cached",
"isFresh": true,
"isStale": false,
"confidence": 0.85,
"accountStatus": "active",
"platformData": {
"isVerifiedBlue": false,
"isVerifiedGold": true,
"isVerifiedGray": false,
"professionalCategory": "986",
"urlEntities": [],
"bannerUrl": "https://pbs.twimg.com/profile_banners/1566123362161725440/1753273968",
"tweetsCount": 836,
"favoritesCount": 2613,
"rawData": {}
},
"context": {
"tags": [
"df6jbw4h36..."
],
"statusId": "df6jbw4h36...",
"valuation": 599,
"notes": "This prospect is a potential customer."
}
}
}Create thread
Create a new active thread with a prospect
curl --request POST \
--url https://inboxapp.com/api/v1/threads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"accountLinkId": "<string>",
"externalPlatformId": "1234567890",
"externalId": "<string>"
}
'import requests
url = "https://inboxapp.com/api/v1/threads"
payload = {
"accountLinkId": "<string>",
"externalPlatformId": "1234567890",
"externalId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountLinkId: '<string>',
externalPlatformId: '1234567890',
externalId: '<string>'
})
};
fetch('https://inboxapp.com/api/v1/threads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://inboxapp.com/api/v1/threads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accountLinkId' => '<string>',
'externalPlatformId' => '1234567890',
'externalId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://inboxapp.com/api/v1/threads"
payload := strings.NewReader("{\n \"accountLinkId\": \"<string>\",\n \"externalPlatformId\": \"1234567890\",\n \"externalId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://inboxapp.com/api/v1/threads")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"accountLinkId\": \"<string>\",\n \"externalPlatformId\": \"1234567890\",\n \"externalId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v1/threads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountLinkId\": \"<string>\",\n \"externalPlatformId\": \"1234567890\",\n \"externalId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "df6jbw4h36...",
"platform": "twitter",
"platformId": "1234567890",
"done": true,
"assigneeId": "df6jbw4h36...",
"lastMessageTimestamp": "2025-08-22T12:00:00.000Z",
"computedSortTimestamp": "2025-08-22T12:00:00.000Z",
"createdAt": "2025-08-22T12:00:00.000Z",
"status": "active",
"variant": "unencrypted",
"accountLinkId": "df6jbw4h36...",
"isSyncing": false,
"isRequest": false,
"typingIndicatorsEnabled": true,
"lastMessage": {
"id": "df6jbw4h36...",
"content": "Hey, I'm reaching out from Acme Agency...",
"authorId": "df6jbw4h36...",
"createdAt": "2025-08-22T12:00:00.000Z",
"userId": "df6jbw4h36...",
"campaignId": "df6jbw4h36..."
},
"prospect": {
"platform": "twitter",
"platformId": "1566123362161725440",
"externalId": "l44e15irdq4db30i77cgphhx",
"documentId": 858224163,
"displayName": "Inbox",
"username": "InboxApp_",
"handle": "@InboxApp_",
"image": "https://pbs.twimg.com/profile_images/1954360649393295360/rwp-vVt6.jpg",
"imageNormalized": "https://pbs.twimg.com/profile_images/1954360649393295360/rwp-vVt6.jpg",
"bio": "Social Selling CRM Close deals faster, stay organized, and never miss an opportunity. Starting with X",
"location": "San Francisco, CA",
"profileUrl": "https://x.com/InboxApp_",
"websiteUrl": "https://inboxapp.com",
"websiteDomain": "inboxapp.com",
"verified": "business",
"profileType": "business",
"isProtected": false,
"followerCount": 3068,
"followingCount": 288,
"postCount": 836,
"engagementCount": 2613,
"listedCount": 18,
"platformCreatedAt": "2022-09-03T17:58:06.000Z",
"firstSeenAt": "2024-07-09T14:08:49.000Z",
"lastUpdatedAt": "2025-11-10T18:03:16.000Z",
"lastEnrichedAt": "2025-11-10T18:03:16.000Z",
"lastActiveAt": "2025-11-10T12:00:00.000Z",
"source": "cached",
"isFresh": true,
"isStale": false,
"confidence": 0.85,
"accountStatus": "active",
"platformData": {
"isVerifiedBlue": false,
"isVerifiedGold": true,
"isVerifiedGray": false,
"professionalCategory": "986",
"urlEntities": [],
"bannerUrl": "https://pbs.twimg.com/profile_banners/1566123362161725440/1753273968",
"tweetsCount": 836,
"favoritesCount": 2613,
"rawData": {}
},
"context": {
"tags": [
"df6jbw4h36..."
],
"statusId": "df6jbw4h36...",
"valuation": 599,
"notes": "This prospect is a potential customer."
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The account link ID to associate with this thread. This determines which connected account the thread belongs to.
^[0-9a-z]+$The platform ID of the prospect. Must be provided if externalId is not provided.
"1234567890"
The Inbox external ID of the prospect. Must be provided if externalPlatformId is not provided.
^[0-9a-z]+$Response
OK
The ID of the thread.
^[0-9a-z]+$"df6jbw4h36..."
The platform this thread belongs to.
twitter "twitter"
The platform ID of the conversation.
"1234567890"
Whether the thread has been archived or not.
true
The ID of the member assigned to the thread.
^[0-9a-z]+$"df6jbw4h36..."
The timestamp of the last message in the thread.
"2025-08-22T12:00:00.000Z"
The timestamp of the last message in the thread or the creation date if no messages have been sent.
"2025-08-22T12:00:00.000Z"
The timestamp of when the thread was created in Inboxapp.
"2025-08-22T12:00:00.000Z"
Idle threads are hidden from the main inbox, i.e. when previewing a profile using 'Quick peek'
active, idle "active"
Will be set to "unencrypted" by default for new conversations until both parties have exchanged messages. Once each party has sent at least one message, the conversation transitions to "xChat" (encrypted).
unencrypted, xChat "unencrypted"
The ID of the account link associated with this thread.
^[0-9a-z]+$"df6jbw4h36..."
Whether the thread is currently syncing data from Twitter to load all messages.
false
Whether this conversation is a message request.
false
Whether typing indicators are enabled for this thread. If set to null, will use the team default setting.
true
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?