cursor. Send that cursor unchanged to read the next page. Keep following cursors until it is null or absent.
Choose the collection
All four endpoints below acceptlimit from 1 to 100, with a default of 20.
Use contact lookup or Bridge User lookup when you need one known person. A full list sweep is a different task.
Server-side example
This example reads Contacts. Save it aslist-contacts.mjs and set BRIDGE_API_KEY and BRIDGE_WORKSPACE_ID on your server.
The local maxPages guard prevents an accidentally unbounded run; it is not a Bridge API limit. The repeated-cursor guard stops and reports a problem rather than silently returning an incomplete list.
pages("conversations", "conversations", { status: "ACTIVE" }), pages("users", "users"), or pages("agents", "agents") with the corresponding contract. Keep the same filters throughout one traversal.
Do not stop on a short page
A page containing fewer records thanlimit can still have another page. The Agents endpoint explicitly documents this behavior. The returned cursor is the continuation signal; collection length is not.
Treat the cursor as opaque. Do not decode it, increment it, or build one yourself. URL.searchParams in the example preserves its value through URL encoding.
Filters and rate limits
- The Contact list’s
ownerEmailandsearchfilters are deprecated. For a known email or phone, use contact lookup. To filter an inventory byownerId, read that field from the returned rows in your own code. - The Bridge User list’s
emailandstatusfilters are deprecated. Use lookup for a known email, or inspect each returned User’sstatus. - Each page request consumes the workspace’s shared request budget. Follow Rate limits, including
Retry-Afteron429. This minimal example stops on non-200 responses instead of retrying automatically.

