Invites
Trigger personalized survey-invite emails from the API using the template designed in the dashboard. Requires the send key permission and a verified sending domain.
Lifecycle + counts for one API-triggered send. status is the discriminator: pending/sending are in flight; sent/partial/failed are terminal. Subscribe to the invites.completed webhook event instead of polling.
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
Unauthorized — missing or invalid credentials
Not Found
Rate limit exceeded — see Retry-After header.
GET /api/input/invites/{distribution_id} HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"distribution_id": 7301,
"survey_id": 9021,
"status": "sent",
"total": 1000,
"sent": 991,
"failed": 4,
"skipped": 5,
"created_at": "2026-07-12T10:00:00Z",
"finished_at": "2026-07-12T10:06:31Z"
}Per-recipient outcomes: send status, ESP delivery status (populated asynchronously from delivery events), and your external_id for correlation. Pass next_cursor back as cursor for the next page.
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.
50Success
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Not Found
Rate limit exceeded — see Retry-After header.
GET /api/input/invites/{distribution_id}/recipients HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"items": [
{
"id": 1,
"email": "jamie@example.com",
"external_id": "cus_310",
"status": "sent",
"delivery_status": "delivered",
"error": null
}
],
"next_cursor": null,
"has_more": false
}What an integration needs before calling the send endpoint: whether a template is configured in the platform, which variable keys it can personalize with, whether the org's sender domain is verified (required for API sends), and the current daily quota usage.
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.
The source id
Success
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Not Found
Rate limit exceeded — see Retry-After header.
GET /api/input/sources/{survey_id}/invite-template HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"configured": true,
"subject": "How did we do, {{first_name}}?",
"variables": [
"first_name",
"order_id"
],
"sender_domain_verified": true,
"sending_enabled": true,
"daily_quota": 2000,
"daily_quota_used": 150
}Emails the survey to the supplied recipients using the invite template designed in the platform. Recipients are appended to the source's respondent list (each gets a personalized survey link, so responses join back to the contact). Addresses that already received this survey are skipped unless resend is true; suppressed addresses (unsubscribed / bounced) are never emailed. Requires a send-scoped API key AND the org's own verified sending domain — the shared BAI Analytics sender is reserved for dashboard sends. Set dry_run to preview the rendered emails without sending. Returns 202 + a distribution_id to poll; subscribe to invites.completed and invite.bounced webhook events for the outcomes.
Requires permission: send 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.
The source id
Opaque retry key (24h window). Strongly recommended for send calls.
Re-invite addresses that already received this survey (default: they are skipped).
falseRender previews for the first recipients and send nothing.
falseSuccess
Accepted — task queued for async processing
Bad Request — validation failed
Unauthorized — missing or invalid credentials
Forbidden — insufficient permission
Not Found
Conflict (idempotency key reuse or resource conflict)
Rate Limited — see Retry-After header
POST /api/input/sources/{survey_id}/invites HTTP/1.1
Host: app.boundary-ai.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 156
{
"recipients": [
{
"email": "jamie@example.com",
"external_id": "cus_310",
"variables": {
"first_name": "Jamie",
"order_id": "A-1042"
}
}
],
"resend": false,
"dry_run": false
}{
"data": {
"status": "text",
"previews": [
{
"email": "text",
"subject": "text",
"body_html": "text",
"error": "text"
}
],
"would_accept": 1,
"skipped_already_invited": [
"text"
],
"invalid": [
"text"
]
}
}Last updated