Skip to content

The merged inbox: everything a caller asked the business to do

GET
/v1/inbox
curl --request GET \
--url 'https://api.vocapable.com/v1/inbox?limit=50' \
--header 'Authorization: Bearer <token>'

One keyset timeline (created_at desc) over the five inbox kinds, caller included.

The per-kind resources remain authoritative for their own lifecycles - a client navigates by the returned durable id, and this feed synthesizes no event table.

Without a created_at.gte, the feed defaults to the last 30 days (DEFAULT_INBOX_WINDOW): five sources - one month-partitioned - must not make the laziest request the most expensive one. An explicit created_at.gte overrides the default entirely (docs/04-api.md §2).

limit
Limit
integer
default: 50 >= 1 <= 200
cursor
Any of:
string
agent_id
Any of:
string

Filter on agent_id. Comma-separated values are OR.

agent_id.gte
Any of:
string

Filter on agent_id with the gte operator.

agent_id.lte
Any of:
string

Filter on agent_id with the lte operator.

agent_id.gt
Any of:
string

Filter on agent_id with the gt operator.

agent_id.lt
Any of:
string

Filter on agent_id with the lt operator.

agent_id.in
Any of:
string

Filter on agent_id with the in operator.

agent_version_id
Any of:
string

Filter on agent_version_id. Comma-separated values are OR.

agent_version_id.gte
Any of:
string

Filter on agent_version_id with the gte operator.

agent_version_id.lte
Any of:
string

Filter on agent_version_id with the lte operator.

agent_version_id.gt
Any of:
string

Filter on agent_version_id with the gt operator.

agent_version_id.lt
Any of:
string

Filter on agent_version_id with the lt operator.

agent_version_id.in
Any of:
string

Filter on agent_version_id with the in operator.

campaign_id
Any of:
string

Filter on campaign_id. Comma-separated values are OR.

campaign_id.gte
Any of:
string

Filter on campaign_id with the gte operator.

campaign_id.lte
Any of:
string

Filter on campaign_id with the lte operator.

campaign_id.gt
Any of:
string

Filter on campaign_id with the gt operator.

campaign_id.lt
Any of:
string

Filter on campaign_id with the lt operator.

campaign_id.in
Any of:
string

Filter on campaign_id with the in operator.

created_at
Any of:
string

Filter on created_at. Comma-separated values are OR.

created_at.gte
Any of:
string

Filter on created_at with the gte operator.

created_at.lte
Any of:
string

Filter on created_at with the lte operator.

created_at.gt
Any of:
string

Filter on created_at with the gt operator.

created_at.lt
Any of:
string

Filter on created_at with the lt operator.

created_at.in
Any of:
string

Filter on created_at with the in operator.

kind
Any of:
string

Filter on kind. Comma-separated values are OR.

kind.gte
Any of:
string

Filter on kind with the gte operator.

kind.lte
Any of:
string

Filter on kind with the lte operator.

kind.gt
Any of:
string

Filter on kind with the gt operator.

kind.lt
Any of:
string

Filter on kind with the lt operator.

kind.in
Any of:
string

Filter on kind with the in operator.

phone_number_id
Any of:
string

Filter on phone_number_id. Comma-separated values are OR.

phone_number_id.gte
Any of:
string

Filter on phone_number_id with the gte operator.

phone_number_id.lte
Any of:
string

Filter on phone_number_id with the lte operator.

phone_number_id.gt
Any of:
string

Filter on phone_number_id with the gt operator.

phone_number_id.lt
Any of:
string

Filter on phone_number_id with the lt operator.

phone_number_id.in
Any of:
string

Filter on phone_number_id with the in operator.

state
Any of:
string

Filter on state. Comma-separated values are OR.

state.gte
Any of:
string

Filter on state with the gte operator.

state.lte
Any of:
string

Filter on state with the lte operator.

state.gt
Any of:
string

Filter on state with the gt operator.

state.lt
Any of:
string

Filter on state with the lt operator.

state.in
Any of:
string

Filter on state with the in operator.

Successful Response

Media typeapplication/json
InboxPage

GET /v1/inbox - the merged keyset page (created_at desc, id desc).

object
data
Data
Array<object>
InboxEntry

One row of the merged feed. kind says which durable resource id names.

A single shape rather than a five-member discriminated union: every kind carries the same fields, only their nullability differs by source (an appointment names no line, an anonymous voicemail names no contact), and one shape is what lets the portal render one list component over the whole queue.

object
kind
required
Kind
string
Allowed values: message support_ticket callback appointment voicemail
id
required
Id
string
state
Any of:
string
contact
Any of:
InboxContactRef

The caller, as the inbox names them - enough to render a row, never the full CRM.

object
id
required
Id
string
name
Any of:
string
company
Any of:
string
phone_e164
Any of:
string
call_id
Any of:
string
agent_version_id
Any of:
string
phone_number_id
Any of:
string
created_at
required
Created At
string format: date-time
snippet
Any of:
string
next_cursor
Any of:
string
has_more
Has More
boolean
Example
{
"data": [
{
"kind": "message"
}
],
"has_more": false
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}