---
title: "Discover form field names from recent submissions (resolver helper)"
method: GET
path: "/workflows/forms/{form_id}/fields"
tags: ["Workflows"]
---

# Discover form field names from recent submissions (resolver helper)

`GET /workflows/forms/{form_id}/fields`

## Request

- Base URL: `https://be.graph8.com/api/v1`
- URL: `https://be.graph8.com/api/v1/workflows/forms/{form_id}/fields`
- Auth: HTTP bearer

Sample recent submissions for a form and return the unique field names.

Use this to populate the ``form_fields[]`` array on a
``new_form_submitted`` trigger node config at create time, mirroring
what ``NodeConfigPanel.handleFormSelect`` does on the frontend when
the user selects a form in the dropdown.

Without these names pre-populated, downstream nodes cannot reference
submitted values via ``${<trigger_node_id>.<field>}`` until the user
re-selects the form in the UI.

Calls ``forms`` handlers in-process (no voice round-trip). Forms data
lives in ClickHouse via ``apps.forms()`` — sampled submissions are
paginated server-side; we only ever read ``per_page=10`` here.

Returns ``{form_id, fields: [str], sample_size: int}``. Empty
``fields`` means no submissions exist yet — the caller should fall
back to asking the user for the field list, or accept that
``${trigger.<field>}`` references will only resolve once a real
submission arrives.

## Path parameters

- `form_id` string, required: HTML form id (form_tag_id)

## Headers

- `Authorization` string, nullable
- `X-Target-Org-Id` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/graph8/apis/graph8-developer-api.md) · [All operations](https://skmtc.dev/graph8/apis/graph8-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/graph8/apis/graph8-developer-api/revisions/2e7cfa0ca921?raw)
