Read rows
/v1/db/{project_id}/{table}Query a table with filters, order, pagination and joins. PostgREST under the hood, RLS applied automatically.
Headers
| Header | Required | Value |
|---|---|---|
apikey | yes | Clé API du projet (anon ou service_role). X-API-Key accepté aussi. |
Authorization | no | Bearer <JWT utilisateur> — sans lui, la requête est traitée en anon |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
select | string | no | Columns to return. * by default. Relationship embed (FK): posts(*), author:authors(name). |
order | string | no | captured_at.desc · name.asc. NULL placement (.nullsfirst/.nullslast) is only honored on MongoDB in its native form (asc.nullsfirst, desc.nullslast); the other two combinations are refused in 400 rather than issuing an order different from that requested. |
limit | integer | no | Max number of lines. Default 1000, max 1000 — beyond that, the response is capped and meta.per_page indicates the limit actually applied. |
offset | integer | no | Paging offset. Only pagination available on PostgREST, the nominal engine of a Postgres project. |
cursor | string | no | aura-db only (MongoDB, or Postgres with PostgREST disabled) — not available on PostgREST, which responds 400 by naming offset. Pagination keyset: return the opaque meta.next_cursor of the previous page as is. Stable, without dup/skip (int/uuid/text). Aligns with sort_by. |
count | enum | no | exact or estimated. No counting is done by default. This is the portable form: on the aura-db path, only this query parameter is read — a Prefer: count=exact header there would be ignored (it is only honored by PostgREST). |
<column>.<op> | filter | no | Filters: value.gt.24, status.eq.active, name.like.%alice%, tags.cs.{urgent}. |
To know
Relationship embed (FK) via select: author:authors(name) (LEFT JOIN — rows without relationships return null). Inner-join !inner filtering is not yet supported.
The Range header is not a universal alternative paging: the aura-db path (MongoDB project, or Postgres with PostgREST disabled) only reads the query parameters and simply ignores it. It only has effect if the request reaches PostgREST. Use limit/offset.
The answer is wrapped : { data, meta }, never a bare array. On the PostgREST path, meta only contains total (and only if a count has been requested); on the aura-db path it also carries per_page and next_cursor.
numeric/decimal columns are returned as string (e.g. "19.99") to preserve exact precision — scalars AND arrays. Parse client side (Number(), Decimal) before any calculation; do not type number.