Skip to main content
Survey events fire when the contents of a specific survey change — pages, blocks, variables, and navigation rules being added, modified, or removed. These are the events to subscribe to if you want to stream live programming progress into your UI. The data object for every survey event includes a survey_id field (via the parent page or block) so you can associate the change with a specific survey.

Pages

page.created

Fires when a new page is added to a survey.
{
  "event": "page.created",
  "timestamp": "2025-04-01T10:00:45Z",
  "data": {
    "id": "d1e2f3a4-b5c6-7890-defa-012345678901",
    "survey_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
    "name": "Screener",
    "order": 0,
    "locked": false,
    "programming_started_at": null,
    "programming_completed_at": null,
    "created_at": "2025-04-01T10:00:45Z",
    "updated_at": "2025-04-01T10:00:45Z"
  }
}

page.updated

Fires when a page’s name, order, or status changes. The data shape is identical to page.created.

page.deleted

Fires when a page is removed from a survey.
{
  "event": "page.deleted",
  "timestamp": "2025-04-01T10:01:00Z",
  "data": {
    "id": "d1e2f3a4-b5c6-7890-defa-012345678901"
  }
}

Blocks

block.created

Fires when a question block is added to a page. The config object varies by block type — see the table below.
{
  "event": "block.created",
  "timestamp": "2025-04-01T10:00:50Z",
  "data": {
    "id": "e2f3a4b5-c6d7-8901-efab-123456789012",
    "page_id": "d1e2f3a4-b5c6-7890-defa-012345678901",
    "order": 0,
    "config": {
      "type": "MultipleChoice",
      "label": "How satisfied are you with our service?",
      "choices": [
        { "label": "Very satisfied", "value": "5" },
        { "label": "Satisfied", "value": "4" },
        { "label": "Neutral", "value": "3" },
        { "label": "Dissatisfied", "value": "2" },
        { "label": "Very dissatisfied", "value": "1" }
      ],
      "allowMultiple": false
    },
    "created_at": "2025-04-01T10:00:50Z",
    "updated_at": "2025-04-01T10:00:50Z"
  }
}
Supported config.type values:
TypeDescription
TextStatic text or instructions
TextInputFree-text open-ended question
MultipleChoiceSingle or multi-select question
MatrixGrid of rows × columns
InputListList of open-ended inputs
CardSortDrag-and-drop card sorting
RankOrderRanked ordering of items
AutosumNumeric allocation that sums to a target
LoopRepeating block group over a variable

block.updated

Fires when a block’s config, order, or page assignment changes. The data shape is identical to block.created.

block.deleted

Fires when a block is removed from a page.
{
  "event": "block.deleted",
  "timestamp": "2025-04-01T10:01:10Z",
  "data": {
    "id": "e2f3a4b5-c6d7-8901-efab-123456789012"
  }
}

Variables

variable.created

Fires when a variable is added to a survey.
{
  "event": "variable.created",
  "timestamp": "2025-04-01T10:01:20Z",
  "data": {
    "id": "f3a4b5c6-d7e8-9012-fabc-234567890123",
    "survey_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
    "name": "satisfaction_score",
    "expression": "q1.value"
  }
}

variable.updated

Fires when a variable’s name or expression changes. The data shape is identical to variable.created.

variable.deleted

Fires when a variable is removed from a survey.
{
  "event": "variable.deleted",
  "timestamp": "2025-04-01T10:01:30Z",
  "data": {
    "id": "f3a4b5c6-d7e8-9012-fabc-234567890123"
  }
}

Fires when a navigation rule is added. Navigation rules control conditional branching between pages.
{
  "event": "navigation_rule.created",
  "timestamp": "2025-04-01T10:01:40Z",
  "data": {
    "id": "a4b5c6d7-e8f9-0123-abcd-345678901234",
    "source_page_id": "d1e2f3a4-b5c6-7890-defa-012345678901",
    "target_page_id": "e2f3a4b5-c6d7-8901-efab-123456789012",
    "condition": "q1.value == '1'",
    "order": 0,
    "sourcePage": {
      "id": "d1e2f3a4-b5c6-7890-defa-012345678901",
      "survey_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "name": "Screener",
      "order": 0,
      "locked": false,
      "programming_started_at": null,
      "programming_completed_at": null,
      "created_at": "2025-04-01T10:00:45Z",
      "updated_at": "2025-04-01T10:00:45Z"
    },
    "targetPage": {
      "id": "e2f3a4b5-c6d7-8901-efab-123456789012",
      "survey_id": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "name": "Disqualified",
      "order": 1,
      "locked": false,
      "programming_started_at": null,
      "programming_completed_at": null,
      "created_at": "2025-04-01T10:00:46Z",
      "updated_at": "2025-04-01T10:00:46Z"
    }
  }
}
condition is an expression string evaluated at survey runtime. When it evaluates to true, the respondent is routed to targetPage. If omitted, the rule fires unconditionally. Fires when a navigation rule’s condition, target, or order changes. The data shape is identical to navigation_rule.created. Fires when a navigation rule is removed.
{
  "event": "navigation_rule.deleted",
  "timestamp": "2025-04-01T10:01:50Z",
  "data": {
    "id": "a4b5c6d7-e8f9-0123-abcd-345678901234"
  }
}