> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Capture Submissions

> Read saved submitted answers and payloads for forms, popups and landing pages

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.

```bash theme={null}
curl 'https://api.sequenzy.com/api/v1/submissions/form/form_123?field=session&value=morning' \
  -H 'Authorization: Bearer YOUR_API_KEY'
```

## 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.
