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.
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.
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.
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.
evt_2025_05_19_a1b2c3Feedback group display name
Success
Created
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Rate limit exceeded — see Retry-After header.
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"
}
}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.
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.
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.
evt_2025_05_19_a1b2c3""What kind of feedback this source collects: survey | call_transcript | app_review | support_ticket | chat | email | social_media | review | other. Open vocabulary.
surveyEN | FR | ES (case-insensitive)
nullCreated
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Not Found
Rate limit exceeded — see Retry-After header.
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)"
}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.
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.
Max feedback groups returned per page.
50Number of feedback groups to skip.
0Success
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Rate limit exceeded — see Retry-After header.
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
}
}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.
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.
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.
evt_2025_05_19_a1b2c3Success
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Not Found
Rate limit exceeded — see Retry-After header.
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