One inbox
const url = 'https://api.threadkite.app/v1/inboxes/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.threadkite.app/v1/inboxes/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”object
Reports group by type
Where the team works: its hours drive out-of-hours replies and response timers; its address and phone fill the signature. Null for a group-wide inbox
The inbox’s own email signature, with merge fields; null uses the business’s (GET /v1/email-signature)
The inbox’s signature formatted, as HTML with merge fields; null when plain
A customer writing this many months after their thread closed starts a new chapter (a new lead always does); null: never by time alone
Leads and email with no other inbox go here
The inbox email address: give it to customers, marketplaces, website providers and your DMS, and forward your own email to it. Lead emails (ADF or plain) are read for the lead and its source; replies join their thread.
People in it (owners and admins see it anyway)
You are a member
What each thread in its list shows, and the item filters it offers
object
The item line, in order: title, price or attributes.<key> (GET /v1/inboxes/list-fields). Empty hides it
The thread details, in order
The item filters offered in the inbox
The list layout is the suggested one (nobody has changed it)
Example
{ "name": "Leeds Sales", "type": "sales", "responseTargetMinutes": 5, "reopenAssignment": "keep_owner", "newChapterAfterMonths": 6, "address": "smith-motors-sales-leeds@in.threadkite.net", "memberCount": 4, "listLayout": { "itemFields": [ "attributes.reference", "title", "price" ], "details": [ "stage", "source", "next_appointment" ], "itemFilters": [ "brand", "colour", "price" ] }}Missing or invalid API key
object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}The organisation is on the Free plan (code upgrade_required)
object
Stable machine-readable reason
The feature that needs Pro
Where to upgrade or pay, in the web app
Example
{ "statusCode": 402, "code": "upgrade_required", "message": "Connections are part of Pro. Upgrade to connect texts, calls and more.", "feature": "extraSeats", "upgradePath": "/settings/billing"}The key does not have the scope (or the person the permission)
object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}Rate limit reached
object
Stable machine-readable reason
Seconds until another request will be accepted
Example
{ "statusCode": 429, "code": "rate_limited", "message": "Too many requests. Each key can make 120 requests a minute; try again in 12 seconds.", "retryAfter": 12}