List responses to a form

GET/api/public/forms/{formId}/responses

List submitted responses for a form, newest first. Trainee personal details and phone number are included only when the key also has trainees:read; coach private notes are never returned.

Authentication

Requires an API key, sent as Authorization: Bearer cp_live_....

API keys carry scopes. Get the catalog of scopes and webhook events lists every scope.

Path parameters

Path parameters
NameTypeDescription
formIdrequiredstring

Query parameters

Query parameters
NameTypeDescription
traineeIdstring

Only responses submitted by this trainee. Use it to read one trainee's answers directly instead of searching by name.

statusstring

Filter by handling status.

Allowed values: Pending Handled

searchstring

Search the trainee name.

dateFromstring

Only responses submitted on or after this date (YYYY-MM-DD).

dateTostring

Only responses submitted on or before this date (YYYY-MM-DD).

pageinteger

Page number (1-based, default 1)

Minimum: 1

limitinteger

Number of items to return (default 25, max 500)

Minimum: 1

Maximum: 500

Request examples

cURL
curl --request GET \
  --url 'https://api.coach-platform.com/api/public/forms/<formId>/responses' \
  --header 'Authorization: Bearer cp_live_...'
JavaScript (fetch)
const response = await fetch('https://api.coach-platform.com/api/public/forms/<formId>/responses', {
  method: 'GET',
  headers: {
    Authorization: 'Bearer cp_live_...',
  },
});

const data = await response.json();

Responses

200 OK

Successful response

Example body (application/json)
{
  "data": [
    {
      "id": "<string>",
      "form": {
        "id": "<string>",
        "title": "<string>",
        "type": "<string>"
      },
      "trainee": {
        "id": "<string>",
        "fullName": "<string>"
      },
      "responses": [
        {
          "field": "<string>",
          "label": "<string>",
          "fieldType": "<string>"
        }
      ],
      "status": "Pending",
      "type": "update",
      "createdAt": "<date-time>",
      "updatedAt": "<date-time>"
    }
  ],
  "pagination": {
    "page": 123,
    "limit": 123,
    "total": 123,
    "hasMore": true,
    "truncated": true
  }
}
Response fields (23)
Response fields
NameTypeDescription
dataobject[]
data[].idstring
data[].formobject

The form this response belongs to.

data[].form.idstring
data[].form.titlestring
data[].form.typestring
data[].traineeobject

The trainee who submitted the response.

data[].trainee.idstring
data[].trainee.fullNamestring
data[].responsesobject[]

The submitted answers, one entry per form field.

data[].responses[].fieldstring

Field id from the form definition.

data[].responses[].labelstring

Field label shown to the trainee.

data[].responses[].fieldTypestring

Field type, e.g. text, number, file.

data[].statusstring

Whether the coach has handled this response.

Allowed values: Pending Handled

data[].typestring

Whether this is a periodic update or a registration submission.

Allowed values: update registration

data[].createdAtstring<date-time>
data[].updatedAtstring<date-time>
paginationobject
pagination.pagenumber
pagination.limitnumber
pagination.totalnumber | null

Total number of matching items. null when the underlying source cannot report an exact count for this page; use hasMore to keep paging.

pagination.hasMoreboolean
pagination.truncatedboolean

Present and true when the result set exceeded the in-memory scan cap and was truncated. Narrow your filters to page through all items.

Error responses

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 429 Too Many Requests
  • 500 Internal Server Error

These statuses share the same response body.

Example body (application/json)
{
  "error": {
    "code": "<string>",
    "message": "<string>",
    "fix": "<string>",
    "details": {},
    "retryAfterMs": 123
  }
}
Error fields (6)
Error fields
NameTypeDescription
errorobject
error.codestring
error.messagestring
error.fixstring | null
error.detailsobject | null
error.retryAfterMsnumber | null

This page is also available as Markdown. Browse it in the interactive explorer or download the OpenAPI spec.