Updated March 2026
Both use the same DSL. Same seven widget types: metric_card, data_table, text_block, pie_chart, bar_chart, line_chart, action_table. Same public URL format at sutrena.com/d/{id}. Same rendering engine. The difference is where the data comes from and how it behaves over time.
A form dashboard is linked to a Sutrena form. It visualizes that form's submissions. Every time someone submits the form, the dashboard updates. Auto-refresh runs every 30 seconds in the browser. The dashboard grows as submissions arrive. Use $submitted_at:day, $submitted_at:week, or $submitted_at:month for time-based groupBy. This is the live, growing view of your collected data.
A data dashboard is not linked to a form. You provide the data yourself, either as inline JSON (up to 1,000 rows in the request body) or as a CSV upload (up to 100,000 rows). The data is fixed at creation time. No auto-refresh, no live updates. The dashboard shows exactly what you gave it. For time-based groupBy on your own date columns, use $column:day, $column:week, or $column:month where column is the name of your date field.
When to use a form dashboard: you have a Sutrena form collecting data and you want to see results in real time. Polls, surveys, feedback, signups, any ongoing collection.
When to use a data dashboard: you have existing data from another source. A CSV export from a spreadsheet. A summary table from your database. Metrics an AI agent compiled. Data that does not come from a Sutrena form.
Creating a form dashboard requires a formId in the POST /api/dashboards request. Creating a data dashboard requires either a data array or a csvObjectId. You cannot mix sources -- pick one per dashboard.
Both support isPublic for shareable URLs. Both render with recharts. Both support all widget configuration options including sum/avg/min/max aggregation on metric cards and chart widgets. The DSL does not change based on data source.