Introduction
InboundFlow provides a REST API and real-time Webhooks to integrate your AI voice assistant data with any system. Use the API to pull call data, contacts, leads, and appointments. Use webhooks to receive real-time notifications when events happen.
Base URL
https://api.inboundflow.app
Authentication
All API requests require an API key in the Authorization header:
Header
Authorization: Bearer sk_live_your_key_here
How to get your API key
- Log in to your InboundFlow dashboard at secure.inboundflow.app
- Go to Settings → API
- Click “Generate API Key”
- Copy and securely store your key — it won’t be shown again
Note: API keys are scoped to your organization. All data returned is limited to your organization only.
Rate Limits
- 60 requests per minute per API key
- Rate limit headers included in every response:
Response Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
Pagination
List endpoints support cursor-based pagination:
limit— results per page (default: 50, max: 100)cursor— opaque cursor for next page (fromnext_cursorin response)since— ISO datetime, only return records created after this time
Response Format
All responses follow a consistent format:
JSON
{
"data": { ... },
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-24T00:00:00Z"
}
}
List endpoints include pagination info:
JSON
{
"data": [...],
"has_more": true,
"next_cursor": "eyJjcmVhdGVkX2F0Ijo...",
"meta": { ... }
}
Quickstart: Get Your Recent Calls
cURL
curl -X GET "https://api.inboundflow.app/v1/calls?limit=5" -H "Authorization: Bearer sk_live_your_key_here" -H "Content-Type: application/json"
Response
JSON
{
"data": [
{
"id": "uuid",
"caller_phone": "+1234567890",
"caller_name": "Dave",
"status": "completed",
"duration_seconds": 55,
"summary": "Called about auto repair appointment...",
"started_at": "2026-02-24T20:59:00Z",
"ended_at": "2026-02-24T21:00:00Z",
"recording_url": "https://..."
}
],
"has_more": false,
"next_cursor": null,
"meta": {
"request_id": "req_abc123def456",
"timestamp": "2026-02-24T00:00:00Z"
}
}
Quickstart: Get Your Contacts
cURL
curl -X GET "https://api.inboundflow.app/v1/contacts?limit=5" -H "Authorization: Bearer sk_live_your_key_here"
Error Handling
All errors return a consistent JSON format:
JSON
{
"error": {
"code": "unauthorized",
"message": "Invalid API key",
"status": 401
},
"meta": {
"request_id": "req_abc123def456",
"timestamp": "2026-02-24T00:00:00Z"
}
}
Error Codes
| Code | Meaning |
|---|---|
| 401 | unauthorizedMissing, invalid, revoked, or expired API key |
| 400 | bad_requestInvalid parameters or missing required fields |
| 404 | not_foundResource not found |
| 429 | rate_limitedRate limit exceeded (check Retry-After header) |
| 500 | internal_errorServer error |