API v1 · HTTPS

Bring Anvo analysis into your workflow.

Read your organization's call analyses and transcripts through a tenant-scoped REST API, or connect the same data directly to Claude Code through MCP.

Base URLhttps://anvo-backend-415394117760.us-central1.run.app/api/v1

Quickstart

Make your first request

Save the API key provided by Anvo as an environment variable, then use it to identify the organization attached to the credential.
01

Store your key

Keep it in a server-side secret store or environment variable.

02

Send a request

Pass the key in the X-API-Key header over HTTPS.

03

Read JSON

Responses use JSON and are scoped to your organization.

export ANVO_API_KEY="anvo_live_YOUR_KEY"

curl "https://anvo-backend-415394117760.us-central1.run.app/api/v1/me" \
  -H "X-API-Key: $ANVO_API_KEY"

Common workflow

Pull transcripts for a subset of calls

Use REST to retrieve transcripts for matching filenames or parsed metadata. Set include_transcript=true and paginate until has_more is false. Each item may have several schema results; transcript text is in results[].transcript and can be null when unavailable.
curl --get "https://anvo-backend-415394117760.us-central1.run.app/api/v1/me/results" \
  -H "X-API-Key: $ANVO_API_KEY" \
  --data-urlencode "filter_agent=Example Agent" \
  --data-urlencode "include_transcript=true" \
  --data-urlencode "limit=50" \
  --data-urlencode "offset=0"

Replace agent and Example Agent with your account's actual metadata field and value. REST date_from/date_to filter analysis-item creation time. Reanalyses can repeat a recording; use synced_file_id when deduplicating exports.

Search through MCP

  1. Call describe_call_data to discover the account's field values, date coverage, and analysis criteria.
  2. Call search_calls with the desired dates, coaches, partners, campaigns, outcomes, duration, transcript terms, or criterion filters. These dates use configured call metadata, then source modification time, then analysis time.
  3. Pass each returned item_id to get_call_analysis to retrieve its full available transcripts. Continue search_calls pagination using offset and has_more.

search_calls uses the latest completed analysis per synced recording. It returns matching excerpts, not full transcripts. All five MCP tools are read-only and scoped to the API key's account.

Authentication

One key, one organization

For integrations, send an API key in the X-API-Key header. Keys are scoped to a single Anvo organization and may be issued as read-only credentials. REST also accepts a dashboard session JWT as Authorization: Bearer. A REST Bearer token is a session token, not an API key. Read-only keys can read results but cannot change tenant resources.
X-API-Key: anvo_live_YOUR_KEY

Treat an API key like a password. Never place it in browser code, public repositories, shared screenshots, or URLs. Contact Anvo to revoke or rotate a credential.

Reference

Explore the customer API

The reference is generated from the running backend's routes and request/response models. It covers results, files, data sources, schemas, analysis runs, schedules, saved views, and other tenant resources. Use your client_id from /me for /clients/{client_id} paths. Billing-settings changes require a tenant-admin session.

Endpoint

Identify the authenticated account

Use this lightweight endpoint to confirm that a key is valid and discover its tenant identifier.
GET/me
curl "https://anvo-backend-415394117760.us-central1.run.app/api/v1/me" \
  -H "X-API-Key: $ANVO_API_KEY"

# Response
{
  "client_id": "2d96c4bf-7c9c-4fc1-8cf4-000000000000"
}

Endpoint

List analysis results

Browse analysis items from completed or processing runs, newest first by item creation time. Items still processing may have an empty results array. Reanalyzing a recording can produce multiple items. Transcripts are null unless explicitly requested.
GET/me/results
curl --get "https://anvo-backend-415394117760.us-central1.run.app/api/v1/me/results" \
  -H "X-API-Key: $ANVO_API_KEY" \
  --data-urlencode "date_from=2026-08-01" \
  --data-urlencode "date_to=2026-08-31" \
  --data-urlencode "limit=25" \
  --data-urlencode "offset=0"

Query parameters

ParameterTypeDescription
offsetintegerResults to skip. Defaults to 0.
limitintegerPage size from 1–200. Defaults to 50.
searchstringCase-insensitive filename search only. Use filter_<field> for metadata.
date_fromISO date/datetimeInclusive lower bound on analysis-item creation time, not the recording date.
date_toISO date/datetimeInclusive upper bound on analysis-item creation time. Midnight is expanded to 23:59:59.
schema_idUUIDSelect items with a result for this schema. Matching items can include other schema results.
data_source_idUUIDReturn results from one data source.
sort_bystringdate (default), filename, violations, score, or a parsed-metadata key. Score/violation sorts consider at most 5,000 matching items.
sort_orderasc | descasc or desc. Defaults to desc; unrecognized values also use desc.
min_length_msintegerMinimum parsed length_ms metadata value, in milliseconds.
include_transcriptbooleanDefaults to false, which returns transcript: null. Set true to include available text.
violation_filterJSON stringMap criterion keys to pass, fail, or na, e.g. {"greeting":"fail"}. URL-encode the JSON.
filter_<field>stringFilter parsed metadata. Separate values with |||. Different fields are combined with AND; values within a field with OR.

Response shape

Example with one matching item. raw_output follows your analysis schema; overall_score below is illustrative. Advance offset by the number of returned items while has_more is true; stop on an empty page. has_processing describes pending or processing runs across your account, regardless of the current filters.

{
  "items": [
    {
      "item_id": "8c3181c6-0000-0000-0000-000000000000",
      "synced_file_id": "f2560a21-0000-0000-0000-000000000000",
      "filename": "sample-call.mp3",
      "status": "completed",
      "error_message": null,
      "notes": null,
      "run_id": "0a42e54b-0000-0000-0000-000000000000",
      "run_name": "August review",
      "run_created_at": "2026-08-12T14:30:00Z",
      "run_status": "completed",
      "parsed_metadata": {
        "agent": "Example Agent"
      },
      "results": [
        {
          "schema_id": "9f2004c2-0000-0000-0000-000000000000",
          "schema_name": "Compliance review",
          "schema_slug": "compliance-review",
          "raw_output": {
            "overall_score": 92
          },
          "transcript": null,
          "processing_time_ms": 1240,
          "model_used": null,
          "created_at": "2026-08-12T14:30:10Z",
          "exposure": null
        }
      ],
      "violation_count": 0
    }
  ],
  "total": 1,
  "offset": 0,
  "limit": 25,
  "has_more": false,
  "has_processing": false
}

Endpoint

Get one result and transcript

Pass an item_id returned by the list endpoint. The response includes the complete structured analysis and the verbatim transcript when one is available.
GET/me/results/{item_id}
curl "https://anvo-backend-415394117760.us-central1.run.app/api/v1/me/results/ITEM_ID" \
  -H "X-API-Key: $ANVO_API_KEY"

# Response
{
  "item_id": "8c3181c6-0000-0000-0000-000000000000",
  "synced_file_id": "f2560a21-0000-0000-0000-000000000000",
  "filename": "sample-call.mp3",
  "status": "completed",
  "error_message": null,
  "notes": null,
  "results": [
    {
      "schema_id": "9f2004c2-0000-0000-0000-000000000000",
      "schema_name": "Compliance review",
      "schema_slug": "compliance-review",
      "raw_output": {
        "overall_score": 92
      },
      "transcript": "Agent: Thank you for calling…",
      "processing_time_ms": 1240,
      "model_used": null,
      "created_at": "2026-08-12T14:30:10Z",
      "exposure": null
    }
  ]
}

Claude Code

Connect Anvo through MCP

Anvo also exposes a read-only Model Context Protocol server over Streamable HTTP. It uses the same client API key and gives Claude tools for exploring call analyses. The catalog below comes from the deployed backend.
claude mcp add --transport http anvo \
  https://anvo-backend-415394117760.us-central1.run.app/mcp \
  --header "Authorization: Bearer anvo_live_YOUR_KEY"
list_call_analyses

Legacy analysis browser. List analyzed calls for your account, newest first. Returns each call's metadata and structured analysis findings, but NOT the full transcript (transcripts are large — fetch one on demand with get_call_analysis). Its search argument matches filenames only. For transcript, partner, coach, or outcome filtering, use search_calls. Paginated.

describe_call_data

Discover the authenticated account's available partners, campaigns, coaches, outcomes, raw metadata fields, analysis criteria, date range, coverage, aliases, and supported query options. Call this before guessing a dimension value or analysis criterion.

search_calls

Search unique calls using canonical partner/campaign/coach/outcome filters, actual call dates, duration, transcript contents, speaker role, and analysis pass/fail criteria. Returns total count, compact call metadata, timestamped transcript evidence, and item_id values for get_call_analysis. Reanalyses are deduplicated.

aggregate_calls

Count and summarize unique calls using the same filters as search_calls. Group by one or two dimensions: day, week, month, partner, campaign, coach, or outcome. Optionally calculate pass/fail rates for an analysis criterion.

get_call_analysis

Get the full analysis and verbatim, speaker-diarized transcript for a single call, identified by the item_id returned in search_calls or list_call_analyses.

Try asking Claude

  • “List my five most recent call analyses.”
  • “Find calls with sample-call in the filename.”
  • “Summarize the transcript and findings for this call.”

MCP accepts the API key as a Bearer token or in X-API-Key. Its tools are read-only, including when the key has write access to REST. Anvo does not provide OAuth discovery or authorization for MCP clients that require it. See the Claude Code MCP setup guide.

Errors

Standard HTTP responses

Handled request errors return JSON with a detail value. This is usually a string; validation errors (422) return an array of field errors. Unexpected server errors use detail and error fields. Do not use error text as a stable programmatic identifier.
200

Success

The request completed successfully.

400

Bad request

A parameter or credential scope is invalid.

401

Unauthorized

The API key is missing, invalid, expired, or revoked.

403

Forbidden

The tenant, role, or read-only key does not permit this action.

404

Not found

The requested item does not exist in your organization.

422

Validation error

A UUID, limit, offset, or other typed field is invalid.

500

Server error

An unexpected failure occurred. Contact Anvo with request details; never include your key.

Security

Designed for tenant-safe access

API credentials are validated on every request and resolve to one organization. Record identifiers are also checked against that organization before data is returned.
  • HTTPS required for every request
  • Keys scoped to one organization
  • Read-only credentials supported
  • Full keys shown only when created or rotated
  • /me/results returns null transcripts by default
  • Keys can be revoked or rotated by Anvo

Need help?

Talk to the Anvo team.

We can issue or rotate credentials, help with filters, and review your integration before it goes live.

team@anvo.ai