REST API v1 · Resource
Reading
Who is calling, your numbers, and the messages, conversations and contacts in your workspace.
API reference · Reading
Endpoints
Paths are relative to https://fliok.com/api/v1. Each endpoint names the scope and the lowest key role it needs; a key without them gets 403 (see Authentication).
Reading
6- GET
/meWho is calling: your workspace, and the key’s label, role and expiry (never the key itself). The connection test for Zapier, Make and PabblyScopeany key· viewer role or higherNeeds an API key - GET
/messagesList messages, cursor-paginated. Filter by conversationId and statusScopemessages:read· viewer role or higherNeeds an API key - GET
/messages/{id}Get one message and its delivery status — by our id or by wamidScopemessages:read· viewer role or higherNeeds an API key - GET
/conversationsList WhatsApp conversations with contact info and window expiryScopeconversations:read· viewer role or higherNeeds an API key - GET
/contactsList contacts, cursor-paginated. Filter with ?search= (any part of a name or number), ?phone= (one exact number); ?channel=instagram for Instagram customersScopecontacts:read· viewer role or higherNeeds an API key - GET
/phone-numbersYour WhatsApp numbers — the ids phoneNumberId refers toScopeany key· viewer role or higherNeeds an API key
Request bodies
What these endpoints take, field by field. A body that doesn’t match answers 400 naming the field.
GET /messages · GET /contacts · GET /conversations
Query parameters. Newest first; pass the previous page’s nextCursor as cursor until it comes back null. /messages and /contacts page by creation, so a sync never skips a row; /conversations orders by latest activity, so a chat that gets a message while you page can move — sync with /messages instead.
| Field | Type | What it is |
|---|---|---|
limit | number | 1–100, default 50. |
cursor | uuid | The nextCursor of the page before. Anything else is a 400. |
conversationId | uuid | /messages only: one chat’s messages. |
status | string | /messages only: queued, sent, delivered, read, failed or skipped. |
search | string | /contacts only: part of a number, a name or a WhatsApp username. |
channel | string | /contacts only: "instagram" lists Instagram customers (their e164 is "ig:<id>", not a phone). |
Returns 200 { "messages" | "contacts" | "conversations": [ … ], "nextCursor": "<uuid>" | null }. Every contact carries `userId` (their WhatsApp user id) and `username` (their WhatsApp username), null when WhatsApp has sent us neither. A WhatsApp customer whose number is not shared has "wa:<user id>" as e164. An Instagram customer also carries `instagram`: { "igsid", "username" } (null for everyone else).
Examples
# Check what happened to a message (by our id or by the wamid webhooks carry)
curl https://fliok.com/api/v1/messages/wamid.HBgMOTE5ODc2NTQzMjEwFQIAERgS \
-H "Authorization: Bearer wa_YOUR_API_KEY"Rate limits
The buckets these endpoints use. Burst is how many requests you can make back-to-back from a full bucket; sustained is how fast it refills.
| Bucket | Endpoints | Burst | Sustained |
|---|---|---|---|
| Reads | /messages · /conversations · /contacts · /templates · /phone-numbers · GET /webhooks · Instagram reads · GET /payment-requests/{id} | 600 | 60 / sec |
Every limit, the RateLimit-* headers and what to do on a 429: Rate limits.