Endpoints
| Method | Path | Response |
|---|---|---|
GET | /api/developer/forms | { forms, pagination } |
POST | /api/developer/forms | 201 { form } |
GET | /api/developer/forms/:formId | { form } |
PATCH | /api/developer/forms/:formId | { form } |
DELETE | /api/developer/forms/:formId | 204 |
GET | /api/developer/forms/:formId/metadata | formMetadata |
GET | /api/developer/forms/:formId/responses | { responses, pagination } |
POST | /api/developer/forms/:formId/duplicate | 201 { form } |
POST | /api/developer/forms/:formId/publish | { form } |
POST | /api/developer/forms/:formId/unpublish | { form } |
Form fields
id: UUIDtitle: required string, 1 to 255 charactersdescription: string up to 5000 characters, or nullquestions: array of shallow JSON objectssettings: shallow JSON objecttags: array of strings, each up to 100 characterspublished: booleanfolder_id: UUID or nullcreated_atandupdated_at: ISO datetimes
Write fields
Create requires title. Update requires form_id in the validated input and at least one update field. The route reads form_idfrom the URL path.
Status codes
200: request succeeded201: form or duplicate created204: form deleted400: invalid ID, query, or payload401: missing, invalid, or revoked API key404: form not found or inaccessible429: rate limit exceeded500: internal server error