API reference
Assistants
An assistant is the voice agent that places and answers calls: its prompt, voice, first sentence and LLM, the data it extracts after each call, its tools and the calendars it books meetings on.
Endpoints
- POSTCreate an assistant
/assistantsCreate a voice agent: the prompt the LLM follows, how it opens the call, its voice (Cartesia, ElevenLabs and Gradium), the data to extract after each call and where to post the result. - GETGet assistant by ID
/assistants/{id}Retrieve a single assistant by its unique ID. - GETGet assistants
/assistantsRetrieve all assistants associated with your account. - POSTCheck an assistant's setup
/assistants/{id}/setup-checkCheck a saved assistant for the setup mistakes that break real calls: a persona whose gender doesn't match the voice, a prompt that transfers or books with no transfer destination or calendar connected, template text left in, the wrong language, wording that reads wrong once variables are filled. - PATCHUpdate an assistant
/assistants/{id}Update one or more fields of an assistant: only the fields you send change. - DELETEDelete an assistant
/assistants/{id}Permanently delete an assistant by its ID. - POSTClone an assistant
/assistants/{id}/cloneCreate a copy of an assistant with its whole configuration and its calendars (on the same connected accounts), named after it with " (Copy)" appended. - POSTTurn the public demo page on or off
/assistants/{id}/demo-pageThe demo page lets anyone with its link call the assistant and see the calls it placed, with their transcripts and recordings. - GETGet assistant statistics
/assistants/{id}/statisticsReport on the inbound calls the assistant received, whatever their status: the total, the weekly volume over the last 12 weeks and the weekly average since the assistant went into service, the weekday and hour they arrive, and how long the answered ones lasted. - POSTAdd a calendar to an assistant
/assistants/{id}/calendarsAdd a calendar on a provider, before any account is connected to it. - POSTCreate an invite link for a calendar
/assistants/{id}/calendars/{calendarId}/inviteA link for the owner of an account to connect it to the calendar, on the calendar's provider, without a Revox account: give them invite.url. - GETList an assistant's calendars
/assistants/{id}/calendarsThe calendars the assistant books meetings on during a call, in the order they were added. - GETList what a calendar can book on
/assistants/{id}/calendars/{calendarId}/optionsThe calendars (Google) or event types (Calendly, Cal.com) of the account connected to the calendar, to pick the one it books on with PUT .../selection. - PATCHChange a calendar's settings
/assistants/{id}/calendars/{calendarId}The settings of its provider: opening hours, meeting length and Meet link for Google Calendar, the event type for Calendly and Cal.com. - PUTConnect an account to a calendar
/assistants/{id}/calendars/{calendarId}/connectionConnect the calendar to an account your organization already uses on its provider. - DELETERemove a calendar from an assistant
/assistants/{id}/calendars/{calendarId}The agent stops booking on it. - DELETEDisconnect a calendar's account
/assistants/{id}/calendars/{calendarId}/connectionThe calendar keeps its handle, which the agent then treats as not available, and waits for an account. - DELETERevoke a calendar's invite link
/assistants/{id}/calendars/{calendarId}/inviteThe calendar's invite link stops working right away, and its invite becomes null. - PUTPick what a calendar books on
/assistants/{id}/calendars/{calendarId}/selectionSet the calendar (Google) or event type (Calendly, Cal.com) of the connected account the calendar books on, with an id from GET .../options. - GETList an assistant's pronunciations
/assistants/{id}/pronunciationsThe words the assistant's voice must say a specific way, with the text sent to the voice in their place. - PUTSet how the voice says a word
/assistants/{id}/pronunciationsStores the version of a word the user chose by ear. - DELETERemove a pronunciation
/assistants/{id}/pronunciations/{pronunciationId}The voice says the word as written again. - POSTSuggest versions of a word to choose by ear
/assistants/{id}/pronunciations/suggestHears how the word must sound (a recording of someone saying it, or sounds_like), writes up to five ways to spell it for the assistant's voice, the word as written first, and returns each one said by that voice in sentence. - POSTHear the voice say a word or one of its versions
/assistants/{id}/pronunciations/sayReturns the assistant's voice saying text exactly as sent, without applying any of its pronunciations: the word as written is how callers hear it before one is set.
The Assistant object
The voice agent that places and answers calls: its prompt, voice and LLM, how it opens and ends a call, the data it extracts, and the tools and calendars it uses.
Assistant
{
"id": "3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e34",
"prompt": "You are Julie from Acme. You call {{first_name}} to confirm tomorrow's appointment.",
"post_call_prompt": "Send the appointment address by SMS if asked.",
"first_sentence": "Hello {{first_name}}, this is Julie from Acme.",
"first_sentence_mode": "generated",
"end_of_call_sentence": "Thank you, have a good day.",
"voice": {
"provider": "cartesia",
"id": "4325f426-c4e0-418e-a0e5-97fcdfcdf8e6",
"speed": 1,
"volume": 1,
"model": "sonic-3"
},
"voice_languages": [
{
"language": "en",
"voice": {
"provider": "cartesia",
"id": "4325f426-c4e0-418e-a0e5-97fcdfcdf8e6",
"speed": 1,
"volume": 1,
"model": "sonic-3"
}
}
],
"cartesia_dictionary_pronunciation_id": "6f9a3c1e-2b7d-4e58-9a10-3d2c4b5e6f70",
"llm_model": { "type": "recommended" },
"webhook_url": "https://example.com/revox-webhook",
"max_call_duration_secs": 600,
"max_duration_end_message": "Thank you, have a good day.",
"structured_output_config": [
{
"name": "budget",
"type": "string",
"description": "Books a slot in the agenda.",
"required": false,
"enum_options": ["enum option"]
}
],
"structured_output_prompt": "Send the appointment address by SMS if asked.",
"call_retry_config": {
"calling_windows": [
{
"calling_window_start_time": "09:00",
"calling_window_end_time": "18:00",
"retry_delay_seconds": 7200
}
],
"max_retry_attempts": 1,
"allowed_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"excluded_dates": ["2026-11-05"],
"call_twice_in_a_row": false
},
"timezone": "Europe/Paris",
"background_sound": "audio/office.ogg",
"background_sound_volume": 1,
"thinking_sound": "city-ambience.ogg",
"thinking_sound_volume": 1,
"thinking_sound_probability": 0,
"transfer_destinations": [
{ "label": "Main line", "phone_number": "+33612345678" }
],
"human_transfer_mode": "warm",
"warm_transfer_summary_instructions": "Send the appointment address by SMS if asked.",
"warm_transfer_voice_speed": 1,
"ivr_navigation_enabled": true,
"voicemail_message": "Thank you, have a good day.",
"stt_context": {
"general": [{ "key": "crm_id", "value": "lead_8812" }],
"terms": ["term"]
},
"stt_model": "stt-rt-v4",
"first_sentence_delay_ms": 400,
"calendars": [
{
"id": "b2d4f6a8-1c3e-4a5b-8d7f-9e0a1b2c3d4e",
"assistant_id": "3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e34",
"handle": "google_calendar_jane_at_example.com",
"provider": "google-calendar",
"status": "ready",
"connection": {
"provider": "google-calendar",
"connection_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"settings": {
"calendar_id": "primary",
"time_zone": "Europe/Paris",
"duration_minutes": 30,
"days": [1, 2, 3, 4, 5],
"start_time": "09:00",
"end_time": "18:00",
"google_meet": false,
"location": "{{site_address}}"
}
},
"account_label": "Main line",
"connected_via_invite": false,
"invite": {
"url": "https://example.com",
"status": "completed",
"created_at": "2026-11-05T09:00:00Z",
"expires_at": "2026-11-05T09:00:00Z"
},
"created_at": "2026-11-05T09:00:00Z"
}
],
"calendly": null,
"cal": null,
"google_calendar": null,
"hubspot": {
"connection_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"precall_lookup_enabled": true,
"meeting_links": [
{
"slug": "jane-martin",
"label": "Main line",
"duration_ms": 1800000,
"is_fallback": false,
"booking_url": "https://example.com"
}
],
"post_call_sync": {
"enabled": true,
"field_mapping": [
{ "source": "email", "hubspot_property": "email" }
]
}
},
"slack": {
"connection_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"channels": [
{
"id": "b2d4f6a8-1c3e-4a5b-8d7f-9e0a1b2c3d4e",
"name": "Appointment reminder"
}
]
},
"teams": {
"connection_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"channels": [
{
"id": "b2d4f6a8-1c3e-4a5b-8d7f-9e0a1b2c3d4e",
"name": "Appointment reminder",
"team_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_name": "Sales"
}
]
},
"zoho": {
"connection_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"module": "Leads",
"log_call_activity": false,
"field_mapping": [
{ "source": "email", "zoho_field": "Email" }
],
"template": "{{outcome}}: {{summary}}\n{{call_url}}"
},
"custom_tools": [
{
"name": "appointment_reminder",
"description": "Books a slot in the agenda.",
"method": "GET",
"url": "https://example.com",
"headers": [{ "key": "crm_id", "value": "lead_8812" }],
"query_params": [
{ "key": "crm_id", "value": "lead_8812" }
],
"body_template": "{\"email\": \"{{email}}\", \"name\": \"{{first_name}}\"}",
"input_schema": [
{
"name": "budget",
"type": "string",
"description": "Books a slot in the agenda.",
"required": false,
"enum_options": ["enum option"]
}
]
}
],
"from_phone_number": "+33187654321",
"demo_page_url": "https://example.com",
"precall_lookup_url": "https://example.com",
"precall_lookup_headers": [
{ "key": "crm_id", "value": "lead_8812" }
],
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Appointment reminders",
"is_inbound_receptionist": false,
"created_by": {
"id": "5a7c9e1b-3d5f-4a2c-8e6b-0f1a2b3c4d5e",
"email": "jane@example.com",
"first_name": "Marie",
"last_name": "Martin"
},
"created_at": "2026-11-05T09:00:00Z",
"updated_at": "2026-11-05T09:02:41Z"
}