AI Call

Analytics

API Reference

Integrate your call analytics data with any external service.

Generate an API key in Settings →

Base URL

https://your-domain.com/api/v1

Authentication

Pass your API key in the Authorization header of every request:

Authorization: Bearer aca_your_api_key_here

API 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

GET/api/v1/me

Returns the account associated with your API key. Useful for verifying the key is valid.

POST/api/v1/calls

Upload 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.

ParameterTypeDescription
fileFile (multipart)Audio file — MP3, WAV, M4A, OGG, FLAC, AAC, WMA
reportTypestringhigh_level · medium · detailed (default: medium)
GET/api/v1/calls

Returns a paginated list of your calls, sorted by date descending.

ParameterTypeDescription
limitintegerNumber of results (1–100, default 50)
offsetintegerSkip N records for pagination (default 0)
statusstringFilter by status: queued · transcribing · analyzing · completed · failed
GET/api/v1/calls/:id

Returns 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 StatusMeaning
200Success
202Accepted — call queued for analysis
401Missing or invalid API key
404Resource not found (or belongs to another account)
500Server error — please retry

Try it out

Try it out

Send a live request directly from your browser.