Skip to main content
GET
List responses

Authorizations

next-auth.session-token
string
cookie
required

NextAuth session JWT cookie. Development: often next-auth.session-token. Production (HTTPS): often __Secure-next-auth.session-token. Send the cookie your browser receives after sign-in.

Query Parameters

workspaceId
string<cuid2>
required

Workspace identifier. This is the canonical container ID for v3 APIs.

limit
integer
default:20

Page size. A value above the maximum is rejected with 400 rather than silently reduced to it — v3 rejects unusable input instead of substituting its own, the same way it rejects unrecognized query parameters. The server may still return fewer items than requested, so treat meta.nextCursor as the only end-of-collection signal rather than comparing the page length against limit.

Required range: 1 <= x <= 250
cursor
string

Opaque cursor returned as meta.nextCursor from the previous page. Omit on the first request.

surveyId
string<cuid2>

Optional survey scoping. Single-valued deliberately: an [in] form would defeat the ordered index scan that makes this the fast path.

contactId
string<cuid2>

Optional contact scoping. Returns only responses submitted by this contact.

includeTotalCount
boolean
default:false

Whether to compute meta.totalCount. Defaults to false here, unlike the survey list, because responses are the highest-cardinality table in the product and the extra count is not free at that size. When false, both meta.totalCount and meta.totalCountRelation are null.

When true, the count is capped at 10 000 and meta.totalCountRelation says whether the figure is exact (eq) or a lower bound (gte). If all you need is the count, use GET /api/v3/responses/count rather than fetching a page to get it — and if you need an exact figure beyond the cap, that endpoint takes an explicit precision=exact.

filter[createdAt][gte]
string<date-time>

Only records created at or after this instant (inclusive). Mutually exclusive with filter[createdAt][gt] — sending both is a 400.

filter[createdAt][gt]
string<date-time>

Only records created strictly after this instant (exclusive). Paired with filter[createdAt][lt] this is a fully open (start, end) window. For a half-open [start, end) window — the one whose consecutive pages tile without dropping a record that sits exactly on a boundary instant — use filter[createdAt][gte] with filter[createdAt][lt]. Mutually exclusive with filter[createdAt][gte] — sending both is a 400.

filter[createdAt][lte]
string<date-time>

Only records created at or before this instant (inclusive). Mutually exclusive with filter[createdAt][lt] — sending both is a 400.

filter[createdAt][lt]
string<date-time>

Only records created strictly before this instant (exclusive). The upper bound of a half-open [start, end) window, which is what makes consecutive windows tile without overlapping or dropping a record on the boundary. Mutually exclusive with filter[createdAt][lte] — sending both is a 400.

filter[finished][eq]
boolean

Completed (true) or partial (false) responses only. Omit for both. Requires surveyId or contactId.

filter[language][in]
string[]

Survey language codes to include. Repeat the parameter or use comma-separated values. Values are survey language codes rather than BCP-47 locales — default is legitimate. Requires surveyId or contactId.

filter[id][in]
string<cuid2>[]

Fetch a specific set of responses by id, at most 100 per call. Ids outside the requested scope are simply absent from the result rather than erroring, so this cannot be used to probe whether an id exists elsewhere.

Maximum array length: 100
sortBy
enum<string>
default:-createdAt

Sort order. -createdAt (newest first) is the default; createdAt sorts oldest first, which is what a consumer doing an incremental backfill wants. The leading - marks descending.

updatedAt is not offered: it has no index, no product usage, and being mutable it cannot anchor a keyset cursor.

Available options:
-createdAt,
createdAt

Response

Responses retrieved successfully

data
object[]
required
meta
object
required

The list meta for responses — pagination plus a bounded, opt-in total. Both counting fields are required but nullable, so includeTotalCount=false answers null rather than omitting them.