A valid request URL is required to generate request examples{
"environment": "live",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"teams": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"role": "owner",
"joined_at": "2023-11-07T05:31:56Z"
}
],
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sessions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"verified": true,
"ip": "<string>",
"user_agent": "<string>",
"impersonated": true,
"created_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
}
],
"segments": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"entered_at": "2023-11-07T05:31:56Z"
}
],
"conversations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subject": "<string>",
"channel": "<string>",
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"last_message_at": "2023-11-07T05:31:56Z"
}
],
"checklists": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"dismissed": true,
"steps": 123,
"done": 123,
"last_progress_at": "2023-11-07T05:31:56Z"
}
],
"events": {
"window_days": 90,
"recent": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"source": "sdk",
"properties": {},
"occurred_at": "2023-11-07T05:31:56Z"
}
]
},
"feedback": {
"posts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "<string>",
"votes": 123,
"merged": true,
"created_at": "2023-11-07T05:31:56Z"
}
],
"votes": [
{
"post_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "<string>",
"voted_at": "2023-11-07T05:31:56Z"
}
]
},
"waitlist": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"joined_at": "2023-11-07T05:31:56Z",
"admitted_at": "2023-11-07T05:31:56Z",
"position": 123
}
],
"referrals": {
"codes": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "<string>",
"active": true,
"referred_count": 123,
"created_at": "2023-11-07T05:31:56Z"
}
],
"referred_by": {
"code": "<string>",
"attributed_at": "2023-11-07T05:31:56Z"
}
},
"merges": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"moved": {},
"created_at": "2023-11-07T05:31:56Z"
}
]
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}One contact's dossier
Requires customers:read. Everything this platform holds about one person, in one read: the teams they belong to, the devices holding a live session, the audiences they are in, what they have written to support, how far they got in each onboarding checklist, what they did in the product, what they asked for on the feedback board, which queues they are waiting in, who referred them, and which duplicates were folded into this row.
A dossier is read inside one TEAM. A person can belong to several customers, and the sections whose subject is a team are answered inside the one named in customer_id — absent that parameter, the oldest membership answers, which is the same default X-Customer-Id falls back to on the contact’s own surface. The chosen team travels back in customer_id, and teams is never scoped, so a caller can offer the others. What belongs to the ACCOUNT — identities, sessions, notes, merges, referrals — is answered whole whichever team is chosen.
There is no billing here. A subscription belongs to a customer, one person can sit in two teams on two plans, so “the plan of the contact” is not a fact this endpoint can state; the money is read on the customer’s own endpoints.
Every section degrades alone, and null means the section could not be read. A section that answers is either data or an honest absence inside itself — an empty list. A section that is itself null failed; the failure is logged on our side, and the caller must render it as “could not be read” rather than as “there is nothing here”. An empty list on failure would be a reassurance, and a reassurance is what stops somebody checking.
events.window_days is part of the answer, not decoration: an empty recent means nothing happened in that window, never “nothing ever happened”.
A valid request URL is required to generate request examples{
"environment": "live",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"teams": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"role": "owner",
"joined_at": "2023-11-07T05:31:56Z"
}
],
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sessions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"verified": true,
"ip": "<string>",
"user_agent": "<string>",
"impersonated": true,
"created_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
}
],
"segments": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"entered_at": "2023-11-07T05:31:56Z"
}
],
"conversations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subject": "<string>",
"channel": "<string>",
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"last_message_at": "2023-11-07T05:31:56Z"
}
],
"checklists": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"dismissed": true,
"steps": 123,
"done": 123,
"last_progress_at": "2023-11-07T05:31:56Z"
}
],
"events": {
"window_days": 90,
"recent": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"source": "sdk",
"properties": {},
"occurred_at": "2023-11-07T05:31:56Z"
}
]
},
"feedback": {
"posts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "<string>",
"votes": 123,
"merged": true,
"created_at": "2023-11-07T05:31:56Z"
}
],
"votes": [
{
"post_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "<string>",
"voted_at": "2023-11-07T05:31:56Z"
}
]
},
"waitlist": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"joined_at": "2023-11-07T05:31:56Z",
"admitted_at": "2023-11-07T05:31:56Z",
"position": 123
}
],
"referrals": {
"codes": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"code": "<string>",
"active": true,
"referred_count": 123,
"created_at": "2023-11-07T05:31:56Z"
}
],
"referred_by": {
"code": "<string>",
"attributed_at": "2023-11-07T05:31:56Z"
}
},
"merges": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"moved": {},
"created_at": "2023-11-07T05:31:56Z"
}
]
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Autorizações
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Cabeçalhos
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Parâmetros de caminho
Parâmetros de consulta
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test Which of this contact's teams the scoped sections are read inside. Defaults to the oldest membership. A customer this contact does not belong to answers 404.
Resposta
The dossier. Any section may be null, which means it failed to load.
live, test The customers this contact belongs to, oldest membership first.
Show child attributes
Show child attributes
The team the scoped sections were read inside. null when this person belongs to no team — an answer, not a failure.
Sessions that have not expired. Never a token hash. impersonated says the row is somebody from your staff inside the account.
Show child attributes
Show child attributes
The audiences this contact is currently in — what explains a campaign that reached them or a checklist that appeared for them.
Show child attributes
Show child attributes
What this person wrote to support inside the chosen team, plus the threads that name no team at all.
Show child attributes
Show child attributes
The onboarding guide as this person sees it, folded to one line each — dismissed lists included, because where somebody stopped is the question this screen asks. last_progress_at is null until a step is actually completed; entitlement steps carry no timestamp, being true right now rather than done at a moment.
Show child attributes
Show child attributes
What this person did in the product, most recent first. Bounded by window_days — the events table is partitioned and an unbounded scan is the read that partitioning exists to prevent. Scoped to the chosen team, plus the events that name none.
Show child attributes
Show child attributes
What this person asked the product for, and what they backed. merged marks a post folded into a duplicate — still something they asked for. Scoped to the chosen team, plus what names none.
Show child attributes
Show child attributes
The feature queues this contact is in. position is null once admitted — there is no place in a line somebody has left.
Show child attributes
Show child attributes
Both directions of the referral edge. referred_by is null when nobody brought this person in.
Show child attributes
Show child attributes
Which duplicates were folded into this contact, and what moved with each. There is no un-merge; this is the whole account of it.
Show child attributes
Show child attributes