All API requests require authentication using an API key. You can generate API keys from your dashboard.
curl https://api.kestrelvoice.com/v1/calls \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"https://api.kestrelvoice.com/v1All API endpoints are relative to this base URL. The API uses RESTful conventions and returns JSON responses.
/callsRetrieve a list of calls for your account.
| limit | Number of results (default: 20, max: 100) |
| offset | Pagination offset |
| status | Filter by status: completed, in-progress, missed |
| from_date | ISO 8601 date (e.g., 2024-01-01) |
{
"data": [
{
"id": "call_abc123",
"phone_number": "+15551234567",
"status": "completed",
"duration": 180,
"recording_url": "https://...",
"transcript": "Hello, this is...",
"created_at": "2024-03-09T10:30:00Z"
}
],
"pagination": {
"total": 150,
"limit": 20,
"offset": 0
}
}/calls/:idRetrieve details for a specific call.
GET /v1/calls/call_abc123/appointmentsRetrieve appointments booked through your AI agent.
| status | scheduled, completed, cancelled |
| from_date | Filter appointments from this date |
| to_date | Filter appointments until this date |
/analyticsRetrieve analytics data for your account.
Receive real-time notifications when events occur in your account.
Triggered when a call ends
Triggered when an appointment is scheduled
Triggered when emergency keywords are detected
Triggered when a call is not answered
{
"event": "call.completed",
"timestamp": "2024-03-09T10:30:00Z",
"data": {
"call_id": "call_abc123",
"phone_number": "+15551234567",
"duration": 180,
"outcome": "appointment_booked",
"transcript": "...",
"recording_url": "https://..."
}
}All webhook requests include a signature header for verification:
X-Kestrel-SignatureVerify this signature using your webhook secret to ensure requests are from KestrelVoice.
| Plan | Rate Limit |
|---|---|
| Personal | 100 requests/minute |
| Business | 500 requests/minute |
| Business Plus | 1000 requests/minute |
Rate limit headers are included in all API responses. Contact support for higher limits.
| Code | Description |
|---|---|
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Invalid API key |
| 403 | Forbidden - Insufficient permissions |
| 404 | Not Found - Resource doesn't exist |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error - Contact support |