Messages (v6)

Get message updates

Returns a keyset-paginated page of messages (MessageV6) for the user ordered by last_updated_at — surfaces messages that were recently created or changed (e.g. edited, labeled), not just newly created ones — optionally scoped to a conversation, wrapped with has_more and next_cursor. Paging semantics are identical to GET /v5/messages/updates: anchor the first page with date + direction, then follow cursor = next_cursor while has_more is true, and de-duplicate by id. Send include_unchanged_content=false to skip content the client already has: with direction=newer, a message whose content has not changed since the sync began (the date anchor, or the cursor stored from the previous sync) is then returned without content, since only its core fields and the requesting user's state changed; keep the content already held for that id. A missing content on this route never means the content was removed. MessageV6 differs from v5 in three ways: thread_id (the parent id, or the message id itself when it is not a reply) replaces parent_message_id; the audio rendition and its transcript, AI summary, language flags and time codes are nested under content, with the waveform as a compact base-36 string; and the requesting user's own state (heard_ms, label_ids, notify, notes, last_heard_update) is included where the read path carries it.

get/v6/messages/updates

Request

  • Base URL: https://api.carbonvoice.app
  • URL: https://api.carbonvoice.app/v6/messages/updates
  • Auth: one of:
    • API key in header pxtoken
    • OAuth 2 (implicit, authorization URL https://api.carbonvoice.app/oauth/authorize)

Query parameters

datestring date-time

Anchor date to page from (older/newer than this instant). Required for the first page; omit it on subsequent pages and pass cursor instead. Ignored when cursor is provided.

cursorstring

Opaque pagination cursor returned as next_cursor from a previous response. When provided, it supersedes date. A cursor issued while has_more was true continues strictly from the last message of the previous page (no overlap). The cursor a final direction=newer page issues marks the newest message seen: sent back later it returns what was created or changed since, and may include up to 4s of already-seen messages behind that boundary while it is recent, so a message whose write landed late is not lost; de-duplicate by id. A quiet feed converges to an empty page. Keep direction the same across a cursor sequence.

direction'older' | 'newer' required
limitnumber

Maximum number of messages to return (default: 200).

conversation_idstring

Conversation (channel) ID to scope the results to. User must have access to this conversation.

languagestring

Language for message content (e.g. transcript, audio). Original language used if not provided.

presigned_urlboolean

Include presigned URLs for audio files (default: false).

include_unchanged_contentboolean

Return content on every message (default: true). Send false to omit it, with direction=newer, from messages whose content has not changed since the sync began (the date anchor, or the cursor stored from the previous sync): only their core fields and the requesting user's state are returned, so keep the content already held for that id.

Response

has_moreboolean required

True when more messages remain beyond this page. When false, the client has reached the end of the result set for this direction.

next_cursorstring nullable

Opaque cursor marking where this page ended. While has_more is true, pass it back as cursor (same direction) to fetch the next page; it pages strictly, with no overlap. With direction=newer it is also returned on the final page (has_more false) and echoed back by an empty page reached via a cursor: that one marks the newest message seen. Store it and send it as cursor with direction=newer on a later sync to receive what was created or changed since. While the boundary is recent it is a resume cursor and may also re-deliver up to 4s of already-seen messages behind that boundary, so de-duplicate by id. Once the boundary has settled it pages strictly, so a quiet feed returns empty pages. With direction=older it only continues the backfill and is null once has_more is false. Null on an empty first page (anchored by date); anchor by date again.

Changes

No recorded changes to this operation across all 1 revision of this API.