API Documentation
The BoundaryAI API allows you to programmatically push feedback data, create data sources, and manage your organization's feedback collection workflow.
Overview
The BoundaryAI API enables you to programmatically import feedback data from any source- support tickets, CRM exports, surveys, chat logs - and leverage AI-powered analysis to extract insights.
Core Concepts
Before diving in, understand these key concepts:
Feedback Group
A container that organizes related data sources (e.g., "Q1 2024 Customer Feedback")
Data Source
A collection of feedback within a group (e.g., "Zendesk Tickets", "NPS Survey")
Question
A field within a data source that holds feedback text
APS
Analysis Points - credits consumed when pushing content for AI analysis
How It Works
1. Create a Feedback Group (or use existing)
↓
2. Create a Data Source with Questions
↓
3. Publish the Data Source
↓
4. Push your feedback content
↓
5. BoundaryAI analyzes and extracts insightsAuthentication
API Keys
All API requests require an API key passed in the Authorization header:
Key Format
inpk
Fixed prefix (Input API Key)
environment
live (production) or test (no APS deduction)
key_id
10-character unique identifier
secret
Base64-encoded secret (44 characters)
Key Permissions
When creating an API key, you choose its permission level:
push
Push content to existing data sources
Automated import scripts
create
Create feedback groups and data sources
Setup automation
all
Everything
Full programmatic control
Getting Your API Key
Go to Integrations → API in your BoundaryAI dashboard
Click Create API Key
Choose a name, environment, and permission level
Save the key immediately — it's only shown once!
Security Notes
Keys are hashed server-side; we never store the plaintext
Use
testenvironment keys during development (no APS charges)Rotate keys regularly via the dashboard
Never commit keys to version control
Making Requests
Base URLs
Request Format
All requests must include:
Response Format
Success Response
Error Response
Rate Limiting
Three layers protect the API:
Per-Key
60/min (configurable)
Individual API key
Per-Org
300/min
All keys in organization
Per-IP
600/min
Fallback protection
Response headers:
When rate limited, you'll receive HTTP 429 with a Retry-After header.
Idempotency
Prevent duplicate data by including an idempotency key:
First request
Executes normally, caches response for 24h
Same key + same payload
Returns cached response (no duplicate insert)
Same key + different payload
Returns HTTP 409 conflict error
Best practice: Use a unique identifier like {source}-{date}-{batch} for each import batch.
Endpoints Reference
Quick Reference
GET
/api/input/surveys/list
List all feedback groups & data sources
any
POST
/api/input/survey_series/create
Create a feedback group
create
POST
/api/input/survey/create
Create a data source
create
POST
/api/input/survey/publish
Publish a data source
create
POST
/api/input/content/push
Push content to one question
push
POST
/api/input/content/push/bulk
Push content to multiple questions
push
List Data Sources
Retrieve all feedback groups and data sources your API key can access. Run this first to get the IDs you need for pushing content.
Query Parameters
survey_series_id
integer
Filter to specific feedback group
survey_id
integer
Filter to specific data source
Response
Understanding the Response
survey_series
Array of feedback groups
surveys
Array of data sources within a group
questions
Fields available for content
accepts_text
Important! Only push text to questions where this is true
mode
ACCESSIBLE = published, EDITING = draft
Example
Push Content
Push feedback text to a specific question. This is the primary endpoint for importing data.
Request Body
Parameters
survey_series_id
string
Yes
Feedback group ID
survey_id
string
Yes
Data source ID
question.question_id
string
Yes
Question ID (must have accepts_text: true)
question.content
array
Yes
Array of feedback strings
source_reference
string
No
Your reference for this import batch
Content Limits
Max items per request
1,000
Max characters per item
10,000
Response
inserted
Number of new entries added
duplicates
Number of duplicate entries skipped
aps_deducted
Analysis points consumed
Example: Python
Example: JavaScript
Example: cURL
Bulk Push Content
Push content to multiple questions in a single request. Useful when your data has multiple fields.
Request Body
Parameters
survey_series_id
string
Yes
Feedback group ID
survey_id
string
Yes
Data source ID
questions
array
Yes
Array of question objects (max 100)
questions[].question_id
string
Yes
Question ID
questions[].content
array
Yes
Array of feedback strings
source_reference
string
No
Your reference for this batch
Response
Create Feedback Group
Create a new feedback group to organize related data sources.
Required Permission: create or all
Request Body
Parameters
name
string
Yes
Group name (2-255 characters)
Response
Note: If a group with the same name exists, it returns the existing group with
"created": false.
Create Data Source
Create a new data source with questions within a feedback group.
Required Permission: create or all
Request Body
Parameters
survey_series_id
string
Yes
Parent feedback group ID
survey_title
string
Yes
Data source name (1-100 chars)
survey_description
string
No
Description (max 1000 chars)
questions
array
No
Array of questions to create
Question Types
DEPTH_TEXT
long_answer
Long-form text (AI-analyzed)
✅ Yes
TEXT
short_answer
Short text
✅ Yes
MCQ
mcq
Multiple choice (multi-select)
❌ No
SCQ
scq
Single choice
❌ No
RATING
rating
1-5 scale
❌ No
NPS
nps
Net Promoter Score (0-10)
❌ No
Tip: Use
DEPTH_TEXTfor feedback text you want AI to analyze.
Response
Publish Data Source
Publish a data source to enable data collection and analysis.
Required Permission: create or all
Request Body
Response
Note: You must publish a data source before you can push content to it.
Webhooks
See Webhooks page
Complete Example
Here's a full workflow: create a feedback group, add a data source, publish it, and push content.
Support
Email: hello@boundary-ai.com
Documentation: docs.boundary-ai.com
Dashboard: app.boundary-ai.com
Last updated