Get a form response

GET/api/public/forms/{formId}/response/{responseId}

Get a single submitted form response with its answers. Each answer carries the question label and field type alongside the value, so this alone shows what was asked and what was replied; questions the trainee skipped are absent, so compare with GET /forms/{formId} to see what went unanswered. Trainee personal details and phone number are included only when the key also has trainees:read.

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
responseIdrequiredstring

Request examples

cURL
curl --request GET \
  --url 'https://api.coach-platform.com/api/public/forms/<formId>/response/<responseId>' \
  --header 'Authorization: Bearer cp_live_...'
JavaScript (fetch)
const response = await fetch('https://api.coach-platform.com/api/public/forms/<formId>/response/<responseId>', {
  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>"
  }
}
Response fields (17)
Response fields
NameTypeDescription
dataobject

A submitted form response. Trainee personal details and phone number are included only when the key also has trainees:read; coach private notes are never returned.

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>

Error responses

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 409 Conflict
  • 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.