> ## Documentation Index
> Fetch the complete documentation index at: https://docs.60db.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Call Analysis API

> Find problems in call recordings with an analyzer: create it, add recordings, read results, fix your AI agent

An **analyzer** is a set of instructions that tells the AI what to look for in your calls, for example "flag any wrong refund information". You add recordings to it. 60db transcribes each call, checks it against your instructions, and returns the problems it found, with the exact quote and time.

Use the API to build this into your own tools. For a hands-on walkthrough, see [Analyze your first calls](https://docs.60db.ai/features/call-analysis-quickstart.md). For the product overview, see [Call analysis](https://docs.60db.ai/features/call-analysis.md).

## The flow

**1. Create an analyzer**

[`POST /analysis-agents`](https://docs.60db.ai/api-reference/call-analysis/create-analyzer) with a name and instructions.

**2. Add recordings**

Three ways, which you can mix:

* **Upload files.** [Create a batch](https://docs.60db.ai/api-reference/call-analysis/create-batch.md) with `direct_upload`, get an [upload slot](https://docs.60db.ai/api-reference/call-analysis/create-upload-slot.md) per file, upload to storage, then [confirm the upload](https://docs.60db.ai/api-reference/call-analysis/confirm-upload.md).
* **Fetch URLs.** [Create a batch](https://docs.60db.ai/api-reference/call-analysis/create-batch.md) with `csv_urls`, then [fetch the recordings](https://docs.60db.ai/api-reference/call-analysis/fetch-recordings.md).
* **Pick calls you already have.** [AI agent calls](https://docs.60db.ai/api-reference/call-analysis/analyze-agent-calls.md) or [dialer calls](https://docs.60db.ai/api-reference/call-analysis/analyze-dialer-calls.md), or [watch sources](https://docs.60db.ai/api-reference/call-analysis/set-sources.md) so new calls are analyzed automatically.

**3. Analyze**

[`analyze`](https://docs.60db.ai/api-reference/call-analysis/analyze-all) the ready recordings. You confirm the count first, because analysis uses credits.

**4. Poll**

[List recordings](https://docs.60db.ai/api-reference/call-analysis/list-recordings.md) until each one is `done` or `failed`.

**5. Read the results**

[Problems](https://docs.60db.ai/api-reference/call-analysis/get-problems.md), [analytics](https://docs.60db.ai/api-reference/call-analysis/get-analytics.md), and the [analysis of one call](https://docs.60db.ai/api-reference/call-analysis/get-call-analysis.md).

**6. Fix your AI agent (optional)**

For calls made by a 60db AI agent: [suggest](https://docs.60db.ai/api-reference/call-analysis/suggest-agent-fix.md), [apply](https://docs.60db.ai/api-reference/call-analysis/apply-agent-fix.md) and, if needed, [undo](https://docs.60db.ai/api-reference/call-analysis/undo-agent-fix.md) better instructions.

## Base URL and authentication

```
https://api.60db.ai/deep-analytics
```

Every request needs a **user API key** in the `Authorization` header. See [Authentication](https://docs.60db.ai/authentication.md) to create one.

```bash theme={null}
Authorization: Bearer sk_your_api_key
```

* The key works inside its own workspace. A `workspace_id` in the query or body is ignored.
* The key acts as the **workspace owner**, with the owner's current role. If the owner has no active membership in the workspace, requests fail with `403 DA_MEMBERSHIP_REQUIRED`.
* Platform (system) keys are refused with `403 SYSTEM_KEY_ROUTE_DENIED`.
* If the key has IP addresses registered, calls from other IPs fail with `403 IP_BLOCKED`.
* Responses are never cached (`Cache-Control: no-store`).
* IDs are UUID strings. A path ID that is not a UUID returns `404 NOT_FOUND`.

> [!WARNING]
>
> Only the routes in this reference work with an API key. Every other `/deep-analytics` route returns `403 DA_API_KEY_DENIED`.

## Permissions

| Action | Needs |
| - | - |
| List and read analyzers, recordings, problems, analytics | View access on the analyzer |
| Create an analyzer | Owner or admin role, or the `analytics_admin` grant |
| Update, archive, set sources, pick calls, add recordings, analyze | `manage` access on the analyzer |
| Read the analysis of one call | Read and evidence access, only for calls added to an analyzer |
| Any route in this reference | The key's own **`call_analysis` permission**. Without it every route returns `403 DA_API_KEY_SCOPE_MISSING` |
| Suggest, apply or undo an agent fix | The above, plus the key's own **`agents` permission**. Keys created with default scopes have it. A key created with explicit `permissions` that omits `agents` gets `403 POLICY_DENY` |

### Enable `call_analysis` on a key

New keys have `call_analysis` by default (the default is every module: `tts`, `stt`, `memory`, `slm`, `judge`, `whatsapp`, `agents`, `call_analysis`). Keys created before this permission existed do not have it. The key owner must turn it on:

* **Dashboard:** Developers → API keys, edit the key, switch on **Call analysis**.
* **API:** `PUT /developer/api/{id}` with `{ "permissions": { "call_analysis": true } }`. List the other modules you still want in the same object, because only fields set to `true` grant access.

A workspace owner, an admin, or a user with the `analytics_admin` grant can do everything. Things you cannot see return `404`, not `403`.

## Response format

```json theme={null}
{ "success": true, "data": { }, "pagination": { "total": 2, "limit": 50, "offset": 0 } }
```

`pagination` appears only on paged lists. Errors:

```json theme={null}
{ "success": false, "message": "Detailed message", "code": "VALIDATION_ERROR", "field": "name" }
```

## Limits

| Limit | Value |
| - | - |
| Requests per API key, all routes in this section | 300 per minute. Exceeding it returns `429 DA_API_KEY_RATE_LIMITED` |
| Agent fix suggest and apply | 10 per minute per owner. Exceeding it returns `429 AGENT_FIX_RATE_LIMITED` |
| Recording file | 100 MiB. mp3, wav, m4a, mp4, ogg, oga, opus, flac, webm. The content is checked and must match |
| Batch CSV | 5 MiB, 5,000 rows, 50 columns, 2,000 characters per cell |
| Picked calls per request | 100 |
| Analyzer instructions | 20,000 characters |

## Credits

Analysis uses paid speech-to-text and model credits from your workspace. [Analyze](https://docs.60db.ai/api-reference/call-analysis/analyze-all.md) requires a `confirm_count` that matches the server's count, and returns `estimated_credits_usd`. Repeating an analyze call never charges twice for the same recording. See [Plans, credits and top-ups](https://docs.60db.ai/get-started/plans-credits-and-top-ups.md).

## Errors

Every route can return these:

| Status | Code | Meaning |
| - | - | - |
| 400 | `VALIDATION_ERROR` | A field is missing or invalid. `field` names it |
| 401 | `Invalid API Key` / `Access token required` | The key is missing, wrong or deleted |
| 403 | `DA_API_KEY_DENIED` | This route is not available to API keys |
| 403 | `SYSTEM_KEY_ROUTE_DENIED` | Platform keys cannot use this API |
| 403 | `IP_BLOCKED` | The caller IP is not allowed for this key |
| 403 | `DA_API_KEY_SCOPE_MISSING` | The key does not have the `call_analysis` permission. Enable it on the key (see Permissions) |
| 403 | `DA_MEMBERSHIP_REQUIRED` | The workspace owner has no active membership |
| 403 | `POLICY_DENY` | The key's owner (or the key) lacks permission |
| 404 | `NOT_FOUND` | Does not exist, or you cannot see it |
| 429 | `DA_API_KEY_RATE_LIMITED` | More than 300 requests per minute |
| 500 | `DA_ERROR` | Server error |
| 503 | `DA_AUTHZ_UNAVAILABLE` | The permission service is unavailable. Retry |

## Endpoints

> [card] [Analyzers](https://docs.60db.ai/api-reference/call-analysis/list-analyzers.md)
>
> List, create, get, update, archive. Sources and picked calls

> [card] [Add recordings](https://docs.60db.ai/api-reference/call-analysis/create-batch.md)
>
> Batches, upload slots, upload confirmation, URL fetch, analyze

> [card] [Results](https://docs.60db.ai/api-reference/call-analysis/list-recordings.md)
>
> Recordings, problems, analytics, per-call analysis

> [card] [Fix your agent](https://docs.60db.ai/api-reference/call-analysis/suggest-agent-fix.md)
>
> Suggest, apply and undo better AI agent instructions


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.