Push Feedback
Append feedback items to a source's field: single calls for steady trickles, bulk + async status for backfills, or a CSV/XLSX upload. Structured items support external_id dedup (retries never double-write), occurred_at back-dating, ratings, and per-item metadata.
Partner-vocabulary variant of /content/push: append feedback items to one field on a source. Accepts the same payload with feedback_group_id / source_id / field.field_id naming and responds in the same vocabulary. Idempotent via the Idempotency-Key header (24h window).
Requires permission: push or 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 retries (24h window).
Target feedback group id
Target source id within the group
Free-form identifier attached to the push for downstream tracking.
nullSuccess
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Payment Required — insufficient credits / APS
Forbidden — insufficient permission
Not Found
Conflict (idempotency key reuse or resource conflict)
Rate limit exceeded — see Retry-After header.
Internal Server Error
POST /api/input/feedback/push HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 327
{
"feedback_group_id": "1842",
"source_id": "9021",
"field": {
"field_id": "31245",
"content": [
"The new dashboard is great, but exports are slow.",
{
"text": "Support resolved my issue in one call.",
"external_id": "ticket-58121",
"customer_id": "cus_310",
"channel": "support",
"language": "en",
"rating": 5,
"occurred_at": "2026-07-12T09:30:00Z"
}
]
}
}{
"status": "success",
"feedback_group_id": 1842,
"source_id": 9021,
"field_id": 31245,
"inserted": 2,
"rows_accepted": 2,
"aps_deducted": 2,
"skipped_duplicates": 0,
"duplicate_external_ids": []
}Partner-vocabulary variant of /content/push/bulk: queue a multi-field feedback batch for async processing. Returns 202 with a task_id and partner-path status_url. Idempotent via Idempotency-Key header (24h window).
Requires permission: push or 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 retry key (24h window).
nullAccepted — task queued for async processing
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Conflict (idempotency key reuse or resource conflict)
Rate limit exceeded — see Retry-After header.
POST /api/input/feedback/push/bulk HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 195
{
"feedback_group_id": "1842",
"source_id": "9021",
"fields": [
{
"field_id": "31245",
"content": [
"First comment",
"Second comment"
]
},
{
"field_id": "31246",
"content": [
{
"text": "9",
"external_id": "rev-4471"
}
]
}
]
}{
"status": "accepted",
"task_id": "3fa2b7c8-6d1e-4f90-9a55-0c8e2d7b4a11",
"feedback_group_id": 1842,
"source_id": 9021,
"status_url": "/api/input/feedback/push/bulk/status/3fa2b7c8-6d1e-4f90-9a55-0c8e2d7b4a11"
}Partner-vocabulary variant of /content/push/bulk/status/{task_id}. 202 while pending/processing, 200 on completed or failed (the status field is the discriminator). 404 when the task id is unknown for the calling org.
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.
Success
Accepted — task queued for async processing
Unauthorized — missing or invalid credentials
Not Found
Rate limit exceeded — see Retry-After header.
GET /api/input/feedback/push/bulk/status/{task_id} HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"task_id": "3fa2b7c8-6d1e-4f90-9a55-0c8e2d7b4a11",
"status": "completed",
"progress": 100,
"progress_message": "Inserted 2400 items",
"created_at": "2026-07-12T09:31:02Z",
"completed_at": "2026-07-12T09:31:44Z",
"feedback_group_id": 1842,
"source_id": 9021,
"result": {
"status": "success",
"feedback_group_id": 1842,
"source_id": 9021,
"total_inserted": 2400,
"total_rows_accepted": 2412,
"total_aps_deducted": 2412,
"fields": [
{
"field_id": 31245,
"inserted": 2398,
"status": "success"
},
{
"field_id": 31246,
"inserted": 2,
"status": "success"
}
]
}
}Multipart upload: file (.csv or .xlsx) plus feedback_group_id, source_id and field_id form fields. The text column is picked with column (header name; defaults to the first column). Optional <key>_column fields (external_id_column, customer_id_column, channel_column, language_column, rating_column, occurred_at_column) map spreadsheet columns onto the structured ingest metadata, including external-ID dedup. Returns 202 with a task_id; poll the bulk status endpoint. Idempotent via the Idempotency-Key header (24h window) — a retried upload of the same file replays the original 202 instead of re-ingesting the rows.
Requires permission: push or 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 retries (24h window).
Accepted — task queued for async processing
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Payload Too Large
Rate limit exceeded — see Retry-After header.
POST /api/input/feedback/upload HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"status": "accepted",
"task_id": "3fa2b7c8-6d1e-4f90-9a55-0c8e2d7b4a11",
"feedback_group_id": 1842,
"source_id": 9021,
"rows_submitted": 2400,
"status_url": "/api/input/feedback/push/bulk/status/3fa2b7c8-6d1e-4f90-9a55-0c8e2d7b4a11"
}Last updated