Voxares
API Reference

Form Submissions

Poll for patient form submission results via the API

Form Submissions

Retrieve the results of digital forms that patients fill out. These read-only endpoints support a polling pattern: periodically check for new or updated submissions using a timestamp filter.

List submissions

GET /form-submissions

Returns a paginated list of form submissions. Supports standard pagination plus additional filters for polling.

Query parameters

ParameterTypeDescription
pageintegerZero-based page index (default 0)
pageSizeintegerItems per page (default 20)
statusstringFilter by status: Pending, Opened, Completed, Rejected
updatedFromstringISO 8601 date. Only submissions updated on or after this time
updatedTostringISO 8601 date. Only submissions updated on or before this time
patientIdstringFilter by patient UUID
formIdstringFilter by form UUID

Response

{
  "data": [
    {
      "id": "submission-uuid",
      "submissionStatus": "Completed",
      "createdAt": "2025-05-20T08:00:00.000Z",
      "updatedAt": "2025-05-20T09:15:00.000Z",
      "receivedAt": "2025-05-20T09:15:00.000Z",
      "requestedBy": "user-uuid",
      "patient": {
        "id": "patient-uuid",
        "firstName": "Ana",
        "lastName": "Horvat",
        "mobileNumber": "+385991234567"
      },
      "form": {
        "id": "form-uuid",
        "displayName": "Patient Intake Form"
      }
    }
  ],
  "count": 1
}
The list response does not include the data field (the patient's actual form answers). Use the detail endpoint below to retrieve it. This keeps polling payloads small, since form answers can contain large base64 signatures.

Get submission detail

GET /form-submissions/:id

Returns a single submission including the full data field with the patient's answers.

Response

{
  "id": "submission-uuid",
  "submissionStatus": "Completed",
  "data": {
    "field1": "answer1",
    "field2": "answer2",
    "signature": "data:image/png;base64,..."
  },
  "createdAt": "2025-05-20T08:00:00.000Z",
  "updatedAt": "2025-05-20T09:15:00.000Z",
  "receivedAt": "2025-05-20T09:15:00.000Z",
  "requestedBy": "user-uuid",
  "patient": {
    "id": "patient-uuid",
    "firstName": "Ana",
    "lastName": "Horvat",
    "mobileNumber": "+385991234567"
  },
  "form": {
    "id": "form-uuid",
    "displayName": "Patient Intake Form"
  }
}

Polling pattern

Use the updatedFrom filter to efficiently poll for new and updated submissions.

Initial poll

Fetch all completed submissions:

curl -X GET "https://api.voxares.com/api/v1/integration/form-submissions?status=Completed" \
  -H "Authorization: Bearer vox-YOUR-API-KEY"

Record the current timestamp (e.g. 2025-05-20T10:00:00Z).

Subsequent polls

Pass the last poll timestamp as updatedFrom to only get submissions that changed since then:

curl -X GET "https://api.voxares.com/api/v1/integration/form-submissions?status=Completed&updatedFrom=2025-05-20T10:00:00Z" \
  -H "Authorization: Bearer vox-YOUR-API-KEY"

For each returned submission, call the detail endpoint to retrieve the full answers:

curl -X GET "https://api.voxares.com/api/v1/integration/form-submissions/submission-uuid" \
  -H "Authorization: Bearer vox-YOUR-API-KEY"
We recommend polling every 1-5 minutes depending on your use case. Use updatedAt (not createdAt) as the polling anchor because submissions move through statuses. A submission created as Pending only becomes Completed later, which updates updatedAt.

Submission statuses

StatusDescription
PendingForm has been sent to the patient but not yet opened
OpenedPatient has opened the form link
CompletedPatient has submitted the form with answers
RejectedSubmission was rejected or expired
Copyright © 2026