Widgets
List Capture Submissions
Read saved submitted answers and payloads for forms, popups and landing pages
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
Eachsubmissions 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 }; includescsvonly when requested. An empty result hassubmissions: [].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.
Reconstructed history
A record withpayload.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.