Form detail
The per-form workspace: submissions inbox, per-field fill rates, view-to-submission conversion, source and UTM attribution, and consent-grant rate.
Form detail
The form detail view is where you work a single form after it goes live —
reading submissions and reading the analytics that tell you whether the form is
converting. Both are served from the form's own endpoints under /v1/forms.
Submissions
GET /v1/forms/{form_id}/submissions?limit=50&offset=0
Returns stored submissions newest-first from form_submissions, with a total
count for pagination. Each row carries the submitted data, the source_url,
captured utm_params, whether consent was recorded, and any processing_error
raised while dispatching the submission's action. Results are strictly
tenant-scoped and 404 if the form does not belong to your tenant.
Analytics
GET /v1/forms/{form_id}/analytics?days=30
A single read-only aggregate over form_submissions and form_views — no
client-side telemetry pipeline. The payload includes:
- Volume —
total_all_time,total_in_range, and a continuoussubmissions_per_dayseries (empty days filled with zero). - Per-field fill rates — for every non-hidden field, the
fill_countandfill_rateover in-range submissions. Fill-testing is type-aware: a checkbox or consent field only counts whentrue, and numeric0counts as a real answer (it is a valid NPS/CSAT/CES score). - Attribution —
top_sources,top_utm_sources, andtop_utm_campaigns. - Consent —
consent_granted_countandconsent_grant_rate. - Health — a
processing_errorscount so you can spot forms whose submissions are failing to create leads or update contacts.
Views and conversion
When a form is served through public hosting, page views are recorded in
form_views (alembic 0222). The analytics payload folds these in so you get
true funnel metrics:
total_views_all_time/total_views_in_rangeand aviews_per_dayseriesconversion_rate= in-range submissions ÷ in-range views- geo and device mix:
top_countries,device_breakdown,top_hosts
Bot views are excluded
Views recorded with device = 'bot' are filtered out of the totals and the
conversion math, so your rates reflect real human traffic rather than crawlers.
Reading fill rates
A required field with a fill rate well below 1.0 usually means submissions are failing validation elsewhere or the field is confusing — a strong signal to simplify. An optional field with a very low fill rate is a candidate to drop entirely to reduce friction.