List Many Submissions
/v1/forms/{form_id}/submissionsRetrieves multiple submissions for a specified form.
Pagination
This endpoint supports two pagination strategies:
Offset-based pagination
- Use
limitandoffsetto navigate through pages
Cursor-based pagination
- Use
cursorwith the ID of the last submission from the previous page - You may set
offset=1to 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 In: header
In: header
Path Parameters
Query Parameters
Maximum number of submissions to return.
1001 <= value <= 500Number of submissions to skip. Limited to 1 when using search.
00 <= valueSubmission 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.
24 <= length <= 24Sort order by creation date (created_at).
DESC: Newest submissions first (default)ASC: Oldest submissions first
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.
1 <= length <= 100Response 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.