List contacts
GET /contacts
Returns customer contacts for one shop (shop_id) or all your shops,
sorted by creation date descending, with visit, order, opt-in and
loyalty information.
Requires the contacts:read scope.
Returns a data array of up to limit contacts and a
pagination object. Fetch the next page by passing
pagination.next_cursor back as cursor, until has_more is
false. data is empty when nothing matches the filters.
Contacts are unique per shop and phone number; sources lists every
channel that collected the contact, and has_loyalty flags loyalty
program members. For a full export, paginate until has_more is
false: cursor pagination guarantees every contact is returned exactly
once even while new ones are being created.
Example request
curl "https://api.dokaa.app/v1/contacts" \
-H "Authorization: Bearer dk_live_..."Query parameters
shop_id(string) – Restrict to a single shop (omit to query all your shops)source(string) (one of: apitic, zenchef, genlog, zelty, unknown, game, loyalty, fork, imported, manual, campaign, yavin, deliverect, audience) – Filter by the source that collected the contactsms_optin(boolean) – Filter by SMS opt-in statusfrom(string) (format: date) – Only contacts created on or after this dateto(string) (format: date) – Only contacts created on or before this datecursor(string) – Opaque cursor from the previous response’spagination.next_cursorlimit(integer) (default: 25; min: 1; max: 100) – Number of items per page
Responses
200 – Paginated list of contacts
{
"data": [
{
"id": "66c3d4e5f6a7b8c9d0e1f2a3",
"shop_id": "64f1a2b3c4d5e6f7a8b9c0d1",
"phone": "+33612345678",
"firstname": "Marie",
"lastname": "Dupont",
"gender": "female",
"emails": [
"marie.dupont@example.com"
],
"birthdate": "1990-04-12T00:00:00.000Z",
"sources": [
"loyalty",
"campaign"
],
"total_visits": 14,
"last_visit_date": "2026-07-20T19:42:00Z",
"total_order_amount": 412.5,
"last_order_date": "2026-07-20T19:42:00Z",
"sms_optin": true,
"sms_blacklisted": false,
"has_loyalty": true,
"created_at": "2025-11-03T12:00:00Z"
}
],
"pagination": {
"next_cursor": null,
"has_more": false
}
}401 – Missing, invalid, or revoked API key
403 – The API key does not grant access to this resource
422 – Invalid request parameters
Errors are application/problem+json (RFC 9457) with type, title, status and detail fields.