Skip to main content
Forms collect structured data from your users — typically lead capture, surveys, or onboarding flows. The Forms API is read-only: forms themselves are configured in the dashboard (see the Forms feature docs), and submissions are created when users fill them out. The API lets you list forms, fetch a single form’s configuration, and read submissions.

The Form object

string
string
string
The agent that owns this form.
string
string | null
object
Configuration for built-in fields (name, email, phone, etc.) — JSON shape varies by form.
object
Configuration for custom fields the workspace has defined.
object
Configuration for survey questions, if the form is a survey form.
string
ISO 8601 timestamp.
string
ISO 8601 timestamp.

The Submission object

string
string
string | null
Linked contact, if the submission was associated with one.
object
The submitter’s answers, keyed by field name.
boolean
true if the submission was created by an internal user (e.g. via dashboard testing). Filtered out of submission lists by default.
string
ISO 8601 timestamp.

List forms

GET
GET /api/v1/forms

Query parameters

Example


Get a form

GET
GET /api/v1/forms/{id}
Returns the full form configuration, including every standard, custom, and survey field.

Example


List form submissions

GET
GET /api/v1/forms/{id}/submissions
Returns a paginated list of submissions for a single form, in reverse-chronological order.

Query parameters

Example

By default, submissions where is_internal=true (typically internal test fills from the dashboard) are excluded. Pass include_internal=true to see them — useful when reconciling totals against the dashboard’s “include internal” toggle.

Get a submission

GET
GET /api/v1/submissions/{id}

Example

To get notified the moment a new submission lands — instead of polling — set up a Webhook on the contact-created or form-submission events.