Skip to main content
GET

List contacts

Method: GET | Endpoint: /v1/contacts Description: List your contacts, newest first, with their tags, opt-out and block state. Search by name, email or phone, or filter by tag, opt-out or block. Deleted contacts are never listed. Authentication: API key in the Authorization header: Authorization: Bearer ib_pk_<64 hex>. Create keys in the dashboard under Settings → API access.

Query parameters

All optional. Filters combine with AND. Any other query parameter, or one given twice, returns 422 validation_error naming it. A misspelt startingAfter is refused instead of quietly returning the first page again. A filter that matches nothing returns an empty page, including a tag you don’t have. A contact deleted since you received it is no longer a valid starting_after (422 invalid_cursor): restart from the first page. Rate limit: 120 list requests per 60 seconds per account, across all your API keys and all list endpoints. Over that, you get 429 rate_limited with a Retry-After header; see Rate limits.

Responses

200 OK data holds up to limit contacts, newest first: by created_at (when the contact was created), then by id for contacts created in the same microsecond. Each item is exactly what Retrieve a contact returns for that contact. has_more is true when more contacts match; to get them, repeat the request with starting_after set to the id of the last item in data. An empty data comes with has_more: false.
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. 422 Unprocessable Entity
validation_error: a query parameter is unknown, repeated or invalid (limit outside 1–100, a starting_after that isn’t a UUID, opted_out or blocked other than true / false, an empty or over-long search or tag, or a search with nothing left to match once ", \ and * are removed). invalid_cursor: starting_after is a UUID but not the ID of one of your contacts, or that contact has been deleted. 429 Too Many Requests
Your account made more than 120 list requests in the last 60 seconds. Retry-After is the number of whole seconds until the oldest of them stops counting. Wait that long, then send the same request again; the refused request didn’t count. The limit is checked after the API key, so a bad key is still 401.

Authorizations

Authorization
string
header
required

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

Query Parameters

limit
integer
default:50

How many items to return, 1 to 100. Defaults to 50.

Required range: 1 <= x <= 100
starting_after
string<uuid> | null

The id of the last item on the page you already have. Returns the items that come after it, in the same order. Leave it out for the first page. An id that isn't one of yours returns 422 invalid_cursor. A contact deleted since is no longer a valid cursor.

search
string | null

Only contacts matching every word, case-insensitively, as part of the first name, last name, email or phone number: sam rivera finds Sam Rivera. A word written like a phone number also matches by its digits, so 415-555-1234 finds +14155551234. The characters ", \ and * are ignored. Up to 100 characters.

Required string length: 1 - 100
opted_out
boolean | null

true: only opted-out contacts. false: only the others.

blocked
boolean | null

true: only blocked contacts. false: only the others.

tag
string | null

Only contacts with this tag, matched trimmed and case-insensitively (vip matches VIP).

Required string length: 1 - 64

Response

A page of contacts.

data
Contact · object[]
required

Up to limit contacts, newest first: by created_at, then by id for contacts created in the same microsecond.

has_more
boolean
required

Whether more contacts match after the last one in data. To get them, repeat the request with starting_after set to that contact's id.