The Natiq REST API gives you the same access the dashboard has: read and work conversations, manage contacts and audiences, connect channels, run agents and campaigns, and administer your organisation. It speaks JSON over HTTPS.
Base URL
Every path in this reference is relative to:
https://api.cx.na6iq.com/api/v1So GET /contacts means GET https://api.cx.na6iq.com/api/v1/contacts. Your organisation is taken from your access token, so it never appears in a path.
Authentication
Sign in to get an access token, then send it as a bearer token on every request.
Call
POST /auth/loginwith your email and password. Sign-in, registration and the password and invitation routes are the only calls that take no token.Read
accessTokenfrom the response.Send
Authorization: Bearer <accessToken>with every other request.
curl -X POST "https://api.cx.na6iq.com/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{ "email": "omar@example.com", "password": "<YOUR_PASSWORD>" }'{
"accessToken": "<ACCESS_TOKEN>",
"tokenType": "Bearer",
"orgId": 12,
"userId": 214,
"email": "omar@example.com",
"expiresInHours": 24
}A token is valid for expiresInHours (24 by default). There is no refresh endpoint: when a call answers 401, sign in again. POST /auth/logout ends the session whose token you send, and revokes the token on the server.
Keep tokens out of source code
A token acts as the person who signed in, with all of their permissions. Store it in an environment variable or a secrets manager, never in a repository, a URL or a log.
Permissions
A token can do only what its user’s roles allow. Each endpoint in this reference names the permission key it needs, such as contacts:read or liveagent.tickets:assign. Calling an endpoint without it answers 403 with the code ACCESS_DENIED. See Errors.
Conventions
- JSON in, JSON out. Send
Content-Type: application/json. Field names arecamelCase. - Timestamps are ISO 8601 instants in UTC, such as
2026-11-06T09:41:12Z. - IDs are integers. They are unique within a kind of object, not across kinds: a contact and a segment can both be
12. - Empty values. A field documented as nullable comes back as
nullwhen it has no value. A few optional fields are left out of a response entirely when they do not apply. - Serialised JSON strings. Some fields carry a JSON document inside a string, such as
configJsonon a channel,expressionsJsonon a segment andflowJsonwhen publishing an agent. In responses you parse them yourself; in a request, send the string. The one exception iscontentJsonwhen you send a message, which takes a real JSON value. - Query arrays repeat the key (
?status=OPEN&status=PENDING), and empty values are dropped. - Lists are either paginated or returned as a plain array. Each endpoint says which; see Pagination.
- Errors share one envelope with a stable
codeto branch on. See Errors.