Forms API
Bramble Forms: forms with pages, fields and logic; collaborators; publishing; responses with file uploads, summaries and CSV export; links from responses to records in other apps; and the public endpoints people fill forms in with. Works with an API key.
- Address
https://<your-org>.brambleit.cloud/api- Sign-in
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer). - Address
https://<your-org>.brambleit.cloud/forms- Sign-in
- Signed-in browser session (the
sso_session/session_idcookies from Bramble sign-in). - Endpoints
- 30
- OpenAPI
- forms.json
- Guides
- How Forms works
Public forms are filled in at /forms/f/<slug>, which uses the public
endpoints here (no sign-in, unless the form requires it). Each response can
start a flow (forms.response.submitted).
Resources
Forms
Creating and editing forms (pages, fields, logic), publishing and closing them, and statistics.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/app/forms/forms | List this tenant's forms with response counts |
| POST | /v1/app/forms/forms | Create a draft form with one default page |
| GET | /v1/app/forms/forms/:id | Full structure for the builder (pages, fields, logic) |
| PUT | /v1/app/forms/forms/:id/structure | Bulk save: replaces pages/fields/logic in one transaction (delete-then-reinsert) |
| PATCH | /v1/app/forms/forms/:id | Update title/description/status/require_login/theme |
| DELETE | /v1/app/forms/forms/:id | Soft delete |
| POST | /v1/app/forms/forms/:id/publish | Go live at /f/:slug |
| POST | /v1/app/forms/forms/:id/close | Stop accepting new responses |
| GET | /v1/app/forms/forms/:id/stats | Response dashboard stat tiles |
| GET | /v1/app/forms/forms/:id/summary | Per-question breakdown for the responses "Summary" tab: option counts for choice-type fields, top keywords for free-text ones |
Responses
Responses, their uploaded files, summaries, CSV export, and links from a response to a record in another app.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/app/forms/forms/:id/submissions | Paginated list |
| GET | /v1/app/forms/forms/:id/submissions/export | CSV export (register before the :subId route below so "export" isn't parsed as a submission id) |
| GET | /v1/app/forms/forms/:id/submissions/:subId | Full detail |
| DELETE | /v1/app/forms/forms/:id/submissions | Bulk delete, body: { ids: [1,2,3] } |
| DELETE | /v1/app/forms/forms/:id/submissions/:subId | Single delete |
| GET | /v1/app/forms/forms/:id/uploads/:uploadId | Auth-gated file-answer download |
| GET | /v1/app/forms/forms/:id/submissions/:subId/links | A response's links to other records |
| POST | /v1/app/forms/forms/:id/submissions/:subId/links | Link a response to a record in another app |
| DELETE | /v1/app/forms/forms/:id/submissions/:subId/links/:linkId | Remove a link |
| POST | /v1/app/forms/forms/links | Same as the nested create above, but keyed by submission_id alone (no form_id needed in the URL) |
| GET | /v1/app/forms/forms/links/for-target | The reverse lookup, called from BRM-Project/BRM-ToDo to show what submissions link to a given work package/task |
Collaborators
Who else can edit a form and see its responses, and handing a form to a new owner.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/app/forms/forms/:id/collaborators | Owner + current collaborator list |
| GET | /v1/app/forms/forms/:id/collaborators/available | Tenant users not already the owner or a collaborator, for the "add collaborator" picker |
| POST | /v1/app/forms/forms/:id/collaborators | Add a collaborator. Owner only |
| DELETE | /v1/app/forms/forms/:id/collaborators/:collabId | Owner only |
| PATCH | /v1/app/forms/forms/:id/owner | Transfer ownership. Owner only; the new owner must already be a collaborator (promotes them and drops the old owner down to collaborator, so they don't lose … |
Public form endpoints
Reading a published form and submitting a response.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/app/forms/public/:slug | A published form's structure/theme (404 if draft/closed) optionalAuth so alreadySubmitted can be reported for one-response-per-user forms without requiring t… |
| POST | /v1/app/forms/public/:slug/submit | Submit a response. FormData shape: answers = JSON string { [fieldId]: value|value[] }, plus one file part per file-type field named file_<fieldId> |
Images
Images used in forms.
| Method | Path | Summary |
|---|---|---|
| POST | /v1/app/forms/images | Upload a theme background/banner image (multipart, field "image") |
| GET | /v1/app/forms/images/:id | Public, no auth (theme images embedded via <img>/CSS background-image) |
Web pages
These return pages for the browser rather than data.
GET /GET /builderGET /builder/*GET /responses/*GET /f/*