API changelog
What changed in the API, and what we promise about compatibility.
The API surface is versioned (the current version is in the spec's info.version and served at /api/v1/openapi.json). This page tracks wire-contract changes and states the compatibility rules your integration can rely on.
Compatibility promise
We follow semantic versioning on the API surface:
Major (breaking) changes move the URL prefix (
/api/v1/to/api/v2/) and are preceded byDeprecation: true+Sunset: <date>headers on the old endpoints for at least a full release cycle. None have happened.Minor changes are backward-compatible additions: new endpoints, new optional request fields, new response fields, new webhook events.
Patch changes are clarifications only.
What we will never do without a major version: remove or rename a field or operation, tighten a field's type, change a success status code, or narrow an enum.
What your client should do: ignore unknown response fields, tolerate new webhook event types, and treat error code values (not messages) as the machine-readable contract.
September 2026: published host, synchronous bulk push
The reference now names the host that serves the Input API. Every Input API operation carries
https://boundaryai-ingest-279197672085.europe-west9.run.appas its server. The dashboard host (app.*) serves the web application and answers API paths with an HTML page and HTTP 200; clients generated against the earlier reference were parsing that page as a success body. Rebuild from the current reference, or point your base URL at the ingestion host. Both vocabularies and every route are unchanged.Synchronous bulk push.
POST /feedback/push/bulk(and/content/push/bulk) accepts"sync": trueand returns the completed result with 200 instead of a task id with 202, for batches of up to 50 items across up to 20 fields. Every row must carry anexternal_id(SYNC_REQUIRES_EXTERNAL_ID, 400); larger batches and busy moments fall back to the asynchronous 202 path. A batch in which no field accepted anything returns 400PUSH_FAILED; a batch that exceeds its 60-second budget returns 504SYNC_PUSH_TIMEOUT. See Pushing feedback.source_referenceon bulk pushes is now stored on every row (it was validated and then dropped; single pushes were unaffected).GET /megainedorg_name, the human-readable label of the organisation the key belongs to.MCP server: a seventh tool,
get_theme_verbatims, reads the comments behind one grouped theme; and Claude or ChatGPT users can connect by signing in from the assistant, with per-connection approval, instead of handling a key. See Connect AI assistants.
1.3.1: analysis read-back for time-tracked groups (September 2026, behaviour fix)
No schema change; analysis_id was always nullable. GET /sources/{id}/analysis for a source whose feedback group tracks feedback over time used to return analysis_status: "none" with all-zero figures even when every period was analysed, because such a source has no single all-time run. It now returns analysis_status: "available" with the sentiment distribution and themes aggregated across every analysed period (the same corpus as the dashboard's Overall view) and analysis_id: null. Clients that key "is this source analysed" on analysis_id should key on analysis_status, the documented contract since 1.1.0. The MCP list_themes tool likewise now reads the grouping the dashboard shows and accepts a period_key.
1.3.0: qualitative studies additions (August 2026)
Additive changes to the qualitative studies (interview analysis) API used by the platform's own qualitative workflow: transcript-only runs, and .txt / .docx transcript uploads alongside recordings. This surface is not part of the published integration reference; the Input API, invites, and webhooks are unchanged in this version.
1.2.1: integrator audit corrections (July 2026, patch)
A cold-integrator audit against the public reference. No endpoint shapes changed; every item either corrects the reference to match the wire or fixes behaviour that violated the documented contract.
Behaviour fixes:
Rate-limit windows are fixed, anchored at the first request. Previously every request, including rejected ones, extended the window, so a client polling faster than the window never recovered;
Retry-Afteris now exact.Idempotency conflicts (409) on API-key routes use the Input API error envelope.
Validation errors on the recommended routes speak the recommended vocabulary (
field, not the classicquestion).numericvalues inGET /feedbackare JSON numbers (they were serialised as strings); non-finite numeric content is rejected at ingestion.
Reference corrections: request and response examples on every operation; every write operation states the key permission it requires; bulk progress documented as a percentage (0-100); push responses document rows_accepted and the group/source ids, with aps_deducted as a legacy alias; GET /me credits fully typed; the 9-event webhook catalogue with payload schemas; the envelope-migration note above.
1.2.0: Survey invite distribution (July 2026)
Trigger personalized survey-invite emails from the API, using the template designed in the platform.
GET /sources/{id}/invite-template: template presence, variables, sender-domain status, quota usage.POST /sources/{id}/invites: transactional send, 1 to 1,000 recipients per call, with per-recipientvariables,dry_runpreviews, and aresendoverride of the never-double-invite default.GET /invites/{id}and/invites/{id}/recipients: distribution status and per-recipient outcomes, including delivery status.New
sendkey permission; API sends require your organisation's own verified sending domain.New webhook events:
invites.completed,invite.bounced.
1.1.0: Input API improvement pass (July 2026)
Recommended vocabulary: the API now speaks
feedback_group/source/fieldalongside the originalsurvey_series/survey/question. Same handlers, both key sets accepted; the classic routes are unchanged and not deprecated. See Concepts & naming.Structured content items on push:
{text, external_id, customer_id, channel, language, rating, occurred_at}.external_iddeduplicates retried pushes;occurred_atback-dates items into the right tracking period.Analysis read-back via
GET /sources/{id}/analysis: sentiment distribution, themes, monitor matches.New webhook events:
analysis.completed,flag.raised,report.ready.Data controls:
POST /feedback/erase(bulk erasure byexternal_idorcustomer_id),GET /feedback(cursor listing of API-pushed items),POST /feedback/upload(CSV/XLSX async ingest),GET /me(key introspection).feedback_typeon source creation (survey,call_transcript,app_review,support_ticket,chat,email,social_media,review,other).Listings became paginated (
limitdefault 50, max 200, with apaginationecho); a source takes up to 100 fields per create call.
1.0.0: Initial public spec (May 2026)
First published OpenAPI 3.1 description of the integration surface: content push (single + bulk), group/source/field creation and publishing, API-key auth with scoped permissions, idempotency keys, cursor pagination, rate-limit headers, and the first four webhook events (content.pushed, series.created, survey.created, survey.published) with signed deliveries.
Last updated