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.

Default100
Range1 <= value <= 500
offset?integer

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

Default0
Range0 <= value
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.

Length24 <= length <= 24
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.

Length1 <= length <= 100

Response Body

application/json

application/json

application/json

fetch("https://example.com/v1/forms/string/submissions", {  method: "GET"})
{
  "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.) |

Get Submission GET

Get form submission by ID.