List inbox
Returns the caller's own messages to the org's connected chat bots — those recorded on the caller's linked account — oldest first, in the portable envelope shape every transport normalises into.
GET /v1/transport/inbox
| Address | https://api.hanzo.ai/v1/transport/inbox |
| Method | GET |
| Operation | get_transport_inbox |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Returns the caller's own messages to the org's connected chat bots —
those recorded on the caller's linked account — oldest first, in the portable
envelope shape every transport normalises into. It is a CURSOR feed, not a
search: pass the returned cursor back as since to get only what has arrived
since. A message is its person's: another member's is never listed, an admin
of the org reads only their own, and one recorded on no account is listed to a
SuperAdmin alone.
Request
2 fields.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
since | query | string | — | Since is the exclusive cursor: only messages with a higher row id come back. |
limit | query | string | — | Limit caps how many messages come back. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | transport.inboxPage | ok |
default | problem-details | refused |
200 body — 12 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
cursor | body | integer (int64) | — | Cursor is the row id to pass back as since for the next page. |
messages | body | transport.inboxView[] | — | Messages are the inbound messages, oldest first. |
messages[].account | body | string | — | Account is the lowercased external id of the org's connected account on that transport: the Discord guild id, the Slack team id, the Teams AAD tenant id, or the bound Telegram chat id. |
messages[].channelId | body | string | — | ChannelID is the conversation on the ORIGINATING transport, and the value to send back as channel.id: a Discord channel snowflake, a Slack conversation id (D… IM, C… public channel, G… private or mpim), a Teams conversation id (19:…@thread.… for a Teams channel or group chat, a:… for a personal chat), or a Telegram chat id in decimal (negative for a group, positive for a DM). |
messages[].channelKind | body | string | — | ChannelKind is how ingest classified the channel: "dm", "group" or "thread". |
messages[].createdAt | body | integer (int64) | — | CreatedAt is Unix SECONDS, stamped by the ingest goroutine when the message was accepted — not the transport's own send time. |
messages[].id | body | integer (int64) | — | ID is the store's row id, assigned on insert — SERVER-SET, and the cursor: pass a page's last id back as since. |
messages[].replyTo | body | string | — | ReplyTo is the transport's reply target for this message: Slack's thread_ts, or the Telegram message id it arrived as. |
messages[].sender | body | string | — | Sender is the TRANSPORT-NATIVE user id of whoever wrote the message — a Discord member.user.id, a Slack U… user id, a Teams aadObjectId (falling back to from.id), a Telegram from.id in decimal. |
messages[].senderUser | body | string | — | SenderUser is the HANZO account subject that chat identity is linked to, resolved at ingest through the org's user link. |
messages[].text | body | string | — | Text is the body as the transport delivered it, with the bot mention already stripped by the ingress adapter (on Discord it is the /hanzo prompt argument, since that ingress is slash commands only), truncated to 8 KiB on store. |
messages[].transport | body | string | — | Transport is the transport this message arrived on — discord, slack, teams or telegram — and the :transport segment to reply through. |
Failure carries the platform error shape — see Errors.
Examples
hanzo transport inboximport { Configuration, TransportApi } from 'hanzoai';
const api = new TransportApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getTransportInbox();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import TransportApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = TransportApi(client).get_transport_inbox()cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.TransportAPI.GetTransportInbox(context.Background()).Execute()
if err != nil {
return err
}use hanzo_client::apis::{configuration::Configuration, transport_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = transport_api::get_transport_inbox(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.TransportApi;
ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));
var result = new TransportApi(client).getTransportInbox();The method above is the one at the current release of the document. [email protected] (npm) and [email protected] (PyPI) were generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. SDKs →
curl https://api.hanzo.ai/v1/transport/inbox \
-H "Authorization: Bearer $HANZO_API_KEY"Tool transport, op get_transport_inbox — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "transport",
"arguments": {
"op": "get_transport_inbox",
"input": {}
}
}
}'