Create Submission
/v1/forms/{form_id}Submits data to a form. View 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. |
| 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. |
Path Parameters
Header Parameters
Specifies preferred response format: application/json for JSON or text/html for a redirect.
Response Body
application/json
application/json
application/json
application/json
const body = JSON.stringify({ "email": "test@vexrun.com", "name": "John Doe", "message": "Hello!"})fetch("https://example.com/v1/forms/{form_id}", { method: "POST", headers: { "Content-Type": "application/json" }, body}){ "success_title": "string", "success_message": "string", "redirect_url": "string"}{ "message": "string"}{ "message": "string", "error": "form_disabled"}{ "message": "string"}Get Form Overview GET
Returns public information about a form. This endpoint does not require authentication.
List Many Submissions GET
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.