Close, reopen, assign, tag or mark read up to 100 threads
const url = 'https://api.threadkite.app/v1/threads/bulk';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"action":"close","ids":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"],"outcome":"deal","lostReasonId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","note":"example","valueMinor":1,"userId":"example","tagId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.threadkite.app/v1/threads/bulk \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "action": "close", "ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "outcome": "deal", "lostReasonId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "note": "example", "valueMinor": 1, "userId": "example", "tagId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'One action for every thread in ids. Each thread changes on its own: those that can’t be changed (one you can’t see is “not found”, an owner who is not in its inbox) are listed in failed and the rest still change. Everything but read needs a Full seat; read is for signed-in people only.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
close (with outcome, and lostReasonId, note and valueMinor as for closing one thread), reopen, assign (with userId, null to unassign), tag (with tagId) or read (mark as read for you; signed-in people only)
The threads, up to 100
For close
For close as lost
For close
For close as Won, in minor units
For assign: the new owner, or null to unassign
For tag
Responses
Section titled “Responses”object
Threads changed
Threads that were not changed and why. A thread you can’t see is reported as not found.
object
Example
{ "failed": [ { "code": "not_found", "message": "Thread not found." } ]}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" } ]}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}