curl --request GET \
--url https://api.example.com/api/v1/inbox \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/api/v1/inbox"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/api/v1/inbox', 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.example.com/api/v1/inbox",
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://api.example.com/api/v1/inbox"
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://api.example.com/api/v1/inbox")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/inbox")
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_body{
"items": [
{
"thread_id": "<string>",
"channel": "email",
"counterpart": {
"name": "<string>",
"email": "<string>",
"linkedin_provider_id": "<string>",
"profile_url": "<string>",
"picture_url": "<string>"
},
"last_message": {
"at": "<string>",
"dir": "inbound",
"snippet": "<string>"
},
"action_eligibility": {
"can_reply": true,
"reason": "suppressed",
"suppressed": true,
"casl_status": "not_required"
},
"sender": {
"account_id": "<string>",
"provider_account_id": "<string>",
"name": "<string>"
},
"email_sender": {
"transport": "gmail",
"account": "<string>",
"alias_id": "<string>"
},
"email_linkage": "route",
"reply_transport": {
"transport": "gmail",
"available": true,
"reason": "<string>",
"alias_id": "<string>"
},
"connected_reply_summary": {
"id": "<string>",
"status": "sending",
"snippet": "<string>",
"created_at": "<string>",
"accepted_at": "<string>",
"from_email": "<string>",
"to_email": "<string>"
},
"conversation_key": "<string>",
"campaign_id": "<string>",
"campaign_name": "<string>",
"lead_id": "<string>",
"intent": "<string>",
"sentiment": "<string>",
"followup_scheduled": false
}
],
"next_cursor": "<string>",
"degraded_sources": [
"<string>"
],
"visibility": {
"email": "actor_scoped",
"linkedin": "org_scoped"
},
"window_days": 30
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}List Inbox
Return one stable page from the last 30 days, newest first.
Resume state advances each source only for items emitted. Each retry skips identities at or before the source’s last-emitted key, so an upstream offset shift cannot duplicate rows. A provider failure returns a partial page and names that source.
curl --request GET \
--url https://api.example.com/api/v1/inbox \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/api/v1/inbox"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/api/v1/inbox', 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.example.com/api/v1/inbox",
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://api.example.com/api/v1/inbox"
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://api.example.com/api/v1/inbox")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/inbox")
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_body{
"items": [
{
"thread_id": "<string>",
"channel": "email",
"counterpart": {
"name": "<string>",
"email": "<string>",
"linkedin_provider_id": "<string>",
"profile_url": "<string>",
"picture_url": "<string>"
},
"last_message": {
"at": "<string>",
"dir": "inbound",
"snippet": "<string>"
},
"action_eligibility": {
"can_reply": true,
"reason": "suppressed",
"suppressed": true,
"casl_status": "not_required"
},
"sender": {
"account_id": "<string>",
"provider_account_id": "<string>",
"name": "<string>"
},
"email_sender": {
"transport": "gmail",
"account": "<string>",
"alias_id": "<string>"
},
"email_linkage": "route",
"reply_transport": {
"transport": "gmail",
"available": true,
"reason": "<string>",
"alias_id": "<string>"
},
"connected_reply_summary": {
"id": "<string>",
"status": "sending",
"snippet": "<string>",
"created_at": "<string>",
"accepted_at": "<string>",
"from_email": "<string>",
"to_email": "<string>"
},
"conversation_key": "<string>",
"campaign_id": "<string>",
"campaign_name": "<string>",
"lead_id": "<string>",
"intent": "<string>",
"sentiment": "<string>",
"followup_scheduled": false
}
],
"next_cursor": "<string>",
"degraded_sources": [
"<string>"
],
"visibility": {
"email": "actor_scoped",
"linkedin": "org_scoped"
},
"window_days": 30
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Opaque versioned merged-source cursor
1 <= x <= 100all, email, linkedin Local connected LinkedIn account; omitted means all
Show only campaign-matched threads by default, or all inbox threads.
campaigns, all Response
Successful Response
A 30-day snapshot page; unread state is deliberately absent in v1.
Show child attributes
Show child attributes
Opaque resume cursor. Each source advances only after its pending items are emitted.
Providers or enrichment layers that failed while this partial page was built.
The intentionally asymmetric ownership scope of each upstream source.
Show child attributes
Show child attributes
Fixed recent-view window anchored when the first page is requested.