---
title: "Get a form"
method: GET
path: "/api/v1/manage/forms/{form}"
tags: ["Forms"]
---

# Get a form

`GET /api/v1/manage/forms/{form}`

## Request

- Base URL: `https://fillo.so`
- URL: `https://fillo.so/api/v1/manage/forms/{form}`
- Auth: HTTP bearer

The published contract for one form (id or slug): its published schema and settings, plus a hasDraft flag. `?include=draft` adds the staged revision (`draftSchema`, `draftTheme`) and the push handle, storage destination, and purpose — everything `fillo pull` needs — and additionally requires forms:write. Without it the draft schema is never exposed. Scope: forms:read.

## Path parameters

- `form` string, required

## Query parameters

- `include` 'draft'

## Response `200`

The form's published contract.

- FormDetail
  - `id` string, required
  - `slug` string, required
  - `name` string, required
  - `status` 'draft' | 'published', required
  - `schema` object, required: The published FormSchema (see @usefillo/core).
  - `settings` object, required: The published FormSettings.
  - `hasDraft` boolean, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: Invalid request (e.g. a body on a GET/DELETE, or a missing required query parameter).
- `401`: Missing, malformed, unknown, revoked, or expired key.
- `403`: The key is valid but lacks the required scope.
- `404`: No such resource in this project (returned instead of 403 for ids in other projects).
- `429`: Per-key (120/min), per-workspace (240/min), or per-IP (300/min) rate limit exceeded. Retry after the Retry-After header.

---

[API](https://skmtc.dev/fillo/apis/fillo-management-api.md) · [All operations](https://skmtc.dev/fillo/apis/fillo-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fillo/apis/fillo-management-api/revisions/867f943f04f5?raw)
