curl --request POST \
--url https://api.xpertai.cn/api/ai/threads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assistant_id": "22222222-2222-4222-8222-222222222222"
}
'import requests
url = "https://api.xpertai.cn/api/ai/threads"
payload = { "assistant_id": "22222222-2222-4222-8222-222222222222" }
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({assistant_id: '22222222-2222-4222-8222-222222222222'})
};
fetch('https://api.xpertai.cn/api/ai/threads', 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.xpertai.cn/api/ai/threads",
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([
'assistant_id' => '22222222-2222-4222-8222-222222222222'
]),
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.xpertai.cn/api/ai/threads"
payload := strings.NewReader("{\n \"assistant_id\": \"22222222-2222-4222-8222-222222222222\"\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.xpertai.cn/api/ai/threads")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assistant_id\": \"22222222-2222-4222-8222-222222222222\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xpertai.cn/api/ai/threads")
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 \"assistant_id\": \"22222222-2222-4222-8222-222222222222\"\n}"
response = http.request(request)
puts response.read_body{
"thread_id": "11111111-1111-4111-8111-111111111111",
"status": "idle",
"metadata": {
"conversation_id": "44444444-4444-4444-8444-444444444444",
"assistant_id": "22222222-2222-4222-8222-222222222222"
}
}Create a thread
Create a thread before starting a run. For agent conversations, include assistant_id and use the same agent ID for the run. The protocol accepts {} for an unbound thread, but successful creation does not establish run permission. Save thread_id for subsequent requests and metadata.conversation_id when a conversation ID is required. Creating a thread does not start the agent. If the run returns 403, see the permission troubleshooting section in the SDK guide.
curl --request POST \
--url https://api.xpertai.cn/api/ai/threads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assistant_id": "22222222-2222-4222-8222-222222222222"
}
'import requests
url = "https://api.xpertai.cn/api/ai/threads"
payload = { "assistant_id": "22222222-2222-4222-8222-222222222222" }
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({assistant_id: '22222222-2222-4222-8222-222222222222'})
};
fetch('https://api.xpertai.cn/api/ai/threads', 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.xpertai.cn/api/ai/threads",
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([
'assistant_id' => '22222222-2222-4222-8222-222222222222'
]),
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.xpertai.cn/api/ai/threads"
payload := strings.NewReader("{\n \"assistant_id\": \"22222222-2222-4222-8222-222222222222\"\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.xpertai.cn/api/ai/threads")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assistant_id\": \"22222222-2222-4222-8222-222222222222\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.xpertai.cn/api/ai/threads")
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 \"assistant_id\": \"22222222-2222-4222-8222-222222222222\"\n}"
response = http.request(request)
puts response.read_body{
"thread_id": "11111111-1111-4111-8111-111111111111",
"status": "idle",
"metadata": {
"conversation_id": "44444444-4444-4444-8444-444444444444",
"assistant_id": "22222222-2222-4222-8222-222222222222"
}
}Authorizations
Server-side API Key; do not expose it in browser code.
Body
Optional UUID; generated when omitted.
Optional at the protocol level. For agent conversations, supply the target published agent ID at creation and use the same ID for subsequent runs. The TypeScript SDK parameter is assistantId. If omitted, the thread is created without an agent binding under the current request identity; a later run using a different execution identity can fail with 403. Binding does not grant additional conversation access.
raise, do_nothing Show child attributes
Show child attributes