curl --request PATCH \
--url https://inboxapp.com/api/v2/threads/{threadId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"archived": true,
"unread": true,
"assigneeId": "<string>"
}
'import requests
url = "https://inboxapp.com/api/v2/threads/{threadId}"
payload = {
"archived": True,
"unread": True,
"assigneeId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({archived: true, unread: true, assigneeId: '<string>'})
};
fetch('https://inboxapp.com/api/v2/threads/{threadId}', 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/v2/threads/{threadId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'archived' => true,
'unread' => true,
'assigneeId' => '<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/v2/threads/{threadId}"
payload := strings.NewReader("{\n \"archived\": true,\n \"unread\": true,\n \"assigneeId\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://inboxapp.com/api/v2/threads/{threadId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"archived\": true,\n \"unread\": true,\n \"assigneeId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v2/threads/{threadId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"archived\": true,\n \"unread\": true,\n \"assigneeId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"accountLinkId": "<string>",
"profileId": "<string>",
"contactId": "<string>",
"assigneeId": "<string>",
"isRequest": true,
"acceptanceState": "required",
"archived": true,
"unread": true,
"restrictions": [
"message:send"
],
"syncing": true,
"typingIndicators": "enabled",
"lastMessage": {
"id": "<string>",
"direction": "inbound",
"createdAt": "2026-09-14T10:32:00.000Z"
},
"activity": {
"preview": "<string>",
"direction": "inbound",
"at": "2026-09-14T10:32:00.000Z"
},
"createdAt": "2026-09-14T10:32:00.000Z",
"accountLink": {
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"username": "jane",
"displayName": "<string>",
"avatarUrl": "<string>",
"status": "active",
"pauseReasons": [
"billing"
],
"capabilities": [
"message:send"
],
"syncedAt": "2026-09-14T10:32:00.000Z",
"createdAt": "2026-09-14T10:32:00.000Z"
},
"profile": {
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"username": "jane",
"handle": "@jane",
"displayName": "<string>",
"avatarUrl": "<string>",
"bio": "<string>",
"location": "<string>",
"websiteUrl": "<string>",
"websiteDomain": "<string>",
"verified": true,
"isOrganization": true,
"isProtected": true,
"followerCount": 123,
"followingCount": 123,
"postCount": 123,
"engagementCount": 123,
"listedCount": 123,
"accountStatus": "active",
"platformCreatedAt": "2026-09-14T10:32:00.000Z",
"profileUrl": "<string>",
"updatedAt": "2026-09-14T10:32:00.000Z",
"platformData": {
"_tag": "twitter",
"badge": "blue",
"profileType": "personal",
"professionalCategory": "<string>",
"urlEntities": [
{
"url": "<string>",
"expandedUrl": "<string>",
"displayUrl": "<string>",
"indices": [
123,
123
]
}
],
"bannerUrl": "<string>",
"rawData": {}
}
},
"contact": {
"id": "<string>",
"profiles": [
{
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"username": "jane",
"handle": "@jane",
"displayName": "<string>",
"avatarUrl": "<string>",
"bio": "<string>",
"location": "<string>",
"websiteUrl": "<string>",
"websiteDomain": "<string>",
"verified": true,
"isOrganization": true,
"isProtected": true,
"followerCount": 123,
"followingCount": 123,
"postCount": 123,
"engagementCount": 123,
"listedCount": 123,
"accountStatus": "active",
"platformCreatedAt": "2026-09-14T10:32:00.000Z",
"profileUrl": "<string>",
"updatedAt": "2026-09-14T10:32:00.000Z",
"platformData": {
"_tag": "twitter",
"badge": "blue",
"profileType": "personal",
"professionalCategory": "<string>",
"urlEntities": [
{
"url": "<string>",
"expandedUrl": "<string>",
"displayUrl": "<string>",
"indices": [
123,
123
]
}
],
"bannerUrl": "<string>",
"rawData": {}
}
}
],
"statusId": "<string>",
"tagIds": [
"<string>"
],
"notes": "<string>",
"valuation": 123,
"assigneeId": "<string>",
"createdAt": "2026-09-14T10:32:00.000Z",
"updatedAt": "2026-09-14T10:32:00.000Z",
"status": {
"id": "<string>",
"name": "<string>",
"color": "#3b82f6",
"createdAt": "2026-09-14T10:32:00.000Z"
},
"tags": [
{
"id": "<string>",
"name": "<string>",
"color": "#3b82f6"
}
],
"assignee": {
"id": "<string>",
"name": "<string>",
"email": "<string>",
"imageUrl": "<string>",
"role": "owner",
"createdAt": "2026-09-14T10:32:00.000Z"
}
},
"assignee": {
"id": "<string>",
"name": "<string>",
"email": "<string>",
"imageUrl": "<string>",
"role": "owner",
"createdAt": "2026-09-14T10:32:00.000Z"
}
}{
"code": "invalidRequest",
"message": "<string>",
"details": {
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
]
},
"requestId": "<string>"
}{
"code": "unauthorized",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "platformNotAvailable",
"message": "<string>",
"details": {
"platform": "twitter"
},
"requestId": "<string>"
}{
"code": "threadNotFound",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "rateLimited",
"message": "<string>",
"details": {
"window": "minute",
"limit": 123,
"resetAt": "2026-09-14T10:32:00.000Z"
},
"requestId": "<string>"
}{
"code": "internal",
"message": "<string>",
"details": null,
"requestId": "<string>"
}Update thread
curl --request PATCH \
--url https://inboxapp.com/api/v2/threads/{threadId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"archived": true,
"unread": true,
"assigneeId": "<string>"
}
'import requests
url = "https://inboxapp.com/api/v2/threads/{threadId}"
payload = {
"archived": True,
"unread": True,
"assigneeId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({archived: true, unread: true, assigneeId: '<string>'})
};
fetch('https://inboxapp.com/api/v2/threads/{threadId}', 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/v2/threads/{threadId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'archived' => true,
'unread' => true,
'assigneeId' => '<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/v2/threads/{threadId}"
payload := strings.NewReader("{\n \"archived\": true,\n \"unread\": true,\n \"assigneeId\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://inboxapp.com/api/v2/threads/{threadId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"archived\": true,\n \"unread\": true,\n \"assigneeId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v2/threads/{threadId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"archived\": true,\n \"unread\": true,\n \"assigneeId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"accountLinkId": "<string>",
"profileId": "<string>",
"contactId": "<string>",
"assigneeId": "<string>",
"isRequest": true,
"acceptanceState": "required",
"archived": true,
"unread": true,
"restrictions": [
"message:send"
],
"syncing": true,
"typingIndicators": "enabled",
"lastMessage": {
"id": "<string>",
"direction": "inbound",
"createdAt": "2026-09-14T10:32:00.000Z"
},
"activity": {
"preview": "<string>",
"direction": "inbound",
"at": "2026-09-14T10:32:00.000Z"
},
"createdAt": "2026-09-14T10:32:00.000Z",
"accountLink": {
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"username": "jane",
"displayName": "<string>",
"avatarUrl": "<string>",
"status": "active",
"pauseReasons": [
"billing"
],
"capabilities": [
"message:send"
],
"syncedAt": "2026-09-14T10:32:00.000Z",
"createdAt": "2026-09-14T10:32:00.000Z"
},
"profile": {
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"username": "jane",
"handle": "@jane",
"displayName": "<string>",
"avatarUrl": "<string>",
"bio": "<string>",
"location": "<string>",
"websiteUrl": "<string>",
"websiteDomain": "<string>",
"verified": true,
"isOrganization": true,
"isProtected": true,
"followerCount": 123,
"followingCount": 123,
"postCount": 123,
"engagementCount": 123,
"listedCount": 123,
"accountStatus": "active",
"platformCreatedAt": "2026-09-14T10:32:00.000Z",
"profileUrl": "<string>",
"updatedAt": "2026-09-14T10:32:00.000Z",
"platformData": {
"_tag": "twitter",
"badge": "blue",
"profileType": "personal",
"professionalCategory": "<string>",
"urlEntities": [
{
"url": "<string>",
"expandedUrl": "<string>",
"displayUrl": "<string>",
"indices": [
123,
123
]
}
],
"bannerUrl": "<string>",
"rawData": {}
}
},
"contact": {
"id": "<string>",
"profiles": [
{
"id": "<string>",
"platform": "twitter",
"platformId": "<string>",
"username": "jane",
"handle": "@jane",
"displayName": "<string>",
"avatarUrl": "<string>",
"bio": "<string>",
"location": "<string>",
"websiteUrl": "<string>",
"websiteDomain": "<string>",
"verified": true,
"isOrganization": true,
"isProtected": true,
"followerCount": 123,
"followingCount": 123,
"postCount": 123,
"engagementCount": 123,
"listedCount": 123,
"accountStatus": "active",
"platformCreatedAt": "2026-09-14T10:32:00.000Z",
"profileUrl": "<string>",
"updatedAt": "2026-09-14T10:32:00.000Z",
"platformData": {
"_tag": "twitter",
"badge": "blue",
"profileType": "personal",
"professionalCategory": "<string>",
"urlEntities": [
{
"url": "<string>",
"expandedUrl": "<string>",
"displayUrl": "<string>",
"indices": [
123,
123
]
}
],
"bannerUrl": "<string>",
"rawData": {}
}
}
],
"statusId": "<string>",
"tagIds": [
"<string>"
],
"notes": "<string>",
"valuation": 123,
"assigneeId": "<string>",
"createdAt": "2026-09-14T10:32:00.000Z",
"updatedAt": "2026-09-14T10:32:00.000Z",
"status": {
"id": "<string>",
"name": "<string>",
"color": "#3b82f6",
"createdAt": "2026-09-14T10:32:00.000Z"
},
"tags": [
{
"id": "<string>",
"name": "<string>",
"color": "#3b82f6"
}
],
"assignee": {
"id": "<string>",
"name": "<string>",
"email": "<string>",
"imageUrl": "<string>",
"role": "owner",
"createdAt": "2026-09-14T10:32:00.000Z"
}
},
"assignee": {
"id": "<string>",
"name": "<string>",
"email": "<string>",
"imageUrl": "<string>",
"role": "owner",
"createdAt": "2026-09-14T10:32:00.000Z"
}
}{
"code": "invalidRequest",
"message": "<string>",
"details": {
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
]
},
"requestId": "<string>"
}{
"code": "unauthorized",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "platformNotAvailable",
"message": "<string>",
"details": {
"platform": "twitter"
},
"requestId": "<string>"
}{
"code": "threadNotFound",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "rateLimited",
"message": "<string>",
"details": {
"window": "minute",
"limit": 123,
"resetAt": "2026-09-14T10:32:00.000Z"
},
"requestId": "<string>"
}{
"code": "internal",
"message": "<string>",
"details": null,
"requestId": "<string>"
}Path Parameters
^[0-9a-z]+$Body
Omitted fields are left unchanged, and null clears a nullable field.
Also applied on the platform when the account link has thread:archive:mutate.
Also applied on the platform when the account link has thread:read:mutate.
The thread's own assignee. Null falls back to the contact's default.
^[0-9a-z]+$Whether Inboxapp sends typing indicators to the platform while someone composes in this thread. teamDefault follows the team's setting.
enabled, disabled, teamDefault Response
A conversation between one of the team's account links and one profile.
A conversation between one of the team's account links and one profile.
Always the platform of the thread's account link and profile.
"twitter"
The conversation's ID on the platform. Null until the first message creates the conversation there.
An account link: a platform account the team connected to Inboxapp, the team's side of a conversation.
A profile: one person's account on one platform. Not a contact ID.
A contact: the team's record of the person, with their status, tags, notes, valuation and default assignee.
The thread's own assignee, else its contact's default.
True while the conversation is an incoming request the account hasn't replied to or accepted. Requests are in the requests folder, not inbox.
Whether the platform needs the account to accept the conversation before replying normally. unknown when the platform doesn't say. Independent of isRequest.
required, notRequired, unknown Marked unread in Inboxapp. A thread no one has opened yet is not unread.
Capabilities the platform disables in this conversation, on top of the account link's capabilities. Using one fails with threadRestricted.
message:send, message:edit, message:delete:self, message:unsend, message:react, message:reply, message:forward, media:image, media:video, media:gif, media:file, media:audio, thread:typing:send, thread:typing:receive, thread:message-requests, thread:delete:remote, directory:typeahead, thread:archive:observe, thread:archive:mutate, thread:read:observe, thread:read:mutate, profile:follow, profile:unfollow True while Inboxapp imports the conversation's older messages, so the message list may be incomplete.
Whether Inboxapp sends typing indicators to the platform while someone composes in this thread. teamDefault follows the team's setting.
enabled, disabled, teamDefault The thread's latest message. Get it for its content.
Show child attributes
Show child attributes
The thread's latest activity: a message, or a reaction since. at is when it happened, which is not always the thread's position in a list: see order.
Show child attributes
Show child attributes
"2026-09-14T10:32:00.000Z"
A platform account the team connected to Inboxapp. Every conversation and message goes through one.
Show child attributes
Show child attributes
One person's account on one platform. Profile data is shared across teams; the team's own data about the person is on their contact.
Show child attributes
Show child attributes
The team's record of a person: their profiles, plus the team's CRM state about them.
Show child attributes
Show child attributes
A person on the team, who can be assigned threads and contacts.
Show child attributes
Show child attributes
Was this page helpful?