API Reference
Integrate your call analytics data with any external service.
Generate an API key in Settings →Base URL
https://your-domain.com/api/v1Authentication
Pass your API key in the Authorization header of every request:
Authorization: Bearer aca_your_api_key_hereAPI keys start with aca_. Generate yours on the Settings page.
Quick Start
Upload an audio file, then poll until analysis is complete:
# 1. Upload an audio file for analysis (returns 202 immediately)
curl -X POST https://your-domain.com/api/v1/calls \
-H "Authorization: Bearer aca_your_key_here" \
-F "file=@/path/to/call.mp3" \
-F "reportType=medium"
# Response → { "id": "cmp...", "status": "queued", "pollUrl": "/api/v1/calls/cmp..." }
# 2. Poll until status === "completed" or "failed"
curl https://your-domain.com/api/v1/calls/cmp... \
-H "Authorization: Bearer aca_your_key_here"// JavaScript — upload and wait for result
async function analyzeCall(filePath, apiKey) {
const form = new FormData();
form.append('file', fs.createReadStream(filePath));
form.append('reportType', 'medium');
const upload = await fetch('https://your-domain.com/api/v1/calls', {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
});
const { id } = await upload.json(); // status: 202
// Poll every 5 seconds until done
while (true) {
await new Promise(r => setTimeout(r, 5000));
const res = await fetch(`https://your-domain.com/api/v1/calls/${id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const call = await res.json();
if (call.status === 'completed') return call;
if (call.status === 'failed') throw new Error(call.errorMessage);
}
}Endpoints
/api/v1/meReturns the account associated with your API key. Useful for verifying the key is valid.
/api/v1/callsUpload an audio file for transcription and AI analysis. Returns HTTP 202 immediately with the call ID. Poll GET /api/v1/calls/:id until status is 'completed' or 'failed'. The audio file is automatically deleted from the server after analysis.
| Parameter | Type | Description |
|---|---|---|
| file | File (multipart) | Audio file — MP3, WAV, M4A, OGG, FLAC, AAC, WMA |
| reportType | string | high_level · medium · detailed (default: medium) |
/api/v1/callsReturns a paginated list of your calls, sorted by date descending.
| Parameter | Type | Description |
|---|---|---|
| limit | integer | Number of results (1–100, default 50) |
| offset | integer | Skip N records for pagination (default 0) |
| status | string | Filter by status: queued · transcribing · analyzing · completed · failed |
/api/v1/calls/:idReturns the full analysis for a single call — transcript, score, summary, issues, recommendations, and all report sections.
Example — GET /api/v1/calls response
{
"calls": [
{
"id": "cmpranw3g00049gvmy1r4tgfv",
"fileName": "call_2024-01-15.mp3",
"status": "completed",
"reportType": "medium",
"language": "uk",
"product": "CRM Software",
"saleStatus": "sold",
"score": 8,
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:31:45.000Z"
}
],
"total": 42,
"limit": 50,
"offset": 0
}Example — GET /api/v1/calls/:id response
{
"id": "cmpranw3g00049gvmy1r4tgfv",
"fileName": "call_2024-01-15.mp3",
"status": "completed",
"language": "uk",
"product": "CRM Software",
"saleStatus": "sold",
"score": 8,
"summary": "Manager successfully presented the product...",
"customerIntent": "Looking to automate sales tracking",
"nextStep": "Schedule demo for next week",
"issues": ["Did not ask about budget", "Interrupted customer twice"],
"positives": ["Strong product knowledge", "Good rapport"],
"recommendations": ["Ask discovery questions earlier"],
"objections": ["Price is too high"],
"managerMistakes": ["Skipped needs analysis"],
"detailedReport": [...],
"transcript": "Manager: Hello...",
"createdAt": "2024-01-15T10:30:00.000Z"
}Error Codes
| HTTP Status | Meaning |
|---|---|
| 200 | Success |
| 202 | Accepted — call queued for analysis |
| 401 | Missing or invalid API key |
| 404 | Resource not found (or belongs to another account) |
| 500 | Server error — please retry |
Try it out
Try it out
Send a live request directly from your browser.