curl --request POST \
--url https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"threadIds": [
58217,
58198,
58104
]
}
'import requests
url = "https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk"
payload = { "threadIds": [58217, 58198, 58104] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({threadIds: [58217, 58198, 58104]})
};
fetch('https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk', 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://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'threadIds' => [
58217,
58198,
58104
]
]),
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://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk"
payload := strings.NewReader("{\n \"threadIds\": [\n 58217,\n 58198,\n 58104\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"threadIds\": [\n 58217,\n 58198,\n 58104\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"threadIds\": [\n 58217,\n 58198,\n 58104\n ]\n}"
response = http.request(request)
puts response.read_body{}Assign threads to a category
inbox:operate scope (or a broader one that includes it).
Use this endpoint when you need to file several conversations under this category at once. A thread sits in at most one category, so any earlier category on a supplied thread is replaced. Threads are processed one by one and successful links are kept even when others fail; the response returns only the thread ids that were not linked, each with its error details. A per-item error is notFound when the thread or the category does not exist, invalidInput when the thread id is not usable, or forbidden when you are not allowed to file that thread.
curl --request POST \
--url https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"threadIds": [
58217,
58198,
58104
]
}
'import requests
url = "https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk"
payload = { "threadIds": [58217, 58198, 58104] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({threadIds: [58217, 58198, 58104]})
};
fetch('https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk', 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://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'threadIds' => [
58217,
58198,
58104
]
]),
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://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk"
payload := strings.NewReader("{\n \"threadIds\": [\n 58217,\n 58198,\n 58104\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"threadIds\": [\n 58217,\n 58198,\n 58104\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/inbox/threads/categories/{id}/thread-links/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"threadIds\": [\n 58217,\n 58198,\n 58104\n ]\n}"
response = http.request(request)
puts response.read_body{}Authorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Path Parameters
x >= 1Body
Identifier list for non-atomic bulk thread operations.
1x >= 1Response
Per-item results. Threads not present in the dictionary succeeded.
Per-item error for non-atomic bulk operations. Only failed items are returned in the response dictionary. Items not present in the dictionary succeeded.
Show child attributes
Show child attributes