Surveys

Read-only access to survey templates and the answers collected across their spawns. Mirrors the data available in the CMS Excel export.

A template defines the survey (questions, schedule, anonymity); each time it runs it produces a spawn (one occurrence, with its own answers). Pass the template id to /surveys/{template_id}/answers to retrieve answers from every spawn of that template in one feed — each row carries its spawn's id and starts_at so you can group client-side.

Required scope: read:surveys

Endpoints

GET
/api/open/v1/surveys

List survey templates (paginated)

GET
/api/open/v1/surveys/{id}

Get a single survey template

GET
/api/open/v1/surveys/{template_id}/answers

List answers across every spawn of a template (paginated)

GET
/api/open/v1/surveys/{template_id}/answers/{id}

Get a single answer

List templates

Returns survey templates only (not spawn instances).

curl "https://customer.monotree.com/api/open/v1/surveys?category=satisfaction" \
  -H "Authorization: Bearer mono_your_token_here"
Query paramNotes
categorydefault, satisfaction, assessment, or development.
sinceISO 8601 — filter by updated_at.
page, per_pageStandard pagination — see Pagination.

List answers for a template

Returns all answers across every spawn of the template, ordered by created_at descending. Each answer embeds its spawn (id + starts_at), question, and choice so the row is self-describing — no separate question lookup required.

curl "https://customer.monotree.com/api/open/v1/surveys/42/answers?since=2026-04-01&per_page=100" \
  -H "Authorization: Bearer mono_your_token_here"
Query paramNotes
sinceISO 8601 — only answers created at or after this time.
untilISO 8601 — only answers created at or before this time.
spawn_starts_atYYYY-MM-DD — restrict to a single spawn date.
page, per_pageper_page max 100 (raised from the usual 50 because export consumers pull bulk).

Answer response

{
  "data": {
    "id": 9001,
    "template_id": 42,
    "spawn": { "id": 1378, "starts_at": "2026-04-01" },
    "question": {
      "id": 17,
      "title": "Engagement",
      "body": "How was your week?",
      "type": "rating",
      "position": 1
    },
    "choice": { "id": 88, "body": "Great", "value": 100 },
    "body": null,
    "reason": "lots of customers this week",
    "is_skipped": false,
    "is_anonymous": false,
    "respondent": {
      "id": 501,
      "name": "Jane Doe",
      "email": "jane@example.com",
      "type": "user",
      "avatar_url": "https://images.monotree.com/avatars/jane-doe.jpg",
      "groups": [
        { "id": 12, "name": "Kitchen", "type": "department", "created_at": "2025-09-01T10:00:00+00:00" }
      ],
      "hired_at": "2025-09-01",
      "is_away": false,
      "last_active_on": "2026-04-28",
      "registered_at": "2025-11-01T09:00:00+00:00",
      "created_at": "2025-11-01T09:00:00+00:00"
    },
    "department": { "id": 12, "name": "Kitchen", "type": "department", "created_at": "2025-09-01T10:00:00+00:00" },
    "created_at": "2026-04-01T11:14:33+00:00",
    "updated_at": "2026-04-01T11:14:33+00:00"
  }
}

respondent uses the same Open API user object served by /users; department uses the group object.