Questions & Pages API
Pages
GET
/surveys/:sid/pagesList pages in a survey versionPOST
/surveys/:sid/pagesCreate a new pagePATCH
/pages/:idUpdate a pageDELETE
/pages/:idDelete a pagePOST
/surveys/:sid/pages/reorderReorder pagesPage Object
{
"id": "page_xxxx",
"surveyVersionId": "ver_xxxx",
"title": "Section 1",
"description": null,
"order": 0,
"optional": false
}Blocks
GET
/pages/:pid/blocksList blocks in a pagePOST
/pages/:pid/blocksCreate a blockPATCH
/blocks/:idUpdate a blockDELETE
/blocks/:idDelete a blockPOST
/pages/:pid/blocks/reorderReorder blocksBlock Object
{
"id": "block_xxxx",
"pageId": "page_xxxx",
"type": "question", // "question" | "heading" | "text" | "divider" | "image" | "follow_up_email"
"order": 0,
"question": { ... } // present when type = "question"
}Question Object
{
"id": "q_xxxx",
"blockId": "block_xxxx",
"type": "nps",
"label": "How likely are you to recommend us?",
"description": null,
"required": true,
"placeholder": null,
"options": [
{ "id": "opt_1", "label": "Option A", "order": 0 }
],
"translations": {
"de": { "label": "Wie wahrscheinlich ist es, dass..." }
}
}Question Types
"radio" | "checkbox" | "short_text" | "long_text" "phone" | "country" | "date" | "integer" | "decimal" | "number" "rating" | "nps" | "yes_no" | "dropdown" | "file_upload"
Date questions
A date question uses the respondent's native date picker. Answers are ISO strings without a time zone, so they mean the same calendar day wherever they are read:
| Config | Answer value |
|---|---|
| default | "2026-05-01" (YYYY-MM-DD) |
"includeTime": true | "2026-05-01T14:30" (YYYY-MM-DDTHH:mm, the respondent's local time) |
minDate and maxDate limit the allowed days (inclusive). Each is a date ("2026-05-01") or "today", the respondent's current day; the API accepts one day either side of the UTC day for "today", because respondents can be ahead of or behind UTC. The API rejects answers that are not real calendar days or fall outside the limits. In conditional logic and page jumps, less_than / greater_than (and the_or_equal variants) mean before / after, and a date-only value matches any time on that day.
{
"type": "date",
"label": { "en": "Which day did you attend?" },
"required": true,
"config": { "minDate": "2026-05-01", "maxDate": "today", "includeTime": false }
}Create a Question Block
POST /pages/:pid/blocks
{
"type": "question",
"order": 2,
"question": {
"type": "radio",
"label": "How did you hear about us?",
"required": false,
"options": [
{ "label": "Social media", "order": 0 },
{ "label": "Word of mouth", "order": 1 },
{ "label": "Search engine", "order": 2 }
]
}
}