Messages (v6)

Get messages

Returns a keyset-paginated page of messages (MessageV6) for the user ordered by created_at, optionally scoped to a conversation, wrapped with has_more and next_cursor. Page the first request with date + direction, then keep re-issuing with cursor = next_cursor (same direction) while has_more is true; stop when it is false. Do not infer end-of-results from data.length < limit. With direction=newer the final page still carries next_cursor and an empty page reached via a cursor echoes it back: it marks the newest message seen. Store it and send it as cursor with direction=newer later to receive what is new. While that boundary is recent it is a resume cursor and may also re-deliver up to 4s of already-seen messages behind it; de-duplicate by id. With direction=older next_cursor only continues the backfill and is null once has_more is false. Paging semantics are identical to GET /v5/messages. 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

Request

  • Base URL: https://api.carbonvoice.app
  • URL: https://api.carbonvoice.app/v6/messages
  • 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).

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.