API reference

Read-only endpoints. Authenticate with a Bearer token, scoped to what your integration needs.

GET/api/v1/sessions

List sessions for the authenticated tenant.

Returns sessions in reverse-chronological order, capped at the requested limit. Use `cursor` to paginate.

Scope · sessions:read

Query parameters

  • limitint (1–100)Page size. Default 50.
  • fromISO datetimeInclusive lower bound on `started_at`.
  • toISO datetimeInclusive upper bound on `started_at`.
  • user_iduuidFilter to a single rep.
  • cursorISO datetimePass `next_cursor` from the previous response.
{
  "ok": true,
  "data": [
    {
      "id": "30000000-0000-0000-0000-000000000001",
      "user_id": "a0000000-0000-0000-0000-000000000002",
      "scenario_id": "10000000-0000-0000-0000-000000000004",
      "status": "scored",
      "started_at": "2026-05-06T17:00:00Z",
      "ended_at": "2026-05-06T17:07:00Z",
      "duration_seconds": 420,
      "created_at": "2026-05-06T17:00:00Z"
    }
  ],
  "next_cursor": "2026-05-06T17:00:00Z"
}
GET/api/v1/sessions/:id

Fetch a single session, including its full transcript.

Returns 404 if the session does not exist or is outside your tenant.

Scope · sessions:read

{
  "ok": true,
  "data": {
    "id": "30000000-0000-0000-0000-000000000001",
    "transcript": [{ "role": "agent", "message": "Hello?", "time": 0 }]
  }
}
GET/api/v1/scorecards/:id

Fetch a single scorecard.

Includes overall score, headline, category breakdown, and coach-friendly callouts.

Scope · scorecards:read

{
  "ok": true,
  "data": {
    "overall_score": 87,
    "verdict": "crushed_it",
    "headline": "You earned the right to ask for the math by reframing his anger as data."
  }
}
GET/api/v1/scenarios

List scenarios for the tenant.

Active scenarios first; archived scenarios included for back-references.

Scope · scenarios:read

{
  "ok": true,
  "data": [
    { "id": "...", "name": "Cold Call — FSBO Seller", "call_type": "cold_call" }
  ]
}
GET/api/v1/users

List rep records for the tenant.

Returns id, full_name, role, and last_session_at. Email is intentionally not included by default.

Scope · users:read

{
  "ok": true,
  "data": [
    { "id": "...", "full_name": "Jordan Reyes", "role": "rep", "last_session_at": "2026-05-06T17:00:00Z" }
  ]
}
GET/api/v1/analytics/summary

Aggregate KPI summary for the period.

Total sessions, scored count, average score, and unique active reps.

Scope · analytics:read

Query parameters

  • fromISO datetimeDefault: 30 days ago.
  • toISO datetimeDefault: now.
{
  "ok": true,
  "data": {
    "from": "2026-04-06T17:00:00Z",
    "to": "2026-05-06T17:00:00Z",
    "sessions": 132,
    "scored": 128,
    "avg_score": 78,
    "unique_reps": 12
  }
}