List Many Submissions

GET/v1/forms/{form_id}/submissions

Retrieves multiple submissions for a specified form.

Pagination

This endpoint supports two pagination strategies:

Offset-based pagination

  • Use limit and offset to navigate through pages

Cursor-based pagination

  • Use cursor with the ID of the last submission from the previous page
  • You may set offset=1 to exclude the cursor submission from results
  • Provides consistent results even when new submissions are received

Note: When using search, offset is limited to 1. Use cursor-based pagination to navigate through search results.

Authorization

x-api-key x-team-id
x-api-key<token>

In: header

x-team-id<token>

In: header

Path Parameters

form_id*string

Query Parameters

limit?integer

Maximum number of submissions to return.

offset?integer

Number of submissions to skip. Limited to 1 when using search.

cursor?string

Submission ID to use as the starting point for pagination (inclusive).

Use cursor-based pagination when:

  • Navigating through search results
  • Working with large datasets
  • You need consistent results across pages

To get the next page, use the id of the last submission from the current page.

Set offset=1 to exclude the cursor submission itself from results.

sort?|

Sort order by creation date (created_at).

  • DESC: Newest submissions first (default)
  • ASC: Oldest submissions first
search?string

Search term to filter submissions.

Performs substring matching (case-insensitive) across submission data.

When provided, offset-based pagination is limited to 1. Use cursor-based pagination to navigate through search results.

Response Body

application/json

application/json

application/json

fetch("https://example.com/v1/forms/{form_id}/submissions", {  method: "GET",  headers: {    "x-api-key": "...",    "x-team-id": "..."  }})
{  "results": [    {      "id": "string",      "country": "string",      "ip": "string",      "user_agent": "string",      "referer": "string",      "data": {        "name": "John Doe",        "email": "test@vexrun.com",        "message": "Hello!",        "age": 30,        "rating": 4.5,        "subscribed": true,        "address": {          "city": "Warsaw",          "country": "Poland"        },        "tags": [          "support",          "billing"        ],        "languages": [          {            "code": "pl",            "level": "native"          },          {            "code": "en",            "level": "fluent"          },          {            "code": "de",            "level": "beginner"          }        ]      },      "files": [        {          "id": "string",          "field_name": "string",          "size": 0,          "mime_type": "string",          "ext": "string"        }      ],      "created_at": 0    }  ],  "total": 0}
{  "errors": [    {      "path": "string",      "expected": "string"    }  ],  "message": "string"}
{  "message": "string"}

Create Submission POST

Submits data to a form. View [examples](/examples). ### Request Formats This endpoint accepts submissions in two formats: - **application/json** - **multipart/form-data** #### Special Handling for multipart/form-data - If a field named `$` is present, all other non-file fields are ignored. - If `$` contains a valid stringified JSON object, it will be parsed and used as the submission data. - If `$` contains any other value, it will be ignored. ### Common Errors We have separated common errors to `422` (`303` if you are using `Accept: text/html`) response to help you better handle them. Here is a breakdown of all common error codes: | Code | Description | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | file_storage_limit_reached | Your team has reached its file storage limit. | | form_disabled | The form is currently disabled. You can enable or disable the form in the dashboard or by using this [endpoint](/http-api/forms/update-form). | | no_data | No data was submitted. | | rate_limit | The rate limit has been exceeded. Please wait at least 10 seconds before submitting another form from the same IP address. | | submission_limit_reached | Configured form **limit** has been reached or your team has reached the total submission limit counted across all forms it owns. | | validation_error | The submission did not pass validation. (Reserved for future use.) | ### Submission Data Limits The following limits apply to all submissions. Any submission that exceeds a limit will be rejected with a 413 Payload Too Large error. | Limit | Max Value | Description | | ----------------- | --------- | ---------------------------------------------------------------------------- | | Field Name | 100 B | Maximum length of a field name (JSON key or **name** attribute in an input). | | Property Count | 1000 | Maximum number of fields/properties per submission. | | File Count | 10 | Maximum number of files that can be uploaded in a single submission. | | Submission Size | 100 KB | Maximum total size of all non-file data after being stringified as JSON. | | File Upload Limit | 100 MB | Combined size limit for all uploaded files per submission. |

Get Submission GET

Get form submission by ID.