Skip to main content
POST
This endpoint counts against your monthly analytics quota. Each request is counted even if no data is found. Returns 429 when the limit is reached.
Only COMPLETED transcriptions with a non-null evaluation score are included. IN_PROGRESS and FAILED transcriptions are excluded.
Results are capped at 20,000 transcriptions. If data.metadata.query_limit_reached is true, the dashboard is based on a partial dataset.
data.comparison.delta may be an empty object {} when there is no previous-period data to compare against (e.g. the participant had no calls last month).
The optional start_date / end_date filters (YYYY-MM-DD, both inclusive, each independent) scope the entire response to a date window — every metric is computed over the filtered set only. They match on each transcription’s created_at, which is exactly what period_date sets at upload time, so a call uploaded in June but dated April is correctly returned by a Q2 filter. data.metadata.filtered tells you whether a filter was applied — distinguishing “no data” from “the filter excluded everything”.
fail_rate changed meaning. In data.criteria_breakdown, fail_rate (and the new pass_rate) are now computed over evaluated_count — the calls where the criterion was actually scored — instead of total calls, so they are guaranteed within 0–100 (remove any client-side clamp). The array now lists every criterion, including never-failed ones, sorted worst-first with no-data entries last. When evaluated_count is 0, the rates and avg_score are null — that means no data, not a perfect score.
Per-criterion scores are only materialized for transcriptions evaluated after this feature’s release — there is no backfill. Older calls still count in kpis, charts, comparison, and raw_data, but contribute nothing to criteria_breakdown or criteria_evolution — so total_calls: 25 alongside a criterion with evaluated_count: 5 is correct, not a bug.
data.criteria_evolution is an object keyed by criterion ID, not an array — unlike every other collection in the response. Interpret avg_score via each criterion’s type: 0.01.0 compliance rate for boolean/strict, 1.05.0 for scale — the two scales must not share a chart axis.
Criterion names repeat across evaluators — two evaluators can both define a “Manejo de Objeciones” with different IDs. Use the evaluator_id / evaluator_tag fields on criteria_breakdown and criteria_evolution entries to attribute and label them.

Authorizations

x-api-key
string
header
required

Body

application/json
participant_id
string<uuid>
required

The unique identifier of the participant to analyze. Must belong to the authenticated account.

start_date
string<date>

Optional. Only analyse transcriptions from this date onwards. YYYY-MM-DD, inclusive — starts at 00:00:00 UTC on this day. Matches on each transcription's created_at (which period_date sets at upload time). Month-only values (2026-04) are rejected with 400. Omit for no lower bound.

Example:

"2026-04-01"

end_date
string<date>

Optional. Only analyse transcriptions up to this date. YYYY-MM-DD, inclusive — ends at 23:59:59 UTC on this day. Month-only values are rejected with 400. Omit for no upper bound. A start_date later than end_date is not an error — it simply matches nothing and returns the standard empty response. There is no quarter parameter: a quarter is just a range (2026-04-012026-06-30).

Example:

"2026-06-30"

Response

200 - application/json

Participant analysis generated successfully.

data
object