Get Thread
curl --request GET \
--url https://app.pixie.ai/api/threads/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.pixie.ai/api/threads/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.pixie.ai/api/threads/{id}', 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://app.pixie.ai/api/threads/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.pixie.ai/api/threads/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.pixie.ai/api/threads/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pixie.ai/api/threads/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyUnibox
Get Thread
Fetch one Unibox thread with messages, participant context, and sender status.
GET
/
api
/
threads
/
{id}
Get Thread
curl --request GET \
--url https://app.pixie.ai/api/threads/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.pixie.ai/api/threads/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.pixie.ai/api/threads/{id}', 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://app.pixie.ai/api/threads/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.pixie.ai/api/threads/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.pixie.ai/api/threads/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pixie.ai/api/threads/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyCLI:
pixie thread --id <id>
Overview
Fetches one Unibox thread, all messages in that thread, participant enrichment, and sender status. Opening a thread through this endpoint resets itsunread_count to 0.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Thread ID. |
Example
curl -H "Authorization: Bearer $PIXIE_API_KEY" \
"https://app.pixie.ai/api/threads/3d986dd1-9d70-45b7-8e36-5d5b8b1c9337"
{
"thread": {
"id": "3d986dd1-9d70-45b7-8e36-5d5b8b1c9337",
"channel": "email",
"status": "active",
"inbox_state": "needs_reply",
"participant_email": "[email protected]",
"unread_count": 0
},
"messages": [
{
"id": "6d54211c-7e24-4eb9-85fc-7388c8d89f2f",
"conversation_id": "3d986dd1-9d70-45b7-8e36-5d5b8b1c9337",
"direction": "inbound",
"body_text": "Interested. Can you send details?"
}
],
"participantDetails": {
"company": "Example Co",
"position": "Founder",
"headline": "Founder at Example Co"
},
"senderDisconnected": false,
"senderAccount": {
"display_name": "Sales Inbox",
"status": "active"
}
}
Response Notes
Messages are ordered oldest first. Email attachment URLs are refreshed before the response is returned.senderDisconnected is true when the linked sender is missing or no longer in a sendable status.
AI agent notes
Use this endpoint when you need the full thread and are ready to mark it read. If you only need paginated messages without changing unread state, use Get messages.Was this page helpful?