Query Syntax
The Analytics API is a PostgREST interface. Almost the full PostgREST query syntax is supported - filtering, column selection, ordering, pagination and counting all behave as documented upstream. Consult the PostgREST API reference for the complete grammar.
Filters take the form ?column=operator.value and combine with & as AND.
Examples
1. Select only the columns you need
curl "https://taa.data.tidio.com/agent_details?select=agent_id,agent_name,agent_email&limit=10" \
-H "X-Tidio-Openapi-Client-Id: $TIDIO_CLIENT_ID" \
-H "X-Tidio-Openapi-Client-Secret: $TIDIO_CLIENT_SECRET"2. Filter on a date range - repeat the column to build a bounded window
curl "https://taa.data.tidio.com/ticket_details?created_at=gte.2026-08-01T00:00:00Z&created_at=lt.2026-08-19T00:00:00Z&limit=1000" \
-H "X-Tidio-Openapi-Client-Id: $TIDIO_CLIENT_ID" \
-H "X-Tidio-Openapi-Client-Secret: $TIDIO_CLIENT_SECRET"3. Compare values, match a set, or test for null
curl "https://taa.data.tidio.com/ticket_details?solved_at=is.null&priority=in.(high,urgent)&limit=100" \
-H "X-Tidio-Openapi-Client-Id: $TIDIO_CLIENT_ID" \
-H "X-Tidio-Openapi-Client-Secret: $TIDIO_CLIENT_SECRET"4. Case-insensitive text search - * is the wildcard, not %
curl "https://taa.data.tidio.com/lyro_suggestion_details?question=ilike.*how*&limit=100" \
-H "X-Tidio-Openapi-Client-Id: $TIDIO_CLIENT_ID" \
-H "X-Tidio-Openapi-Client-Secret: $TIDIO_CLIENT_SECRET"5. Combine filters, sorting and a limit
curl "https://taa.data.tidio.com/lyro_thread_details?select=thread_id,thread_started_at,thread_resolution&thread_started_at=gte.2026-08-01T00:00:00Z&ind_thread_transferred_to_agent=eq.1&order=thread_started_at.desc&limit=500" \
-H "X-Tidio-Openapi-Client-Id: $TIDIO_CLIENT_ID" \
-H "X-Tidio-Openapi-Client-Secret: $TIDIO_CLIENT_SECRET"Columns can also be renamed in the response (select=id:agent_id), sorted on several keys with explicit null placement (order=period_date.desc,avg_satisfaction_rate.asc.nullslast) and combined with OR groups (or=(priority.eq.high,priority.eq.urgent)). See the PostgREST reference for the full grammar.
Operators
| Operator | Meaning | Example |
|---|---|---|
eq / neq | equals / not equals | status=eq.solved |
gt / gte | greater than / or equal | created_at=gte.2026-08-01 |
lt / lte | less than / or equal | avg_satisfaction_rate=lt.3 |
like / ilike | pattern match, * wildcard | subject=ilike.*refund* |
in | one of a list | priority=in.(high,urgent) |
is | null, true, false | solved_at=is.null |
not. | negates the operator | solved_at=not.is.null |
or=(…) | OR group | or=(a.eq.1,b.eq.2) |
Not supported
Resource embedding. PostgREST's join syntax - select=ticket_id,ticket_message_details(message_content) - does not work. The endpoints are views without declared foreign keys, so there are no relationships to traverse:
{"detail": {"code": "PGRST200", "message": "Could not find a relationship between …"}}Join the data yourself after extracting it, using the shared id columns (ticket_id, thread_id, visitor_id, agent_id).
Writes. The API is strictly read-only. POST, PATCH, PUT and DELETE all return 405 Method Not Allowed.
Two behaviours worth knowing
Indicator columns are numeric, not boolean. Columns named ind_*, and a few others such as used_by_lyro, hold 0 or 1 as numbers. Using is.true on them fails:
# Fails: argument of IS TRUE must be type boolean, not type numeric
curl "https://taa.data.tidio.com/agent_thread_details?ind_missed_thread=is.true&limit=10" ...
# Correct
curl "https://taa.data.tidio.com/agent_thread_details?ind_missed_thread=eq.1&limit=10" ...An invalid limit is ignored, not rejected. ?limit=abc returns the full unbounded result set rather than an error - which then risks a 408. Always make sure your limit is a number.
Updated about 2 hours ago