The inboxes you can see
const url = 'https://api.threadkite.app/v1/inboxes?includeArchived=true';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?includeArchived=true' \ --header 'Authorization: Bearer <token>'Your inboxes (every inbox for owners, admins and keys without an inbox limit), default first, with their addresses. Inboxes you are not in are never listed.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Include archived inboxes (settings); switchers and pickers leave it out
Include archived inboxes (settings); switchers and pickers leave it out
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" } ]}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}