Guides/How to build an admin panel with action_table dashboards

How to build an admin panel with action_table dashboards

Edit submissions from a dashboard. No custom UI needed.

Updated March 2026

Sutrena dashboards are read-only by default. You get charts and tables, but you cannot change anything from the dashboard itself. The action_table widget changes that. action_table extends data_table with inline editable fields. Any field can become a dropdown. Pick a new value and the submission updates immediately via a PATCH request. Rows that contain an email field also show a delete button. The dashboard must be private (isPublic: false) because it exposes write access to your form data. Only the form owner can view it.

1. Create a form for your data

Start with a form that has the fields you want to manage. Select fields work best for the editable dropdowns, but any field can be made editable with custom options. Here we create a support ticket form with a status field we will edit from the dashboard.

curl -X POST https://sutrena.com/api/forms \
  -H "Authorization: Bearer st_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Support Tickets",
    "fields": [
      { "name": "subject", "label": "Subject", "type": "text", "required": true },
      { "name": "email", "label": "Email", "type": "email", "required": true },
      { "name": "category", "label": "Category", "type": "select",
        "options": ["billing", "technical", "account", "other"], "required": true },
      { "name": "severity", "label": "Severity", "type": "select",
        "options": ["low", "medium", "high", "critical"], "required": true },
      { "name": "ticket_status", "label": "Status", "type": "select",
        "options": ["new", "open", "in-progress", "resolved", "closed"], "required": true }
    ]
  }'

# Response:
# {
#   "id": "frm_tickets01",
#   "name": "Support Tickets",
#   ...
# }

2. Create an action_table dashboard

POST a dashboard with the action_table widget. The key differences from a regular data_table: set the type to action_table, add an editableFields array to define which fields become dropdowns, and set isPublic to false. You can combine action_table with other widget types like metric_card and pie_chart in the same dashboard.

curl -X POST https://sutrena.com/api/dashboards \
  -H "Authorization: Bearer st_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Support Ticket Admin",
    "formId": "frm_tickets01",
    "isPublic": false,
    "dsl": {
      "version": 1,
      "widgets": [
        {
          "type": "metric_card",
          "title": "Total Tickets",
          "value": "count(*)"
        },
        {
          "type": "pie_chart",
          "title": "By Status",
          "groupBy": "ticket_status"
        },
        {
          "type": "action_table",
          "title": "All Tickets",
          "columns": ["subject", "email", "category", "severity"],
          "editableFields": [
            {
              "field": "ticket_status",
              "options": ["new", "open", "in-progress", "resolved", "closed"]
            }
          ],
          "limit": 50,
          "sort": "newest"
        }
      ]
    }
  }'

# Response:
# {
#   "id": "dsh_admin01",
#   "title": "Support Ticket Admin",
#   "dashboardUrl": "https://sutrena.com/d/dsh_admin01"
# }

3. Change a status from the dashboard

Open the dashboard URL while logged in. Each row in the action_table shows your columns plus a dropdown for ticket_status. Selecting a new value fires a PATCH request to /api/forms/{formId}/submissions/{subId} with the updated field. The UI uses optimistic updates: the dropdown changes instantly and reverts if the request fails. A toast notification confirms success or shows the error. Rows with an email column also display a delete button that removes the submission entirely after confirmation.

4. Use it for other workflows

action_table works for any workflow where you need to triage, categorize, or update records from a simple UI. Here are three common patterns.

{
  "widgets": [
    {
      "type": "action_table",
      "title": "Order Fulfillment",
      "columns": ["order_id", "customer_email", "product", "quantity"],
      "editableFields": [
        {
          "field": "fulfillment_status",
          "options": ["pending", "processing", "shipped", "delivered"]
        }
      ],
      "limit": 50,
      "sort": "newest"
    },
    {
      "type": "action_table",
      "title": "Content Moderation",
      "columns": ["title", "author_email", "submitted_at"],
      "editableFields": [
        {
          "field": "moderation_status",
          "options": ["pending", "approved", "rejected"]
        }
      ],
      "limit": 50,
      "sort": "newest"
    },
    {
      "type": "action_table",
      "title": "Event Check-In",
      "columns": ["name", "email", "ticket_type"],
      "editableFields": [
        {
          "field": "checkin_status",
          "options": ["registered", "checked-in", "no-show"]
        }
      ],
      "limit": 100,
      "sort": "newest"
    }
  ]
}

FAQ

Can I make an action_table dashboard public?

No. action_table dashboards must have isPublic set to false. The widget exposes write access to your form submissions, so it is restricted to the authenticated form owner. The API will reject a dashboard creation request that includes an action_table widget with isPublic: true.

What happens when I change a dropdown value?

The UI sends a PATCH request to /api/forms/{formId}/submissions/{subId} with the updated field in the payload. The dropdown updates optimistically so you see the change immediately. If the request fails, the value reverts to its previous state and a toast notification shows the error.

Can I use action_table with CSV or inline data?

No. action_table requires a formId because it writes back to form submissions via the PATCH API. CSV and inline data dashboards are read-only snapshots with no backing store to update.

Can I have multiple editable fields in one action_table?

Yes. The editableFields array accepts up to 10 entries. Each one becomes a separate dropdown column in the table. For example, you could have both a status dropdown and a priority dropdown on the same row.

What is Sutrena?

Sutrena is the web runtime for AI agents. Three primitives — pages, forms, and dashboards — accessible through one API. Your agent creates web artifacts, humans interact with them, and your agent gets the data back. Framework-agnostic. Works from any MCP client or HTTP client.

Get started in two API calls

1. Get a trial key (no auth, no signup)

curl -X POST https://sutrena.com/api/trial

2. Create a form + dashboard from a template

curl -X POST https://sutrena.com/api/forms \
  -H "Authorization: Bearer st_trial_xxx" \
  -H "Content-Type: application/json" \
  -d '{"templateId": "waitlist", "createDashboard": true}'

Ready to build?

Get a trial API key instantly with no signup, or create an account for the full experience.

How to build an admin panel with action_table | Sutrena | Sutrena