Avoca Sessions & Bookings API
v1 scheduling-widget sessions and completed bookings
v1 scheduling-widget sessions and completed bookings
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/avoca:avoca-sessions-bookings-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Avoca Enterprise Sessions & Bookings API
description: 'Read-only programmatic access to Avoca data: calls, transcripts, leads, coach evaluations, Simple Scheduler sessions and analytics, and outbound texting activity.'
version: 1.3.0
servers:
- url: https://enterprise-api.avoca.ai
security:
- bearerAuth: []
tags:
- name: Sessions & Bookings
description: v1 scheduling-widget sessions and completed bookings
paths:
/api/v1/teams/{teamId}/schedulers:
get:
tags:
- Sessions & Bookings
summary: List schedulers
description: List scheduler configs for a team. Requires the `read:scheduler_analytics` permission.
operationId: listSchedulers
parameters:
- $ref: '#/components/parameters/teamIdPath'
responses:
'200':
description: Scheduler configs
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
scheduler_id:
type: integer
name:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
meta:
$ref: '#/components/schemas/TeamMeta'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/teams/{teamId}/sessions:
get:
tags:
- Sessions & Bookings
summary: List sessions
description: List scheduling-widget sessions for a team — a customer's journey from starting a booking to completing it or dropping off. Requires the `read:scheduler_analytics` permission.
operationId: listTeamSessions
parameters:
- $ref: '#/components/parameters/teamIdPath'
- name: status
in: query
description: Filter by session status
schema:
type: string
enum:
- booked
- dropped_off
- pending
- name: scheduler_id
in: query
description: Filter to a specific scheduler
schema:
type: integer
- $ref: '#/components/parameters/startDate'
- $ref: '#/components/parameters/endDate'
- $ref: '#/components/parameters/cursor'
- $ref: '#/components/parameters/limit500default50'
responses:
'200':
description: Paginated sessions
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Session'
pagination:
$ref: '#/components/schemas/CursorPagination'
meta:
$ref: '#/components/schemas/TeamMeta'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/teams/{teamId}/sessions/{sessionId}:
get:
tags:
- Sessions & Bookings
summary: Get a session
description: Get a single session by ID. Requires the `read:scheduler_analytics` permission.
operationId: getTeamSession
parameters:
- $ref: '#/components/parameters/teamIdPath'
- name: sessionId
in: path
required: true
description: The session ID
schema:
type: string
responses:
'200':
description: The session
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Session'
meta:
$ref: '#/components/schemas/TeamMeta'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/teams/{teamId}/bookings:
get:
tags:
- Sessions & Bookings
summary: List bookings
description: List bookings for a team — sessions with status `booked`. Same query parameters as sessions, minus `status`. Requires the `read:scheduler_analytics` permission.
operationId: listTeamBookings
parameters:
- $ref: '#/components/parameters/teamIdPath'
- name: scheduler_id
in: query
description: Filter to a specific scheduler
schema:
type: integer
- $ref: '#/components/parameters/startDate'
- $ref: '#/components/parameters/endDate'
- $ref: '#/components/parameters/cursor'
- $ref: '#/components/parameters/limit500default50'
responses:
'200':
description: Paginated bookings
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Session'
pagination:
$ref: '#/components/schemas/CursorPagination'
meta:
$ref: '#/components/schemas/TeamMeta'
'403':
$ref: '#/components/responses/Forbidden'
/api/v1/teams/{teamId}/bookings/{bookingId}:
get:
tags:
- Sessions & Bookings
summary: Get a booking
description: Get a single booking by session ID. Returns 404 if the session exists but is not booked. Requires the `read:scheduler_analytics` permission.
operationId: getTeamBooking
parameters:
- $ref: '#/components/parameters/teamIdPath'
- name: bookingId
in: path
required: true
description: The session ID of the booking
schema:
type: string
responses:
'200':
description: The booking
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Session'
meta:
$ref: '#/components/schemas/TeamMeta'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/sessions:
get:
tags:
- Sessions & Bookings
summary: List sessions (cross-team)
description: Sessions across all teams accessible to a multi-team key. Supports the same query parameters as the team-scoped endpoint, plus an optional `team_id` filter. Requires the `read:scheduler_analytics` permission.
operationId: listSessions
parameters:
- name: team_id
in: query
description: Filter to one team
schema:
type: integer
- name: status
in: query
description: Filter by session status
schema:
type: string
enum:
- booked
- dropped_off
- pending
- $ref: '#/components/parameters/startDate'
- $ref: '#/components/parameters/endDate'
- $ref: '#/components/parameters/includeTestTeams'
- $ref: '#/components/parameters/cursor'
- $ref: '#/components/parameters/limit500default50'
responses:
'200':
description: Paginated cross-team sessions
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Session'
pagination:
$ref: '#/components/schemas/CursorPagination'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/bookings:
get:
tags:
- Sessions & Bookings
summary: List bookings (cross-team)
description: Bookings across all teams accessible to a multi-team key. Requires the `read:scheduler_analytics` permission.
operationId: listBookings
parameters:
- name: team_id
in: query
description: Filter to one team
schema:
type: integer
- $ref: '#/components/parameters/startDate'
- $ref: '#/components/parameters/endDate'
- $ref: '#/components/parameters/includeTestTeams'
- $ref: '#/components/parameters/cursor'
- $ref: '#/components/parameters/limit500default50'
responses:
'200':
description: Paginated cross-team bookings
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Session'
pagination:
$ref: '#/components/schemas/CursorPagination'
'401':
$ref: '#/components/responses/Unauthorized'
components:
parameters:
cursor:
name: cursor
in: query
description: Opaque pagination cursor from the previous response's `pagination.cursor`
schema:
type: string
includeTestTeams:
name: include_test_teams
in: query
description: Include designated internal QA/test teams in multi-team aggregations (default false)
schema:
type: boolean
default: false
limit500default50:
name: limit
in: query
description: Results per page (default 50, max 500)
schema:
type: integer
default: 50
maximum: 500
endDate:
name: end_date
in: query
description: Only rows before this ISO 8601 timestamp
schema:
type: string
format: date-time
teamIdPath:
name: teamId
in: path
required: true
description: The team ID
schema:
type: integer
startDate:
name: start_date
in: query
description: Only rows on/after this ISO 8601 timestamp
schema:
type: string
format: date-time
responses:
Unauthorized:
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Forbidden:
description: API key lacks the required permission or team access
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Session:
type: object
description: A customer's journey through the scheduling widget — from starting a booking to completing it or dropping off.
properties:
session_id:
type: string
examples:
- sess_abc123
team_id:
type: integer
scheduler_id:
type: integer
status:
type: string
enum:
- booked
- dropped_off
- pending
customer_info:
type: object
properties:
name:
type:
- string
- 'null'
email:
type:
- string
- 'null'
phone:
type:
- string
- 'null'
address:
type:
- string
- 'null'
issue_type:
type:
- string
- 'null'
examples:
- HVAC Repair
job_type:
type:
- string
- 'null'
selected_date:
type:
- string
- 'null'
format: date
selected_time:
type:
- string
- 'null'
utm:
type: object
properties:
source:
type:
- string
- 'null'
medium:
type:
- string
- 'null'
campaign:
type:
- string
- 'null'
term:
type:
- string
- 'null'
content:
type:
- string
- 'null'
google_ads:
type: object
properties:
gclid:
type:
- string
- 'null'
wbraid:
type:
- string
- 'null'
gbraid:
type:
- string
- 'null'
st_job_id:
type:
- integer
- 'null'
description: ServiceTitan job ID when the booking created a job
started_at:
type:
- string
- 'null'
format: date-time
completed_at:
type:
- string
- 'null'
format: date-time
last_activity_at:
type:
- string
- 'null'
format: date-time
events:
type: array
items:
type: object
properties:
event_type:
type: string
examples:
- avoca:bookingCompletion
created_at:
type: string
format: date-time
Error:
type: object
properties:
error:
type: string
description: Error type
message:
type: string
description: Human-readable description (newer endpoints)
required:
- error
TeamMeta:
type: object
properties:
team_id:
type: integer
CursorPagination:
type: object
properties:
cursor:
type:
- string
- 'null'
description: Pass back as the `cursor` query parameter to fetch the next page; `null` on the last page
has_more:
type: boolean
limit:
type: integer
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: API key in the format `avoca_<64 hex characters>`