Skip to main content
GET
List Capture Submissions
Read accepted submissions for a saved form, popup or landing page. Set sourceType to form, popup or landing_page, and sourceId to its ID. Your key needs subscribers:read plus widgets:read for forms/popups or landing_pages:read for landing pages. Existing management routes keep their permissions. /api/v1/forms/{formId}/submissions is a form-only alias.

Query and pagination

limit is an integer from 1 to 100, default 50. Results are newest first. Pass nextCursor as cursor with the same filters to continue; nextCursor: null means there are no more results. Newer submissions arriving during pagination are excluded from later pages. Start again without a cursor to see them. Supply both field and value to filter a custom answer. field is the exact stored attribute name, including literal dots. value matches an exact scalar string representation or a selected string in a checkbox array. Numbers and booleans use values such as 2 and false. An empty value matches a stored empty string. Omit both to clear the filter. Null query values are not supported. format=json is the default. format=csv adds a csv string for the returned page while retaining the JSON response and nextCursor. CSV includes identity fields and the union of custom field names in that page, JSON-encodes complex answers and neutralizes spreadsheet formulas. Different pages can have different CSV columns. For one combined file, use the dashboard export or sequenzy submissions form form_123 --csv.

Saved payload

Each submissions item includes id, companyId, sourceType, sourceId, subscriberId, createdAt (UTC ISO timestamp), payload, and fieldLabels. payload contains email, optional firstName, lastName, and phone, plus customAttributes. formId, popupId, and landingPageId are nullable source references; exactly one is set. fieldLabels maps custom field names to their labels at submission time. These are accepted, normalized answers, not the raw HTTP request. Headers, authentication tokens, honeypot fields, unknown custom fields and audience configuration are excluded. Server-owned hidden values use their configured value. Records remain unchanged when a subscriber or source is edited, including when the source’s duplicate policy skips updating an existing contact. History starts when submission tracking is deployed. Explicitly recovered historical records may also appear, and the form’s lifetime submissionCount can exceed the number of retained records. Forms, popups and landing pages are covered; generic unsaved forms do not create these records. A submission is not proof of confirmed double opt-in. Deleting the subscriber, source or company removes its records. There is no update or clear operation for individual snapshots.

Responses and retries

  • 200: { success: true, source: { id, name, type }, submissions: [...], nextCursor }; includes csv only when requested. An empty result has submissions: [].
  • 400: invalid cursor, format, page size, or incomplete field/value pair.
  • 401: missing or invalid authentication.
  • 403: missing required scope or workspace access.
  • 404: source missing or outside your workspace.
  • 500: temporary database failure. Reads can be retried without side effects.
Submission capture commits the snapshot and source counter together after subscriber and tag processing. If capture fails, the public submission fails; retrying can repeat that earlier processing, including automation or confirmation-email side effects under existing behavior. Repeated accepted POSTs create separate records. Form and popup counts increase for every accepted submission; landing-page conversion counts still increase only for newly created subscribers. This endpoint does not provide POST idempotency. The submission-payload tool is available on standard MCP. The OpenAI-reviewed MCP profile excludes it under its existing raw-payload restrictions; use the dashboard, API or CLI for this workflow on that profile.

Reconstructed history

A record with payload.recovery was recovered from historical evidence. Its sourceAttribution is inferred and timestampMeaning is event_time: createdAt is the evidence event time, not a verified submission timestamp. evidenceType is contact.added or subscriber.updated; evidenceId identifies the source record and recoveredAt is the recovery execution time. This optional object is absent for ordinary captured submissions. Missing historical answers are not invented. The dashboard marks these records Reconstructed. CLI human output labels the event time; JSON API, CLI and standard MCP preserve the recovery object. CSV adds record_origin, timestamp_meaning and recovered_at columns when its rows include recovered records. Ordinary rows in such exports use submission and submission_time; recovered rows use reconstructed and event_time. Without recovered records, CSV columns remain unchanged. In paginated CSV API/MCP responses, the extra columns depend on the current page. CLI and dashboard CSV exports collect all matching pages before building one consistent header. Recovery is an operator-reviewed repair, not a public import endpoint. It does not update profiles, increment source counters or trigger notifications or automations.