Skip to main content
POST

Mark a conversation read

Method: POST | Endpoint: /v1/conversations/{conversation_id}/read Description: Mark every message you’ve received in a conversation as read, and send the contact a read receipt: on iMessage they see Read under their latest message. It works on the whole conversation at once, because that’s how read receipts work on iMessage and RCS. See Tapbacks, read receipts and typing. Authentication: API key in the Authorization header: Authorization: Bearer ib_pk_<64 hex>. Create keys in the dashboard under Settings → API access. Rate limit: 300 conversation actions per 60 seconds per account, shared with tapbacks and typing. Over that, 429 rate_limited with a Retry-After header; see Rate limits.

Request Body

None. The path parameter conversation_id is the conversation’s ID (a UUID): conversation_id on every message and on every message.* webhook.

How it behaves

  • The messages are marked read in iBubbl. The conversation’s unread badge clears in the dashboard too, for your whole team.
  • A receipt goes out only when there’s something new. read_receipt: "queued" means the contact will see Read within a few seconds. "skipped" means no receipt goes out, and read_receipt_skipped_reason says why.
  • Never in a group, and never to a blocked or opted-out contact. The messages are still marked read in iBubbl.
  • Read receipts are on by default. To turn them off for your account, email support@ibubbl.com; calls then answer skipped with receipts_off.
  • It’s safe to call twice. A second call with nothing new answers 200 with marked_count: 0.

Responses

200 OK
401 Unauthorized
Other message values: Authorization Bearer token required, API key required (use Authorization: Bearer ib_pk_…), Invalid API key format, Customer account not found. 403 Forbidden
Your iBubbl account is suspended or cancelled (message is then Account is cancelled). Every API-key endpoint returns this. 404 Not Found
Also returned for a malformed ID and a conversation that belongs to another account. 429 Too Many Requests
Wait the Retry-After header’s seconds, then send the same request again.

Authorizations

Authorization
string
header
required

Bearer API key. Format: Authorization: Bearer ib_pk_<64 hex> (70 characters). Generate keys from Dashboard → Settings → API Access.

Path Parameters

conversation_id
string
required

Response

Marked read.

conversation_id
string
required

The conversation.

marked_count
integer
required

How many received messages this call marked read (0 if they already were).

read_receipt
enum<string>
required

queued: the contact will see "Read" (iMessage, and RCS on Android). skipped: no receipt goes out; see read_receipt_skipped_reason.

Available options:
queued,
skipped
read_receipt_skipped_reason
enum<string> | null
required

Why no receipt: nothing_unread (nothing new since the last read), receipts_off (read receipts are off for your account), group (never sent in group conversations), contact_blocked, contact_opted_out, or opt_out_check_unavailable (the opt-out couldn't be checked, so none was sent). Null when queued.

Available options:
nothing_unread,
receipts_off,
group,
contact_blocked,
contact_opted_out,
opt_out_check_unavailable