const url = 'https://platform.fomr.io/v1/forms/example/submissions/export?status=completed&format=csv&header=label';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://platform.fomr.io/v1/forms/example/submissions/export?status=completed&format=csv&header=label' \ --header 'Authorization: Bearer <token>'Streams every matching submission as an attachment, one row per submission, without creating an export job. CSV is the default; JSONL is also available. Rows come newest published version first and newest submission first within a version. Answer headers use question labels from the requested published version, current labels without that filter, or stable Form Node public IDs. Filters match list submissions. An organization runs a small number of exports at a time; retry a 503 after Retry-After. Partial Responses need the partial_response_access plan feature. Needs forms:read. Costs 1 API credit.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The public ID of the form or Private Template.
Query Parameters
Section titled “Query Parameters”Keep completed submissions, Partial Responses, or both. Partial and all need Partial Response Access.
Include submissions created at or after this timestamp.
Include submissions created at or before this timestamp.
Keep only submissions for this published version.
The streamed attachment format.
Use current question labels or stable Form Node public IDs as exported answer keys.
Responses
Section titled “Responses”A streamed CSV or JSONL attachment with one row per submission.
A streamed CSV or JSONL attachment with one row per submission.
A streamed CSV or JSONL attachment with one row per submission.
Example generated
exampleDefault Response
object
The stable code to branch on.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Every value the request got wrong.
object
The path into the request, with property names and numeric array indexes.
What is wrong with the value at this path.
The stable code for the issue. Branch on it, and use it with params to write your own text.
Accepted values when a node type or enum value is rejected.
Example
{ "code": "INVALID_INPUT"}Default Response
object
The stable code to branch on.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Example
{ "code": "INVALID_INPUT"}Default Response
object
The request sets a field the plan does not include.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
The plan whose features were applied.
Where to review plans and upgrade the organization.
The plan feature the blocked field needs, such as meta_tags or partial_response_access.
The path of the blocked field, such as properties/meta_title. On a write it points into the request body; on publish it points into the Draft Document, and it is empty when the blocker is not a document field.
Example
{ "code": "PRO_FEATURE_REQUIRED", "plan": "free"}Default Response
object
The stable code to branch on.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Example
{ "code": "INVALID_INPUT"}Default Response
object
Returned for a form that does not exist, is in Trash, or belongs to another organization. The three are not told apart.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Example
{ "code": "NOT_FOUND"}A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.
object
The stable code to branch on.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
The policy that rejected the call.
The plan whose numbers were applied.
The policy limit in credits.
Credits already spent in the open window.
Credits still available under the policy.
What the rejected call would have cost.
How long the policy window lasts.
When the window that rejected the call ends.
Seconds to wait before retrying. Also sent as the Retry-After response header.
object
The stable code to branch on.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Example
{ "code": "INVALID_INPUT", "policy": "minute", "plan": "free"}Default Response
object
The stable code to branch on.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Example
{ "code": "INVALID_INPUT"}Default Response
object
The requested operation has no available capacity. Retry after the Retry-After header says.
A human-readable explanation. Not part of the contract; never branch on it.
The ID of the failed request, also sent as the X-Request-Id response header.
Seconds to wait before retrying. Also sent as the Retry-After response header.
Example
{ "code": "SERVICE_UNAVAILABLE"}