Headless Forms

Read Submissions API

Read your form submissions programmatically using authenticated API requests. This is useful for displaying submissions in a custom admin area, syncing data with external tools, or building dashboards.

Authentication

All read endpoints require a Bearer token. Create one from the API Tokens page in your dashboard under the Account section.

Include the token in every request:

Authorization: Bearer your-token-here

Endpoints

List Submissions

GET /api/v1/forms/{form_id}/submissions

Returns a paginated list of submissions for the given form.

Query Parameters

Parameter Default Description
per_page 15 Number of results per page (max 100).
page 1 Page number.
sort created_at_desc Sort order. Use created_at_asc for oldest first.
filter[is_read] Filter by read status (true or false).
filter[marked_as_spam] Filter by spam status (true or false).
filter[created_after] Only include submissions created after this date (YYYY-MM-DD).
filter[created_before] Only include submissions created before this date (YYYY-MM-DD).

Example Request

curl https://headless-form.robertboes.nl/api/v1/forms/01JCK.../submissions?per_page=10&filter[is_read]=false \
  -H "Authorization: Bearer your-token-here"

Example Response

{
  "data": [
    {
      "id": "01JCK...",
      "form_id": "01JCK...",
      "data": {
        "name": "Alex",
        "email": "alex@example.com",
        "message": "Hello!"
      },
      "additional_data": null,
      "is_read": false,
      "marked_as_spam": false,
      "created_at": "2026-02-20T12:00:00+00:00",
      "updated_at": "2026-02-20T12:00:00+00:00"
    }
  ],
  "links": {
    "first": "...?page=1",
    "last": "...?page=3",
    "prev": null,
    "next": "...?page=2"
  },
  "meta": {
    "current_page": 1,
    "last_page": 3,
    "per_page": 10,
    "total": 25
  }
}

Show Submission

GET /api/v1/forms/{form_id}/submissions/{submission_id}

Returns a single submission. The submission must belong to the specified form.

Example Request

curl https://headless-form.robertboes.nl/api/v1/forms/01JCK.../submissions/01JCK... \
  -H "Authorization: Bearer your-token-here"

Example Response

{
  "data": {
    "id": "01JCK...",
    "form_id": "01JCK...",
    "data": {
      "name": "Alex",
      "email": "alex@example.com",
      "message": "Hello!"
    },
    "additional_data": null,
    "is_read": false,
    "marked_as_spam": false,
    "created_at": "2026-02-20T12:00:00+00:00",
    "updated_at": "2026-02-20T12:00:00+00:00"
  }
}

Error Responses

Status Reason
401 Unauthorized Missing or invalid token.
403 Forbidden Token does not have the required ability, or you are not a member of the form's team.
404 Not Found Form or submission does not exist.
429 Too Many Requests Rate limit exceeded (60 requests per minute).

See Error Responses for the standard error format.

Rate Limiting

Read endpoints are rate limited to 60 requests per minute per authenticated user.

JavaScript Example

const API_TOKEN = 'your-token-here';
const FORM_ID = '01JCK...';

const response = await fetch(
  `https://headless-form.robertboes.nl/api/v1/forms/${FORM_ID}/submissions?per_page=20`,
  {
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`,
      'Accept': 'application/json',
    },
  }
);

const { data, meta } = await response.json();
console.log(`Showing ${data.length} of ${meta.total} submissions`);