Skip to content

Close, reopen, assign, tag or mark read up to 100 threads

POST
/v1/threads/bulk
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.

Media typeapplication/json
object
action
required

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)

string
Allowed values: close reopen assign tag read
ids
required

The threads, up to 100

Array<string>
<= 100 items
outcome

For close

string
Allowed values: deal lost none no_reply
lostReasonId

For close as lost

string format: uuid
note

For close

string
<= 500 characters
valueMinor

For close as Won, in minor units

number
userId

For assign: the new owner, or null to unassign

string
nullable
tagId

For tag

string format: uuid
Media typeapplication/json
object
done
required

Threads changed

Array<string>
failed
required

Threads that were not changed and why. A thread you can’t see is reported as not found.

Array<object>
object
id
required
string format: uuid
code
required
string
message
required
string

Example

{
"failed": [
{
"code": "not_found",
"message": "Thread not found."
}
]
}
Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}

Missing or invalid API key

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

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)

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
feature
required

The feature that needs Pro

string
nullable
Allowed values: extraSeats connections aiAssistant aiReplies rules fullReports api inboxes bulkMessages videoMessages
upgradePath
required

Where to upgrade or pay, in the web app

string

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)

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}
Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
errors

With code invalid: every problem with the request, by field (message is the first)

Array<object>
object
path
required

Dotted path inside the item, e.g. attributes.price.amountMinor

string
message
required
string

Example

{
"statusCode": 403,
"code": "forbidden",
"message": "You do not have permission to do that.",
"errors": [
{
"message": "Enter the make"
}
]
}

Rate limit reached

Media typeapplication/json
object
statusCode
required
number
code
required

Stable machine-readable reason

string
message
required
string
retryAfter
required

Seconds until another request will be accepted

number

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
}