---
title: "List contacts"
method: GET
path: "/api/v1/contacts"
tags: ["contacts"]
---

# List contacts

`GET /api/v1/contacts`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/contacts`
- Auth: HTTP bearer

Cursor-paginated contact list with tag, group and free-text filters.

Filter with ?tag=, ?group_id= and ?q= (e.g. ?tag=vip&q=sam). Repeat tag= for AND semantics: ?tag=vip&tag=launch returns contacts carrying both.

group_id filters to one contact group's members; combine freely with tag= and q=.

q= is a best-effort substring match over first/last name, email and phone, not a ranked search.

Filter by ?business_id= when syncing one managed business at a time.

Page with ?limit= (max 200, default 50) and ?cursor= (the previous page's next_cursor).

Always page with next_cursor: the compound (created_at, id) cursor never skips rows that share a timestamp.

## Query parameters

- `tag` string
- `group_id` string
- `q` string
- `limit` integer
- `cursor` string

## Response `200`

Success

- object
  - `data` object[], required
    - `id` string, uuid, required
    - `business_id` string, uuid, nullable, required
    - `first_name` string, nullable, required
    - `last_name` string, nullable, required
    - `phone` string, nullable, required
    - `email` string, nullable, required
    - `tags` string[], required
    - `channels` object, required
      - `has_whatsapp` boolean, required
      - `whatsapp_opted_in_at` string, date-time, nullable, required
      - `has_sms` boolean, required
      - `sms_opted_in_at` string, date-time, nullable, required
      - `has_email` boolean, required
      - `email_opted_in_at` string, date-time, nullable, required
      - `email_optin_status` string, required
    - `custom_fields` object, required
    - `suppressed` boolean, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `next_cursor` string, required
  - `has_more` boolean, required
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
