Management API
The management API is what the editor UI uses: questionnaire CRUD, draft editing, publishing, version history, response browsing, CSV export, and file downloads. It has no authentication — you must network-protect it (reverse proxy with auth, VPN, or network policy). Anyone who can reach these endpoints can read and edit everything. See the security posture.
This page is generated from the backend’s OpenAPI document (download the raw spec).
GET /api/v1/questionnaires
Section titled “GET /api/v1/questionnaires”List questionnaires, paged.
| Parameter | In | Type | Required |
|---|---|---|---|
page |
query | integer, default 0 | no |
size |
query | integer, default 50 | no |
Response: 200 OK — PageResultQuestionnaireSummary
POST /api/v1/questionnaires
Section titled “POST /api/v1/questionnaires”Create a questionnaire.
Request body (application/json): CreateQuestionnaireRequest
Response: 201 Created — QuestionnaireDetail
GET /api/v1/questionnaires/{id}
Section titled “GET /api/v1/questionnaires/{id}”Fetch one questionnaire, including its current draft definition.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Response: 200 OK — QuestionnaireDetail
PATCH /api/v1/questionnaires/{id}
Section titled “PATCH /api/v1/questionnaires/{id}”Update questionnaire settings: name, allowed origins, submission policy.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Request body (application/json): PatchQuestionnaireRequest
Response: 200 OK — QuestionnaireDetail
DELETE /api/v1/questionnaires/{id}
Section titled “DELETE /api/v1/questionnaires/{id}”Delete a questionnaire.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Response: 204 No Content
PUT /api/v1/questionnaires/{id}/draft
Section titled “PUT /api/v1/questionnaires/{id}/draft”Replace the draft definition. Drafts are invisible to respondents until published.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Request body (application/json): Definition
Response: 200 OK — QuestionnaireDetail
POST /api/v1/questionnaires/{id}/duplicate
Section titled “POST /api/v1/questionnaires/{id}/duplicate”Copy a questionnaire (a new draft under a new publicId).
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Response: 201 Created — QuestionnaireDetail
GET /api/v1/questionnaires/{id}/export
Section titled “GET /api/v1/questionnaires/{id}/export”Export a questionnaire definition as portable JSON.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Response: 200 OK — QuestionnaireExport
GET /api/v1/questionnaires/{id}/files/stats
Section titled “GET /api/v1/questionnaires/{id}/files/stats”Storage totals (file count and bytes) for a questionnaire.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Response: 200 OK — FileStats
POST /api/v1/questionnaires/{id}/publish
Section titled “POST /api/v1/questionnaires/{id}/publish”Publish the draft as a new immutable version, with an optional note.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Request body (application/json, optional): PublishRequest
Response: 200 OK — QuestionnaireDetail
GET /api/v1/questionnaires/{id}/responses
Section titled “GET /api/v1/questionnaires/{id}/responses”Browse responses, filterable by status, version, and external reference.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
status |
query | string | no |
versionNumber |
query | integer | no |
externalRef |
query | string | no |
page |
query | integer, default 0 | no |
size |
query | integer, default 50 | no |
Response: 200 OK — PageResultResponseExport
DELETE /api/v1/questionnaires/{id}/responses/{responseId}
Section titled “DELETE /api/v1/questionnaires/{id}/responses/{responseId}”Hard-delete a response (data-subject erasure).
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
responseId |
path | string | yes |
Response: 204 No Content
GET /api/v1/questionnaires/{id}/responses/{responseId}/files/{fileId}
Section titled “GET /api/v1/questionnaires/{id}/responses/{responseId}/files/{fileId}”Download an uploaded file. Always served as an attachment, never inline.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
responseId |
path | string | yes |
fileId |
path | string | yes |
Response: 200 OK — binary
GET /api/v1/questionnaires/{id}/responses/export.csv
Section titled “GET /api/v1/questionnaires/{id}/responses/export.csv”Export responses as CSV, using the same filters as the browse endpoint.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
status |
query | string | no |
versionNumber |
query | integer | no |
externalRef |
query | string | no |
Response: 200 OK
GET /api/v1/questionnaires/{id}/versions
Section titled “GET /api/v1/questionnaires/{id}/versions”List published versions.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
Response: 200 OK — array of VersionSummary
GET /api/v1/questionnaires/{id}/versions/{n}
Section titled “GET /api/v1/questionnaires/{id}/versions/{n}”Fetch one published version, including its frozen definition.
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
n |
path | integer | yes |
Response: 200 OK — VersionDetail
POST /api/v1/questionnaires/{id}/versions/{n}/restore
Section titled “POST /api/v1/questionnaires/{id}/versions/{n}/restore”Copy an old version back into the draft (nothing is published until you publish).
| Parameter | In | Type | Required |
|---|---|---|---|
id |
path | string | yes |
n |
path | integer | yes |
Response: 200 OK — QuestionnaireDetail
POST /api/v1/questionnaires/import
Section titled “POST /api/v1/questionnaires/import”Import a previously exported questionnaire as a new draft.
Request body (application/json, optional): QuestionnaireImportRequest
Response: 201 Created — QuestionnaireDetail
GET /api/v1/uploads/config
Section titled “GET /api/v1/uploads/config”The server-side upload caps, so the editor can display them.
Response: 200 OK — UploadsConfig
Data model
Section titled “Data model”Condition
Section titled “Condition”| Field | Type |
|---|---|
source |
string |
questionCode |
string |
subField |
string |
operator |
string |
value |
any |
CreateQuestionnaireRequest
Section titled “CreateQuestionnaireRequest”| Field | Type |
|---|---|
name |
string |
Definition
Section titled “Definition”| Field | Type |
|---|---|
schemaVersion |
integer |
steps |
array of Step |
tabs |
array of Tab |
questions |
array of Question |
FileStats
Section titled “FileStats”| Field | Type |
|---|---|
fileCount |
integer (int64) |
totalBytes |
integer (int64) |
| Field | Type |
|---|---|
origin |
string |
userAgent |
string |
PageResultQuestionnaireSummary
Section titled “PageResultQuestionnaireSummary”| Field | Type |
|---|---|
items |
array of QuestionnaireSummary |
page |
integer |
size |
integer |
total |
integer (int64) |
PageResultResponseExport
Section titled “PageResultResponseExport”| Field | Type |
|---|---|
items |
array of ResponseExport |
page |
integer |
size |
integer |
total |
integer (int64) |
PatchQuestionnaireRequest
Section titled “PatchQuestionnaireRequest”| Field | Type |
|---|---|
name |
string |
allowedOrigins |
array of string |
submissionPolicy |
string |
Position
Section titled “Position”| Field | Type |
|---|---|
stepId |
string |
tabId |
string |
PublishRequest
Section titled “PublishRequest”| Field | Type |
|---|---|
note |
string |
Question
Section titled “Question”| Field | Type |
|---|---|
id |
string |
code |
string |
sectionTitle |
string |
prompt |
string |
type |
string |
width |
string |
typeConfig |
object (free-form) |
visibility |
RuleConfig |
requirement |
RuleConfig |
QuestionnaireDetail
Section titled “QuestionnaireDetail”| Field | Type |
|---|---|
id |
string |
publicId |
string |
name |
string |
allowedOrigins |
array of string |
submissionPolicy |
string |
currentVersion |
integer |
hasUnpublishedChanges |
boolean |
draft |
Definition |
updatedAt |
string (date-time) |
QuestionnaireExport
Section titled “QuestionnaireExport”| Field | Type |
|---|---|
formsEngineExport |
integer |
exportedAt |
string (date-time) |
name |
string |
definition |
Definition |
QuestionnaireImportRequest
Section titled “QuestionnaireImportRequest”| Field | Type |
|---|---|
formsEngineExport |
integer |
exportedAt |
string (date-time) |
name |
string |
definition |
Definition |
QuestionnaireSummary
Section titled “QuestionnaireSummary”| Field | Type |
|---|---|
id |
string |
publicId |
string |
name |
string |
currentVersion |
integer |
hasUnpublishedChanges |
boolean |
updatedAt |
string (date-time) |
responseCount |
integer (int64) |
ResponseExport
Section titled “ResponseExport”| Field | Type |
|---|---|
responseId |
string |
externalRef |
string |
publicId |
string |
versionNumber |
integer |
status |
string |
answers |
object (free-form) |
lastPosition |
Position |
meta |
Meta |
createdAt |
string (date-time) |
updatedAt |
string (date-time) |
completedAt |
string (date-time) |
| Field | Type |
|---|---|
combinator |
string |
conditions |
array of Condition |
RuleConfig
Section titled “RuleConfig”| Field | Type |
|---|---|
mode |
string |
rule |
Rule |
| Field | Type |
|---|---|
id |
string |
title |
string |
visibility |
RuleConfig |
requirement |
RuleConfig |
tabs |
array of Tab |
questions |
array of Question |
| Field | Type |
|---|---|
id |
string |
title |
string |
visibility |
RuleConfig |
requirement |
RuleConfig |
questions |
array of Question |
UploadsConfig
Section titled “UploadsConfig”| Field | Type |
|---|---|
maxFileSizeMb |
integer |
maxFilesPerResponse |
integer |
maxBytesPerResponse |
integer (int64) |
VersionDetail
Section titled “VersionDetail”| Field | Type |
|---|---|
versionNumber |
integer |
note |
string |
publishedAt |
string (date-time) |
definition |
Definition |
VersionSummary
Section titled “VersionSummary”| Field | Type |
|---|---|
versionNumber |
integer |
note |
string |
publishedAt |
string (date-time) |