Pagination
List endpoints return results one page at a time, in a stable order, with an opaque cursor for the next page.
{
"data": [ { "id": "4cbfdb50-6b7d-45d4-94b3-05a52ce3f4d1", "...": "..." } ],
"pagination": {
"next_cursor": "eyJpZCI6IjRjYmZkYjUwIn0",
"has_more": true
}
}Parameters
page[limit]integerNumber of records to return. Defaults to 50, maximum 100.
page[after]stringThe next_cursor from the previous page. Omit it for the first page.
Response fields
dataarrayRequiredThe records on this page, in stable order.
pagination.next_cursorstring or nullRequiredPass as page[after] to get the next page. null on the last page.
pagination.has_morebooleanRequiredWhether another page may exist. A page with no records always has has_more: false, except when partial is true.
pagination.partialbooleanOnly on a filtered message read (q) that ran out of time, about 2 seconds, before finding a match. data is empty but the range isn’t finished: follow next_cursor. This is the only case where an empty page isn’t the end. Absent otherwise.
A filtered read keeps looking until its page has at least one match or the range runs out, so a sparse search doesn’t hand you empty pages. A page with matches can still be shorter than page[limit], with has_more: true; keep following the cursor.
Ordering
Each list endpoint documents its order. Messages are newest first unless you pass order=asc, and group_by=conversation groups them by conversation. Conversations are ordered by latest activity, and members by name. Ties break on ID.
A cursor keeps the order your first request saw, so you can retry a page safely. You never skip or repeat records, even when new messages arrive while you page.
Fetch every page
cURL
curl -g "https://api.bloomtext.com/v1/patient-messages?after=2026-09-21&page[limit]=100&page[after]=eyJpZCI6IjRjYmZkYjUwIn0" \
-H "Authorization: Bearer $BLOOMTEXT_API_KEY"Tips
- Treat cursors as opaque. Don’t parse, build, or store them long-term. A cursor is valid for 24 hours.
- Request large pages.
page[limit]=100uses fewer requests against your rate limit. - Follow new messages with
after, not cursors. Request again withafterset to the newest message you’ve seen. See Read messages.