# Campaigns ## Create `campaigns.create(**kwargs) -> CampaignCreateResponse` **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. ### Parameters - `assistant_id: String` The ID of the assistant to use - `contacts: Array[{ prompt_variables, to_phone_number}]` The list of contacts to call - `prompt_variables: Hash[Symbol, String]` - `to_phone_number: String` - `name: String` The name of the campaign - `call_retry_config: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: String` The phone number to use for outbound calls (E.164 format, e.g., +1234567890) - `max_concurrent_calls: Float` Maximum number of concurrent calls allowed for this campaign - `scheduled_at: Time | untyped` Schedule all calls in this campaign to start at a specific date and time (ISO 8601 format) - `Time` - `untyped` ### Returns - `class CampaignCreateResponse` - `campaign: { id, assistant_id, created_at, 11 more}` - `id: String` - `assistant_id: String` - `created_at: untyped` - `is_cancelled: bool` - `name: String` - `organization_id: String` - `status: :draft | :running | :paused | :completed` - `:draft` - `:running` - `:paused` - `:completed` - `updated_at: untyped` - `assistant: { 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: { 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: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: untyped` - `end_of_call_sentence: String` - `first_sentence: String` - `first_sentence_delay_ms: Integer` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: :generated | :static | :none` - `:generated` - `:static` - `:none` - `ivr_navigation_enabled: bool` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: { name, type} | { openrouter_model_id, openrouter_provider, type}` - `class UnionMember0` - `name: :"gpt-4.1" | :"ministral-3-8b-instruct"` - `:"gpt-4.1"` - `:"ministral-3-8b-instruct"` - `type: :"dedicated-instance"` - `:"dedicated-instance"` - `class UnionMember1` - `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: Float` 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[{ 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: bool` - `type: :string | :number | :boolean | 3 more` - `:string` - `:number` - `:boolean` - `:enum` - `:date` - `:datetime` - `description: String` - `enum_options: Array[String]` - `transfer_phone_number: String` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: untyped` - `voice: { id, provider, speed}` - `id: String` The ID of the voice. - `provider: :cartesia | :elevenlabs` The provider of the voice. - `:cartesia` - `:elevenlabs` - `speed: Float` 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: Array[{ answer, question, id, 2 more}]` - `answer: String` - `question: String` - `id: String` - `needs_human_answer: bool` - `source: :human | :ai` - `:human` - `:ai` - `pending_faq_count: Float` - `call_retry_config: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: String` - `max_concurrent_calls: Float` - `row_stats: { calling, completed, failed, 3 more}` - `calling: Float` - `completed: Float` - `failed: Float` - `pending: Float` - `retry_: Float` - `total: Float` - `scheduled_at: untyped` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") campaign = revox.campaigns.create( assistant_id: "assistant_id", contacts: [{prompt_variables: {foo: "string"}, to_phone_number: "to_phone_number"}], name: "x" ) puts(campaign) ``` ## List `campaigns.list() -> CampaignListResponse` **get** `/campaigns` Retrieve all campaigns for your organization, including both active and completed ones. ### Returns - `class CampaignListResponse` - `campaigns: Array[{ id, assistant_id, created_at, 11 more}]` - `id: String` - `assistant_id: String` - `created_at: untyped` - `is_cancelled: bool` - `name: String` - `organization_id: String` - `status: :draft | :running | :paused | :completed` - `:draft` - `:running` - `:paused` - `:completed` - `updated_at: untyped` - `assistant: { 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: { 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: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: untyped` - `end_of_call_sentence: String` - `first_sentence: String` - `first_sentence_delay_ms: Integer` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: :generated | :static | :none` - `:generated` - `:static` - `:none` - `ivr_navigation_enabled: bool` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: { name, type} | { openrouter_model_id, openrouter_provider, type}` - `class UnionMember0` - `name: :"gpt-4.1" | :"ministral-3-8b-instruct"` - `:"gpt-4.1"` - `:"ministral-3-8b-instruct"` - `type: :"dedicated-instance"` - `:"dedicated-instance"` - `class UnionMember1` - `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: Float` 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[{ 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: bool` - `type: :string | :number | :boolean | 3 more` - `:string` - `:number` - `:boolean` - `:enum` - `:date` - `:datetime` - `description: String` - `enum_options: Array[String]` - `transfer_phone_number: String` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: untyped` - `voice: { id, provider, speed}` - `id: String` The ID of the voice. - `provider: :cartesia | :elevenlabs` The provider of the voice. - `:cartesia` - `:elevenlabs` - `speed: Float` 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: Array[{ answer, question, id, 2 more}]` - `answer: String` - `question: String` - `id: String` - `needs_human_answer: bool` - `source: :human | :ai` - `:human` - `:ai` - `pending_faq_count: Float` - `call_retry_config: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: String` - `max_concurrent_calls: Float` - `row_stats: { calling, completed, failed, 3 more}` - `calling: Float` - `completed: Float` - `failed: Float` - `pending: Float` - `retry_: Float` - `total: Float` - `scheduled_at: untyped` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") campaigns = revox.campaigns.list puts(campaigns) ``` ## Retrieve `campaigns.retrieve(id) -> CampaignRetrieveResponse` **get** `/campaigns/{id}` Retrieve the full details of a single campaign by its unique ID. Can be used to poll for campaign completion. ### Parameters - `id: String` ### Returns - `class CampaignRetrieveResponse` - `campaign: { id, assistant_id, created_at, 11 more}` - `id: String` - `assistant_id: String` - `created_at: untyped` - `is_cancelled: bool` - `name: String` - `organization_id: String` - `status: :draft | :running | :paused | :completed` - `:draft` - `:running` - `:paused` - `:completed` - `updated_at: untyped` - `assistant: { 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: { 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: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: untyped` - `end_of_call_sentence: String` - `first_sentence: String` - `first_sentence_delay_ms: Integer` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: :generated | :static | :none` - `:generated` - `:static` - `:none` - `ivr_navigation_enabled: bool` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: { name, type} | { openrouter_model_id, openrouter_provider, type}` - `class UnionMember0` - `name: :"gpt-4.1" | :"ministral-3-8b-instruct"` - `:"gpt-4.1"` - `:"ministral-3-8b-instruct"` - `type: :"dedicated-instance"` - `:"dedicated-instance"` - `class UnionMember1` - `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: Float` 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[{ 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: bool` - `type: :string | :number | :boolean | 3 more` - `:string` - `:number` - `:boolean` - `:enum` - `:date` - `:datetime` - `description: String` - `enum_options: Array[String]` - `transfer_phone_number: String` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: untyped` - `voice: { id, provider, speed}` - `id: String` The ID of the voice. - `provider: :cartesia | :elevenlabs` The provider of the voice. - `:cartesia` - `:elevenlabs` - `speed: Float` 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: Array[{ answer, question, id, 2 more}]` - `answer: String` - `question: String` - `id: String` - `needs_human_answer: bool` - `source: :human | :ai` - `:human` - `:ai` - `pending_faq_count: Float` - `call_retry_config: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: String` - `max_concurrent_calls: Float` - `row_stats: { calling, completed, failed, 3 more}` - `calling: Float` - `completed: Float` - `failed: Float` - `pending: Float` - `retry_: Float` - `total: Float` - `scheduled_at: untyped` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") campaign = revox.campaigns.retrieve("id") puts(campaign) ``` ## Delete `campaigns.delete(id) -> CampaignDeleteResponse` **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. ### Parameters - `id: String` ### Returns - `class CampaignDeleteResponse` - `success: bool` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") campaign = revox.campaigns.delete("id") puts(campaign) ``` ## Cancel `campaigns.cancel(id) -> CampaignCancelResponse` **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. ### Parameters - `id: String` ### Returns - `class CampaignCancelResponse` - `success: bool` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") response = revox.campaigns.cancel("id") puts(response) ``` ## Get Rows `campaigns.get_rows(id, **kwargs) -> CampaignGetRowsResponse` **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. ### Parameters - `id: String` - `page: Float` - `page_size: Float` - `query: String` - `result: :IVR | :voicemail | :human | 4 more` - `:IVR` - `:voicemail` - `:human` - `:unknown` - `:"ios-screening-filter"` - `:all` - `:none` - `statuses: String` ### Returns - `class CampaignGetRowsResponse` - `page: Float` - `page_size: Float` - `rows: Array[{ id, input_data, phone_number, 2 more}]` - `id: String` - `input_data: Hash[Symbol, String]` - `phone_number: String` - `row_index: Float` - `call: { 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: { 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: { 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: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: untyped` - `end_of_call_sentence: String` - `first_sentence: String` - `first_sentence_delay_ms: Integer` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: :generated | :static | :none` - `:generated` - `:static` - `:none` - `ivr_navigation_enabled: bool` Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and skip turns to navigate phone menus. - `llm_model: { name, type} | { openrouter_model_id, openrouter_provider, type}` - `class UnionMember0` - `name: :"gpt-4.1" | :"ministral-3-8b-instruct"` - `:"gpt-4.1"` - `:"ministral-3-8b-instruct"` - `type: :"dedicated-instance"` - `:"dedicated-instance"` - `class UnionMember1` - `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: Float` 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[{ 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: bool` - `type: :string | :number | :boolean | 3 more` - `:string` - `:number` - `:boolean` - `:enum` - `:date` - `:datetime` - `description: String` - `enum_options: Array[String]` - `transfer_phone_number: String` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: untyped` - `voice: { id, provider, speed}` - `id: String` The ID of the voice. - `provider: :cartesia | :elevenlabs` The provider of the voice. - `:cartesia` - `:elevenlabs` - `speed: Float` 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: Array[{ answer, question, id, 2 more}]` - `answer: String` - `question: String` - `id: String` - `needs_human_answer: bool` - `source: :human | :ai` - `:human` - `:ai` - `pending_faq_count: Float` - `call_attempts: Array[{ 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: untyped` The time the call was answered. - `dial_error: :number_non_attributed | :too_many_calls | :busy | 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: untyped` 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 | :voicemail | :human | 2 more` - `:IVR` - `:voicemail` - `:human` - `:unknown` - `:"ios-screening-filter"` - `started_at: untyped` The time the call started. - `status: :queued | :ringing | :ongoing | 2 more` The status of the call attempt. - `:queued` - `:ringing` - `:ongoing` - `:completed` - `:error` - `end_reason: String` Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voicemail', 'transfer', 'ivr_no_navigate'. - `ended_by: :agent | :user | :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: Hash[Symbol, untyped]` The data extracted from the call, using the structured output config from the parent call object. - `transcript: Array[{ content, role, tool_arguments, 2 more}]` The transcript of the call. - `content: String` - `role: :user | :assistant | :tool` - `:user` - `:assistant` - `:tool` - `tool_arguments: Hash[Symbol, untyped] | String` - `Hash[Symbol, untyped]` - `String` - `tool_is_error: bool` - `tool_name: String` - `call_retry_config: { 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[{ 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: Integer` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: Integer` Maximum number of call retry attempts. Default: 3. - `timezone: 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: Float` The number of call attempts made. - `campaign: { id, name}` - `id: String` - `name: String` - `created_at: untyped` The time the call order was created. - `direction: :inbound | :outbound` Whether the call is inbound or outbound. - `:inbound` - `:outbound` - `first_sentence_delay_ms: Integer` 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: bool` DEPRECATED: Whether the call has been cancelled. This is derived from `status`. Use `status` instead. - `is_completed: bool` DEPRECATED: Whether the call has completed. This is derived from `status`. Use `status` instead. - `last_call_attempt: { 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: untyped` The time the call was answered. - `dial_error: :number_non_attributed | :too_many_calls | :busy | 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: untyped` 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 | :voicemail | :human | 2 more` - `:IVR` - `:voicemail` - `:human` - `:unknown` - `:"ios-screening-filter"` - `started_at: untyped` The time the call started. - `status: :queued | :ringing | :ongoing | 2 more` The status of the call attempt. - `:queued` - `:ringing` - `:ongoing` - `:completed` - `:error` - `end_reason: String` Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voicemail', 'transfer', 'ivr_no_navigate'. - `ended_by: :agent | :user | :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: Hash[Symbol, untyped]` The data extracted from the call, using the structured output config from the parent call object. - `transcript: Array[{ content, role, tool_arguments, 2 more}]` The transcript of the call. - `content: String` - `role: :user | :assistant | :tool` - `:user` - `:assistant` - `:tool` - `tool_arguments: Hash[Symbol, untyped] | String` - `Hash[Symbol, untyped]` - `String` - `tool_is_error: bool` - `tool_name: String` - `llm_model: { name, type} | { openrouter_model_id, openrouter_provider, type}` - `class UnionMember0` - `name: :"gpt-4.1" | :"ministral-3-8b-instruct"` - `:"gpt-4.1"` - `:"ministral-3-8b-instruct"` - `type: :"dedicated-instance"` - `:"dedicated-instance"` - `class UnionMember1` - `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: Hash[Symbol, String]` Metadata stored with the call. - `organization_id: String` The ID of the organization that owns the call. - `scheduled_at: untyped` The time the call order is scheduled to start. - `status: :initializing | :queued_for_calling | :calling | 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: Float` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") response = revox.campaigns.get_rows("id", page: 0, page_size: 0) puts(response) ``` ## Export Rows `campaigns.export_rows(id) -> CampaignExportRowsResponse` **get** `/campaigns/{id}/export` Export all rows of a campaign as a CSV file for offline analysis or reporting. ### Parameters - `id: String` ### Returns - `class CampaignExportRowsResponse` - `csv: String` - `filename: String` ### Example ```ruby require "revox" revox = Revox::Client.new(api_key: "My API Key") response = revox.campaigns.export_rows("id") puts(response) ```