# Campaigns ## Create **post** `/campaigns` Create a new outbound calling campaign and launch it immediately. If scheduled_at is set, all calls will be queued until the specified time instead of starting right away. ### Body Parameters - `assistant_id: string` The ID of the assistant to use - `contacts: array of object { prompt_variables, to_phone_number }` The list of contacts to call - `prompt_variables: map[string]` - `to_phone_number: string` - `name: string` The name of the campaign - `call_retry_config: optional object { calling_windows, max_retry_attempts, timezone }` Override retry configuration for calls in this campaign. If not provided, uses the assistant's retry config. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `from_phone_number: optional string` The phone number to use for outbound calls (E.164 format, e.g., +1234567890) - `max_concurrent_calls: optional number` Maximum number of concurrent calls allowed for this campaign - `scheduled_at: optional string or unknown` Schedule all calls in this campaign to start at a specific date and time (ISO 8601 format) - `UnionMember0 = string` - `UnionMember1 = unknown` ### Returns - `campaign: object { id, assistant_id, created_at, 11 more }` - `id: string` - `assistant_id: string` - `created_at: unknown` - `is_cancelled: boolean` - `name: string` - `organization_id: string` - `status: "draft" or "running" or "paused" or "completed"` - `"draft"` - `"running"` - `"paused"` - `"completed"` - `updated_at: unknown` - `assistant: optional object { id, background_sound, calendly, 20 more }` - `id: string` - `background_sound: "audio/office.ogg"` The background sound to play during the call. Useful to give the impression that your AI agent is in an office. - `"audio/office.ogg"` - `calendly: object { connection_id, event_type_id }` - `connection_id: string` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: string` The event type ID representing the event type to schedule. (eg: https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5) - `call_retry_config: object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `created_at: unknown` - `end_of_call_sentence: string` - `first_sentence: string` - `first_sentence_delay_ms: number` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: "generated" or "static" or "none"` - `"generated"` - `"static"` - `"none"` - `ivr_navigation_enabled: boolean` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: object { name, type } or object { openrouter_model_id, openrouter_provider, type }` - `UnionMember0 = object { name, type }` - `name: "gpt-4.1" or "ministral-3-8b-instruct"` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: "dedicated-instance"` - `"dedicated-instance"` - `UnionMember1 = object { openrouter_model_id, openrouter_provider, type }` - `openrouter_model_id: string` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: string` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: "openrouter"` Use a model from OpenRouter. - `"openrouter"` - `max_call_duration_secs: number` The maximum duration of the call in seconds. This is the maximum time the call will be allowed to run. - `name: string` - `organization_id: string` - `prompt: string` - `structured_output_config: array of object { name, required, type, 2 more }` The structured output config to use for the call. This is used to extract the data from the call (like email, name, company name, etc.). - `name: string` - `required: boolean` - `type: "string" or "number" or "boolean" or 3 more` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: optional string` - `enum_options: optional array of string` - `transfer_phone_number: string` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: unknown` - `voice: object { id, provider, speed }` - `id: string` The ID of the voice. - `provider: "cartesia" or "elevenlabs"` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: optional number` The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs 0.7–1.2. Default is 1.0. - `voicemail_message: string` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: string` The webhook URL to call when the call is completed. - `faq_items: optional array of object { answer, question, id, 2 more }` - `answer: string` - `question: string` - `id: optional string` - `needs_human_answer: optional boolean` - `source: optional "human" or "ai"` - `"human"` - `"ai"` - `pending_faq_count: optional number` - `call_retry_config: optional object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `from_phone_number: optional string` - `max_concurrent_calls: optional number` - `row_stats: optional object { calling, completed, failed, 3 more }` - `calling: number` - `completed: number` - `failed: number` - `pending: number` - `retry: number` - `total: number` - `scheduled_at: optional unknown` ### Example ```http curl https://www.getrevox.com/api/campaigns \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $REVOX_API_KEY" \ -d '{ "assistant_id": "assistant_id", "contacts": [ { "prompt_variables": { "foo": "string" }, "to_phone_number": "to_phone_number" } ], "name": "x" }' ``` ## List **get** `/campaigns` Retrieve all campaigns for your organization, including both active and completed ones. ### Returns - `campaigns: array of object { id, assistant_id, created_at, 11 more }` - `id: string` - `assistant_id: string` - `created_at: unknown` - `is_cancelled: boolean` - `name: string` - `organization_id: string` - `status: "draft" or "running" or "paused" or "completed"` - `"draft"` - `"running"` - `"paused"` - `"completed"` - `updated_at: unknown` - `assistant: optional object { id, background_sound, calendly, 20 more }` - `id: string` - `background_sound: "audio/office.ogg"` The background sound to play during the call. Useful to give the impression that your AI agent is in an office. - `"audio/office.ogg"` - `calendly: object { connection_id, event_type_id }` - `connection_id: string` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: string` The event type ID representing the event type to schedule. (eg: https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5) - `call_retry_config: object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `created_at: unknown` - `end_of_call_sentence: string` - `first_sentence: string` - `first_sentence_delay_ms: number` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: "generated" or "static" or "none"` - `"generated"` - `"static"` - `"none"` - `ivr_navigation_enabled: boolean` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: object { name, type } or object { openrouter_model_id, openrouter_provider, type }` - `UnionMember0 = object { name, type }` - `name: "gpt-4.1" or "ministral-3-8b-instruct"` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: "dedicated-instance"` - `"dedicated-instance"` - `UnionMember1 = object { openrouter_model_id, openrouter_provider, type }` - `openrouter_model_id: string` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: string` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: "openrouter"` Use a model from OpenRouter. - `"openrouter"` - `max_call_duration_secs: number` The maximum duration of the call in seconds. This is the maximum time the call will be allowed to run. - `name: string` - `organization_id: string` - `prompt: string` - `structured_output_config: array of object { name, required, type, 2 more }` The structured output config to use for the call. This is used to extract the data from the call (like email, name, company name, etc.). - `name: string` - `required: boolean` - `type: "string" or "number" or "boolean" or 3 more` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: optional string` - `enum_options: optional array of string` - `transfer_phone_number: string` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: unknown` - `voice: object { id, provider, speed }` - `id: string` The ID of the voice. - `provider: "cartesia" or "elevenlabs"` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: optional number` The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs 0.7–1.2. Default is 1.0. - `voicemail_message: string` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: string` The webhook URL to call when the call is completed. - `faq_items: optional array of object { answer, question, id, 2 more }` - `answer: string` - `question: string` - `id: optional string` - `needs_human_answer: optional boolean` - `source: optional "human" or "ai"` - `"human"` - `"ai"` - `pending_faq_count: optional number` - `call_retry_config: optional object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `from_phone_number: optional string` - `max_concurrent_calls: optional number` - `row_stats: optional object { calling, completed, failed, 3 more }` - `calling: number` - `completed: number` - `failed: number` - `pending: number` - `retry: number` - `total: number` - `scheduled_at: optional unknown` ### Example ```http curl https://www.getrevox.com/api/campaigns \ -H "Authorization: Bearer $REVOX_API_KEY" ``` ## Retrieve **get** `/campaigns/{id}` Retrieve the full details of a single campaign by its unique ID. Can be used to poll for campaign completion. ### Path Parameters - `id: string` ### Returns - `campaign: object { id, assistant_id, created_at, 11 more }` - `id: string` - `assistant_id: string` - `created_at: unknown` - `is_cancelled: boolean` - `name: string` - `organization_id: string` - `status: "draft" or "running" or "paused" or "completed"` - `"draft"` - `"running"` - `"paused"` - `"completed"` - `updated_at: unknown` - `assistant: optional object { id, background_sound, calendly, 20 more }` - `id: string` - `background_sound: "audio/office.ogg"` The background sound to play during the call. Useful to give the impression that your AI agent is in an office. - `"audio/office.ogg"` - `calendly: object { connection_id, event_type_id }` - `connection_id: string` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: string` The event type ID representing the event type to schedule. (eg: https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5) - `call_retry_config: object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `created_at: unknown` - `end_of_call_sentence: string` - `first_sentence: string` - `first_sentence_delay_ms: number` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: "generated" or "static" or "none"` - `"generated"` - `"static"` - `"none"` - `ivr_navigation_enabled: boolean` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: object { name, type } or object { openrouter_model_id, openrouter_provider, type }` - `UnionMember0 = object { name, type }` - `name: "gpt-4.1" or "ministral-3-8b-instruct"` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: "dedicated-instance"` - `"dedicated-instance"` - `UnionMember1 = object { openrouter_model_id, openrouter_provider, type }` - `openrouter_model_id: string` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: string` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: "openrouter"` Use a model from OpenRouter. - `"openrouter"` - `max_call_duration_secs: number` The maximum duration of the call in seconds. This is the maximum time the call will be allowed to run. - `name: string` - `organization_id: string` - `prompt: string` - `structured_output_config: array of object { name, required, type, 2 more }` The structured output config to use for the call. This is used to extract the data from the call (like email, name, company name, etc.). - `name: string` - `required: boolean` - `type: "string" or "number" or "boolean" or 3 more` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: optional string` - `enum_options: optional array of string` - `transfer_phone_number: string` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: unknown` - `voice: object { id, provider, speed }` - `id: string` The ID of the voice. - `provider: "cartesia" or "elevenlabs"` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: optional number` The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs 0.7–1.2. Default is 1.0. - `voicemail_message: string` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: string` The webhook URL to call when the call is completed. - `faq_items: optional array of object { answer, question, id, 2 more }` - `answer: string` - `question: string` - `id: optional string` - `needs_human_answer: optional boolean` - `source: optional "human" or "ai"` - `"human"` - `"ai"` - `pending_faq_count: optional number` - `call_retry_config: optional object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `from_phone_number: optional string` - `max_concurrent_calls: optional number` - `row_stats: optional object { calling, completed, failed, 3 more }` - `calling: number` - `completed: number` - `failed: number` - `pending: number` - `retry: number` - `total: number` - `scheduled_at: optional unknown` ### Example ```http curl https://www.getrevox.com/api/campaigns/$ID \ -H "Authorization: Bearer $REVOX_API_KEY" ``` ## Delete **delete** `/campaigns/{id}` Permanently delete a campaign and all its associated rows. This action is irreversible. In-progress calls will not be affected, but no new calls will be placed. ### Path Parameters - `id: string` ### Returns - `success: boolean` ### Example ```http curl https://www.getrevox.com/api/campaigns/$ID \ -X DELETE \ -H "Authorization: Bearer $REVOX_API_KEY" ``` ## Cancel **post** `/campaigns/{id}/cancel` Cancel a running or scheduled campaign. Pending and queued calls will be aborted, while in-progress calls will be allowed to finish. Unlike deletion, the campaign and its rows are preserved for historical reference. ### Path Parameters - `id: string` ### Returns - `success: boolean` ### Example ```http curl https://www.getrevox.com/api/campaigns/$ID/cancel \ -X POST \ -H "Authorization: Bearer $REVOX_API_KEY" ``` ## Get Rows **get** `/campaigns/{id}/rows` Retrieve a paginated list of rows (contacts) for a given campaign. Supports filtering by text query, call statuses, and call result. ### Path Parameters - `id: string` ### Query Parameters - `page: number` - `page_size: number` - `query: optional string` - `result: optional "IVR" or "voicemail" or "human" or 4 more` - `"IVR"` - `"voicemail"` - `"human"` - `"unknown"` - `"ios-screening-filter"` - `"all"` - `"none"` - `statuses: optional string` ### Returns - `page: number` - `page_size: number` - `rows: array of object { id, input_data, phone_number, 2 more }` - `id: string` - `input_data: map[string]` - `phone_number: string` - `row_index: number` - `call: optional object { id, assistant, call_attempts, 16 more }` This represent a call "order" that was requested by the user. A call order can be resolved over multiple call attempts spanning up to a few days. - `id: string` The ID of the call. - `assistant: object { id, background_sound, calendly, 20 more }` - `id: string` - `background_sound: "audio/office.ogg"` The background sound to play during the call. Useful to give the impression that your AI agent is in an office. - `"audio/office.ogg"` - `calendly: object { connection_id, event_type_id }` - `connection_id: string` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: string` The event type ID representing the event type to schedule. (eg: https://api.calendly.com/event_types/b2330295-2a91-4a1d-bb73-99e7707663d5) - `call_retry_config: object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `created_at: unknown` - `end_of_call_sentence: string` - `first_sentence: string` - `first_sentence_delay_ms: number` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: "generated" or "static" or "none"` - `"generated"` - `"static"` - `"none"` - `ivr_navigation_enabled: boolean` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: object { name, type } or object { openrouter_model_id, openrouter_provider, type }` - `UnionMember0 = object { name, type }` - `name: "gpt-4.1" or "ministral-3-8b-instruct"` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: "dedicated-instance"` - `"dedicated-instance"` - `UnionMember1 = object { openrouter_model_id, openrouter_provider, type }` - `openrouter_model_id: string` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: string` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: "openrouter"` Use a model from OpenRouter. - `"openrouter"` - `max_call_duration_secs: number` The maximum duration of the call in seconds. This is the maximum time the call will be allowed to run. - `name: string` - `organization_id: string` - `prompt: string` - `structured_output_config: array of object { name, required, type, 2 more }` The structured output config to use for the call. This is used to extract the data from the call (like email, name, company name, etc.). - `name: string` - `required: boolean` - `type: "string" or "number" or "boolean" or 3 more` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: optional string` - `enum_options: optional array of string` - `transfer_phone_number: string` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: unknown` - `voice: object { id, provider, speed }` - `id: string` The ID of the voice. - `provider: "cartesia" or "elevenlabs"` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: optional number` The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs 0.7–1.2. Default is 1.0. - `voicemail_message: string` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: string` The webhook URL to call when the call is completed. - `faq_items: optional array of object { answer, question, id, 2 more }` - `answer: string` - `question: string` - `id: optional string` - `needs_human_answer: optional boolean` - `source: optional "human" or "ai"` - `"human"` - `"ai"` - `pending_faq_count: optional number` - `call_attempts: array of object { id, answered_at, dial_error, 10 more }` All call attempts for this call order, ordered by most recent first. - `id: string` The ID of the call attempt. - `answered_at: unknown` The time the call was answered. - `dial_error: "number_non_attributed" or "too_many_calls" or "busy" or 5 more` The SIP error that occurred. - `"number_non_attributed"` - `"too_many_calls"` - `"busy"` - `"temporarily_unavailable"` - `"no_answer"` - `"no_international_permission"` - `"precondition_failed"` - `"non_classified_error"` - `ended_at: unknown` The time the call ended. - `phone_number: string` The phone number that was called. Formatted in E.164 format. Example: +1234567890 - `recording_url: string` The URL of the audio recording of the call. - `result: "IVR" or "voicemail" or "human" or 2 more` - `"IVR"` - `"voicemail"` - `"human"` - `"unknown"` - `"ios-screening-filter"` - `started_at: unknown` The time the call started. - `status: "queued" or "ringing" or "ongoing" or 2 more` The status of the call attempt. - `"queued"` - `"ringing"` - `"ongoing"` - `"completed"` - `"error"` - `end_reason: optional string` Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voicemail', 'transfer', 'ivr_no_navigate'. - `ended_by: optional "agent" or "user" or "system"` Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'system' (e.g. max duration limit). - `"agent"` - `"user"` - `"system"` - `structured_output: optional map[unknown]` The data extracted from the call, using the structured output config from the parent call object. - `transcript: optional array of object { content, role, tool_arguments, 2 more }` The transcript of the call. - `content: string` - `role: "user" or "assistant" or "tool"` - `"user"` - `"assistant"` - `"tool"` - `tool_arguments: optional map[unknown] or string` - `UnionMember0 = map[unknown]` - `UnionMember1 = string` - `tool_is_error: optional boolean` - `tool_name: optional string` - `call_retry_config: object { calling_windows, max_retry_attempts, timezone }` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: array of object { calling_window_end_time, calling_window_start_time, retry_delay_seconds }` - `calling_window_end_time: string` End time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '17:00', '6pm'. Default: '18:00'. - `calling_window_start_time: string` Start time for the calling window in the recipient's timezone (or timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour). Examples: '09:00', '10am'. Default: '10:00'. - `retry_delay_seconds: number` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: number` Maximum number of call retry attempts. Default: 3. - `timezone: optional string` Optional IANA timezone identifier to override the automatic timezone detection from phone number. If not provided, timezone is determined from the recipient's phone number country code. Examples: 'America/New_York', 'Europe/Paris'. - `calls_count: number` The number of call attempts made. - `campaign: object { id, name }` - `id: string` - `name: string` - `created_at: unknown` The time the call order was created. - `direction: "inbound" or "outbound"` Whether the call is inbound or outbound. - `"inbound"` - `"outbound"` - `first_sentence_delay_ms: number` Delay in milliseconds before speaking the first sentence. Default: 400. - `from_phone_number: string` The phone number that made the call. Formatted in E.164 format. Example: +1234567890 - `is_cancelled: boolean` DEPRECATED: Whether the call has been cancelled. This is derived from `status`. Use `status` instead. - `is_completed: boolean` DEPRECATED: Whether the call has completed. This is derived from `status`. Use `status` instead. - `last_call_attempt: object { id, answered_at, dial_error, 10 more }` This represent a single call attempt. A call attempt is a single call made to the phone number. - `id: string` The ID of the call attempt. - `answered_at: unknown` The time the call was answered. - `dial_error: "number_non_attributed" or "too_many_calls" or "busy" or 5 more` The SIP error that occurred. - `"number_non_attributed"` - `"too_many_calls"` - `"busy"` - `"temporarily_unavailable"` - `"no_answer"` - `"no_international_permission"` - `"precondition_failed"` - `"non_classified_error"` - `ended_at: unknown` The time the call ended. - `phone_number: string` The phone number that was called. Formatted in E.164 format. Example: +1234567890 - `recording_url: string` The URL of the audio recording of the call. - `result: "IVR" or "voicemail" or "human" or 2 more` - `"IVR"` - `"voicemail"` - `"human"` - `"unknown"` - `"ios-screening-filter"` - `started_at: unknown` The time the call started. - `status: "queued" or "ringing" or "ongoing" or 2 more` The status of the call attempt. - `"queued"` - `"ringing"` - `"ongoing"` - `"completed"` - `"error"` - `end_reason: optional string` Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voicemail', 'transfer', 'ivr_no_navigate'. - `ended_by: optional "agent" or "user" or "system"` Who ended the call: 'agent' (AI agent), 'user' (caller/callee hung up), or 'system' (e.g. max duration limit). - `"agent"` - `"user"` - `"system"` - `structured_output: optional map[unknown]` The data extracted from the call, using the structured output config from the parent call object. - `transcript: optional array of object { content, role, tool_arguments, 2 more }` The transcript of the call. - `content: string` - `role: "user" or "assistant" or "tool"` - `"user"` - `"assistant"` - `"tool"` - `tool_arguments: optional map[unknown] or string` - `UnionMember0 = map[unknown]` - `UnionMember1 = string` - `tool_is_error: optional boolean` - `tool_name: optional string` - `llm_model: object { name, type } or object { openrouter_model_id, openrouter_provider, type }` - `UnionMember0 = object { name, type }` - `name: "gpt-4.1" or "ministral-3-8b-instruct"` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: "dedicated-instance"` - `"dedicated-instance"` - `UnionMember1 = object { openrouter_model_id, openrouter_provider, type }` - `openrouter_model_id: string` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: string` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: "openrouter"` Use a model from OpenRouter. - `"openrouter"` - `metadata: map[string]` Metadata stored with the call. - `organization_id: string` The ID of the organization that owns the call. - `scheduled_at: unknown` The time the call order is scheduled to start. - `status: "initializing" or "queued_for_calling" or "calling" or 4 more` The status of the call. - `"initializing"` - `"queued_for_calling"` - `"calling"` - `"scheduled"` - `"completed"` - `"cancelled"` - `"errored"` - `to_phone_number: string` The phone number that received the call. Formatted in E.164 format. Example: +1234567890 - `total: number` ### Example ```http curl https://www.getrevox.com/api/campaigns/$ID/rows \ -H "Authorization: Bearer $REVOX_API_KEY" ``` ## Export Rows **get** `/campaigns/{id}/export` Export all rows of a campaign as a CSV file for offline analysis or reporting. ### Path Parameters - `id: string` ### Returns - `csv: string` - `filename: string` ### Example ```http curl https://www.getrevox.com/api/campaigns/$ID/export \ -H "Authorization: Bearer $REVOX_API_KEY" ```