For the complete documentation index, see llms.txt. This page is also available as Markdown.

Feedback Groups & Sources

Create the containers your data lands in: a feedback group holds everything about one programme, and each source inside it holds one stream of feedback with typed fields. Sources are created in draft mode; publish one to start pushing content.

Create a feedback group

post

Partner-vocabulary variant of /survey_series/create. Idempotent on group name within the org — if a group with the same name already exists, returns 200 with created: false and the existing group id.

Requires permission: all.

Response envelope migration: during the current migration window, 2xx responses carry the bare payload shown in the example (the value of the schema's data property, without the {"data": ...} wrapper). The Deprecation and Sunset headers on every 2xx announce this envelope migration — they do not deprecate the endpoint itself. After the Sunset date, responses will be wrapped as {"data": ...} exactly as the schema declares.

Authorizations
AuthorizationstringRequired

API key authentication: pass your key in the Authorization header as Bearer inpk_live_... (or inpk_test_... for a test-environment key). Create and manage keys in the dashboard under Integrations Hub -> API Keys. Each key carries a permission scope (push, create, send, mcp_read, or all) and a per-minute rate limit.

Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

Opaque client-supplied key for safe POST retries. Repeated requests with the same key within a 24-hour window replay the original response instead of executing the mutation twice. Reusing the same key with a DIFFERENT request body returns 409 IDEMPOTENCY_ERROR. Backed by input_api_idempotency_keys in Postgres.

Example: evt_2025_05_19_a1b2c3
Body
namestring · min: 2 · max: 255Required

Feedback group display name

Responses
200

Success

application/json
post/api/input/feedback_groups/create
POST /api/input/feedback_groups/create HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 30

{
  "name": "Customer Support EU"
}
{
  "status": "success",
  "created": false,
  "message": "Survey series already exists",
  "feedback_group": {
    "id": 1842,
    "name": "Customer Support EU"
  }
}

Create a source inside a feedback group

post

Partner-vocabulary variant of /survey/create. Creates a new source in EDITING mode with the supplied fields; not publicly accessible until /sources/publish is called. Field types are case-insensitive.

Requires permission: create or all.

Response envelope migration: during the current migration window, 2xx responses carry the bare payload shown in the example (the value of the schema's data property, without the {"data": ...} wrapper). The Deprecation and Sunset headers on every 2xx announce this envelope migration — they do not deprecate the endpoint itself. After the Sunset date, responses will be wrapped as {"data": ...} exactly as the schema declares.

Authorizations
AuthorizationstringRequired

API key authentication: pass your key in the Authorization header as Bearer inpk_live_... (or inpk_test_... for a test-environment key). Create and manage keys in the dashboard under Integrations Hub -> API Keys. Each key carries a permission scope (push, create, send, mcp_read, or all) and a per-minute rate limit.

Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

Opaque client-supplied key for safe POST retries. Repeated requests with the same key within a 24-hour window replay the original response instead of executing the mutation twice. Reusing the same key with a DIFFERENT request body returns 409 IDEMPOTENCY_ERROR. Backed by input_api_idempotency_keys in Postgres.

Example: evt_2025_05_19_a1b2c3
Body
feedback_group_idstringRequired
source_titlestring · min: 1 · max: 100Required
source_descriptionstring · max: 1000OptionalDefault: ""
feedback_typestringOptional

What kind of feedback this source collects: survey | call_transcript | app_review | support_ticket | chat | email | social_media | review | other. Open vocabulary.

Default: survey
languagestring · nullableOptional

EN | FR | ES (case-insensitive)

Default: null
Responses
201

Created

application/json
post/api/input/sources/create
POST /api/input/sources/create HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 328

{
  "feedback_group_id": "1842",
  "source_title": "Support tickets (CRM sync)",
  "source_description": "Tickets pushed nightly from our CRM",
  "feedback_type": "support_ticket",
  "language": "en",
  "fields": [
    {
      "field_title": "What was the issue?",
      "field_type": "DEPTH_TEXT"
    },
    {
      "field_title": "How likely are you to recommend us?",
      "field_type": "NPS"
    }
  ]
}
{
  "status": "success",
  "feedback_group_id": 1842,
  "source_id": 9021,
  "feedback_type": "support_ticket",
  "fields_created": 2,
  "fields": [
    {
      "id": 31245,
      "title": "What was the issue?",
      "type": "DEPTH_TEXT"
    },
    {
      "id": 31246,
      "title": "How likely are you to recommend us?",
      "type": "NPS"
    }
  ],
  "message": "Source 'Support tickets (CRM sync)' created with 2 field(s)"
}

List sources accessible to the API key's organization

get

Partner-vocabulary variant of /surveys/list: feedback groups with their sources and fields, including accepts_content, content_format and mode. Filterable by feedback_group_id and source_id; paginated at the feedback-group level via limit/offset.

Response envelope migration: during the current migration window, 2xx responses carry the bare payload shown in the example (the value of the schema's data property, without the {"data": ...} wrapper). The Deprecation and Sunset headers on every 2xx announce this envelope migration — they do not deprecate the endpoint itself. After the Sunset date, responses will be wrapped as {"data": ...} exactly as the schema declares.

Authorizations
AuthorizationstringRequired

API key authentication: pass your key in the Authorization header as Bearer inpk_live_... (or inpk_test_... for a test-environment key). Create and manage keys in the dashboard under Integrations Hub -> API Keys. Each key carries a permission scope (push, create, send, mcp_read, or all) and a per-minute rate limit.

Query parameters
feedback_group_idstringOptional
source_idstringOptional
limitinteger · min: 1 · max: 200Optional

Max feedback groups returned per page.

Default: 50
offsetintegerOptional

Number of feedback groups to skip.

Default: 0
Responses
200

Success

application/json
get/api/input/sources/list
GET /api/input/sources/list HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "feedback_groups": [
    {
      "id": 1842,
      "name": "Customer Support EU",
      "sources": [
        {
          "id": 9021,
          "title": "Support tickets (CRM sync)",
          "description": "Tickets pushed nightly from our CRM",
          "mode": "ACCESSIBLE",
          "feedback_type": "support_ticket",
          "fields": [
            {
              "id": 31245,
              "title": "What was the issue?",
              "type": "DEPTH_TEXT"
            }
          ]
        }
      ]
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total_count": 1
  }
}

Publish a source (move to ACCESSIBLE mode)

post

Partner-vocabulary variant of /survey/publish. Idempotent: publishing an already-ACCESSIBLE source is a no-op that returns 200 with the same shape.

Requires permission: create or all.

Response envelope migration: during the current migration window, 2xx responses carry the bare payload shown in the example (the value of the schema's data property, without the {"data": ...} wrapper). The Deprecation and Sunset headers on every 2xx announce this envelope migration — they do not deprecate the endpoint itself. After the Sunset date, responses will be wrapped as {"data": ...} exactly as the schema declares.

Authorizations
AuthorizationstringRequired

API key authentication: pass your key in the Authorization header as Bearer inpk_live_... (or inpk_test_... for a test-environment key). Create and manage keys in the dashboard under Integrations Hub -> API Keys. Each key carries a permission scope (push, create, send, mcp_read, or all) and a per-minute rate limit.

Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

Opaque client-supplied key for safe POST retries. Repeated requests with the same key within a 24-hour window replay the original response instead of executing the mutation twice. Reusing the same key with a DIFFERENT request body returns 409 IDEMPOTENCY_ERROR. Backed by input_api_idempotency_keys in Postgres.

Example: evt_2025_05_19_a1b2c3
Body
source_idintegerRequired
feedback_group_idintegerRequired
Responses
200

Success

application/json
post/api/input/sources/publish
POST /api/input/sources/publish HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 43

{
  "source_id": 9021,
  "feedback_group_id": 1842
}
{
  "status": "success",
  "source_id": 9021,
  "feedback_group_id": 1842,
  "mode": "ACCESSIBLE",
  "message": "Source published successfully"
}

Last updated