Forms API¶
Public form view and anonymous submit. Form builder create/update/delete is product-only (Fermi app user Bearer). Do not call builder APIs as a partner.
Base URL¶
Paths below are relative to that base. Full slug URL: https://api.fermi.dev/forms/api/forms/slug/{slug}.
These public paths do not require a partner scope.
Get a form by slug¶
GET /forms/slug/{slug}
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
tenantId | string | Yes | Organization / tenant ID |
token | string | For private forms | Access token |
curl --request GET \
--url "${BASE_URL}/forms/slug/contact-form?tenantId=TENANT_123" \
--header "Accept: application/json"
Response: the form document (fields, theme, layout).
Errors: 400 invalid input or unauthorized private form, 404 form not found (expected when the slug is not published for that tenant).
Submit a form¶
POST /forms/{id}/submit
Content-Type: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
tenantId | string | Yes | Tenant ID |
data | JSON object | Yes | Field values. Must be an object (400 "data must be an object" if missing) |
userId | string | No | Submitter |
metadata | string | No | Extra metadata |
files | file[] | No | Uploaded files |
curl --request POST \
--url "${BASE_URL}/forms/507f1f77bcf86cd799439011/submit" \
--form 'tenantId=TENANT_123' \
--form 'data={"firstName":"Jane","email":"[email protected]"}'
The data form field is a JSON object string.
Summary¶
| Method | Path relative to BASE_URL | Auth |
|---|---|---|
| GET | /forms/slug/{slug} | Public (tenantId; token if private) |
| POST | /forms/{id}/submit | Public multipart |