# Campaigns ## Create `campaigns.create(CampaignCreateParams**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: str` The ID of the assistant to use - `contacts: Iterable[Contact]` The list of contacts to call - `prompt_variables: Dict[str, str]` - `to_phone_number: str` - `name: str` The name of the campaign - `call_retry_config: Optional[CallRetryConfig]` Override retry configuration for calls in this campaign. If not provided, uses the assistant's retry config. - `calling_windows: Iterable[CallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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[str]` The phone number to use for outbound calls (E.164 format, e.g., +1234567890) - `max_concurrent_calls: Optional[float]` Maximum number of concurrent calls allowed for this campaign - `scheduled_at: Optional[Union[Union[str, datetime], object]]` Schedule all calls in this campaign to start at a specific date and time (ISO 8601 format) - `Union[str, datetime]` - `object` ### Returns - `class CampaignCreateResponse: …` - `campaign: Campaign` - `id: str` - `assistant_id: str` - `created_at: object` - `is_cancelled: bool` - `name: str` - `organization_id: str` - `status: Literal["draft", "running", "paused", "completed"]` - `"draft"` - `"running"` - `"paused"` - `"completed"` - `updated_at: object` - `assistant: Optional[CampaignAssistant]` - `id: str` - `background_sound: Optional[Literal["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: Optional[CampaignAssistantCalendly]` - `connection_id: str` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: str` 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: Optional[CampaignAssistantCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[CampaignAssistantCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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: object` - `end_of_call_sentence: Optional[str]` - `first_sentence: Optional[str]` - `first_sentence_delay_ms: int` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: Literal["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: CampaignAssistantLlmModel` - `class CampaignAssistantLlmModelUnionMember0: …` - `name: Literal["gpt-4.1", "ministral-3-8b-instruct"]` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: Literal["dedicated-instance"]` - `"dedicated-instance"` - `class CampaignAssistantLlmModelUnionMember1: …` - `openrouter_model_id: str` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: str` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: Literal["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: str` - `organization_id: str` - `prompt: str` - `structured_output_config: Optional[List[CampaignAssistantStructuredOutputConfig]]` 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: str` - `required: bool` - `type: Literal["string", "number", "boolean", 3 more]` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: Optional[str]` - `enum_options: Optional[List[str]]` - `transfer_phone_number: Optional[str]` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: object` - `voice: Optional[CampaignAssistantVoice]` - `id: str` The ID of the voice. - `provider: Literal["cartesia", "elevenlabs"]` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: Optional[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: Optional[str]` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: Optional[str]` The webhook URL to call when the call is completed. - `faq_items: Optional[List[CampaignAssistantFaqItem]]` - `answer: str` - `question: str` - `id: Optional[str]` - `needs_human_answer: Optional[bool]` - `source: Optional[Literal["human", "ai"]]` - `"human"` - `"ai"` - `pending_faq_count: Optional[float]` - `call_retry_config: Optional[CampaignCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[CampaignCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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[str]` - `max_concurrent_calls: Optional[float]` - `row_stats: Optional[CampaignRowStats]` - `calling: float` - `completed: float` - `failed: float` - `pending: float` - `retry: float` - `total: float` - `scheduled_at: Optional[object]` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) campaign = client.campaigns.create( assistant_id="assistant_id", contacts=[{ "prompt_variables": { "foo": "string" }, "to_phone_number": "to_phone_number", }], name="x", ) print(campaign.campaign) ``` ## List `campaigns.list() -> CampaignListResponse` **get** `/campaigns` Retrieve all campaigns for your organization, including both active and completed ones. ### Returns - `class CampaignListResponse: …` - `campaigns: List[Campaign]` - `id: str` - `assistant_id: str` - `created_at: object` - `is_cancelled: bool` - `name: str` - `organization_id: str` - `status: Literal["draft", "running", "paused", "completed"]` - `"draft"` - `"running"` - `"paused"` - `"completed"` - `updated_at: object` - `assistant: Optional[CampaignAssistant]` - `id: str` - `background_sound: Optional[Literal["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: Optional[CampaignAssistantCalendly]` - `connection_id: str` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: str` 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: Optional[CampaignAssistantCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[CampaignAssistantCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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: object` - `end_of_call_sentence: Optional[str]` - `first_sentence: Optional[str]` - `first_sentence_delay_ms: int` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: Literal["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: CampaignAssistantLlmModel` - `class CampaignAssistantLlmModelUnionMember0: …` - `name: Literal["gpt-4.1", "ministral-3-8b-instruct"]` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: Literal["dedicated-instance"]` - `"dedicated-instance"` - `class CampaignAssistantLlmModelUnionMember1: …` - `openrouter_model_id: str` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: str` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: Literal["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: str` - `organization_id: str` - `prompt: str` - `structured_output_config: Optional[List[CampaignAssistantStructuredOutputConfig]]` 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: str` - `required: bool` - `type: Literal["string", "number", "boolean", 3 more]` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: Optional[str]` - `enum_options: Optional[List[str]]` - `transfer_phone_number: Optional[str]` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: object` - `voice: Optional[CampaignAssistantVoice]` - `id: str` The ID of the voice. - `provider: Literal["cartesia", "elevenlabs"]` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: Optional[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: Optional[str]` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: Optional[str]` The webhook URL to call when the call is completed. - `faq_items: Optional[List[CampaignAssistantFaqItem]]` - `answer: str` - `question: str` - `id: Optional[str]` - `needs_human_answer: Optional[bool]` - `source: Optional[Literal["human", "ai"]]` - `"human"` - `"ai"` - `pending_faq_count: Optional[float]` - `call_retry_config: Optional[CampaignCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[CampaignCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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[str]` - `max_concurrent_calls: Optional[float]` - `row_stats: Optional[CampaignRowStats]` - `calling: float` - `completed: float` - `failed: float` - `pending: float` - `retry: float` - `total: float` - `scheduled_at: Optional[object]` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) campaigns = client.campaigns.list() print(campaigns.campaigns) ``` ## Retrieve `campaigns.retrieve(strid) -> 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: str` ### Returns - `class CampaignRetrieveResponse: …` - `campaign: Campaign` - `id: str` - `assistant_id: str` - `created_at: object` - `is_cancelled: bool` - `name: str` - `organization_id: str` - `status: Literal["draft", "running", "paused", "completed"]` - `"draft"` - `"running"` - `"paused"` - `"completed"` - `updated_at: object` - `assistant: Optional[CampaignAssistant]` - `id: str` - `background_sound: Optional[Literal["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: Optional[CampaignAssistantCalendly]` - `connection_id: str` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: str` 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: Optional[CampaignAssistantCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[CampaignAssistantCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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: object` - `end_of_call_sentence: Optional[str]` - `first_sentence: Optional[str]` - `first_sentence_delay_ms: int` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: Literal["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: CampaignAssistantLlmModel` - `class CampaignAssistantLlmModelUnionMember0: …` - `name: Literal["gpt-4.1", "ministral-3-8b-instruct"]` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: Literal["dedicated-instance"]` - `"dedicated-instance"` - `class CampaignAssistantLlmModelUnionMember1: …` - `openrouter_model_id: str` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: str` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: Literal["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: str` - `organization_id: str` - `prompt: str` - `structured_output_config: Optional[List[CampaignAssistantStructuredOutputConfig]]` 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: str` - `required: bool` - `type: Literal["string", "number", "boolean", 3 more]` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: Optional[str]` - `enum_options: Optional[List[str]]` - `transfer_phone_number: Optional[str]` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: object` - `voice: Optional[CampaignAssistantVoice]` - `id: str` The ID of the voice. - `provider: Literal["cartesia", "elevenlabs"]` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: Optional[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: Optional[str]` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: Optional[str]` The webhook URL to call when the call is completed. - `faq_items: Optional[List[CampaignAssistantFaqItem]]` - `answer: str` - `question: str` - `id: Optional[str]` - `needs_human_answer: Optional[bool]` - `source: Optional[Literal["human", "ai"]]` - `"human"` - `"ai"` - `pending_faq_count: Optional[float]` - `call_retry_config: Optional[CampaignCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[CampaignCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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[str]` - `max_concurrent_calls: Optional[float]` - `row_stats: Optional[CampaignRowStats]` - `calling: float` - `completed: float` - `failed: float` - `pending: float` - `retry: float` - `total: float` - `scheduled_at: Optional[object]` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) campaign = client.campaigns.retrieve( "id", ) print(campaign.campaign) ``` ## Delete `campaigns.delete(strid) -> 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: str` ### Returns - `class CampaignDeleteResponse: …` - `success: bool` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) campaign = client.campaigns.delete( "id", ) print(campaign.success) ``` ## Cancel `campaigns.cancel(strid) -> 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: str` ### Returns - `class CampaignCancelResponse: …` - `success: bool` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) response = client.campaigns.cancel( "id", ) print(response.success) ``` ## Get Rows `campaigns.get_rows(strid, CampaignGetRowsParams**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: str` - `page: float` - `page_size: float` - `query: Optional[str]` - `result: Optional[Literal["IVR", "voicemail", "human", 4 more]]` - `"IVR"` - `"voicemail"` - `"human"` - `"unknown"` - `"ios-screening-filter"` - `"all"` - `"none"` - `statuses: Optional[str]` ### Returns - `class CampaignGetRowsResponse: …` - `page: float` - `page_size: float` - `rows: List[Row]` - `id: str` - `input_data: Dict[str, str]` - `phone_number: str` - `row_index: float` - `call: Optional[RowCall]` 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: str` The ID of the call. - `assistant: Optional[RowCallAssistant]` - `id: str` - `background_sound: Optional[Literal["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: Optional[RowCallAssistantCalendly]` - `connection_id: str` The connection ID representing the link between your Calendly account and Revox. - `event_type_id: str` 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: Optional[RowCallAssistantCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[RowCallAssistantCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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: object` - `end_of_call_sentence: Optional[str]` - `first_sentence: Optional[str]` - `first_sentence_delay_ms: int` Delay in milliseconds before speaking the first sentence. Default: 400. - `first_sentence_mode: Literal["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: RowCallAssistantLlmModel` - `class RowCallAssistantLlmModelUnionMember0: …` - `name: Literal["gpt-4.1", "ministral-3-8b-instruct"]` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: Literal["dedicated-instance"]` - `"dedicated-instance"` - `class RowCallAssistantLlmModelUnionMember1: …` - `openrouter_model_id: str` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: str` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: Literal["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: str` - `organization_id: str` - `prompt: str` - `structured_output_config: Optional[List[RowCallAssistantStructuredOutputConfig]]` 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: str` - `required: bool` - `type: Literal["string", "number", "boolean", 3 more]` - `"string"` - `"number"` - `"boolean"` - `"enum"` - `"date"` - `"datetime"` - `description: Optional[str]` - `enum_options: Optional[List[str]]` - `transfer_phone_number: Optional[str]` Phone number to transfer calls to when users request to speak to a human agent. - `updated_at: object` - `voice: Optional[RowCallAssistantVoice]` - `id: str` The ID of the voice. - `provider: Literal["cartesia", "elevenlabs"]` The provider of the voice. - `"cartesia"` - `"elevenlabs"` - `speed: Optional[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: Optional[str]` If set, when voicemail is detected the agent will speak this message then hang up; if null, hang up immediately. - `webhook_url: Optional[str]` The webhook URL to call when the call is completed. - `faq_items: Optional[List[RowCallAssistantFaqItem]]` - `answer: str` - `question: str` - `id: Optional[str]` - `needs_human_answer: Optional[bool]` - `source: Optional[Literal["human", "ai"]]` - `"human"` - `"ai"` - `pending_faq_count: Optional[float]` - `call_attempts: List[RowCallCallAttempt]` All call attempts for this call order, ordered by most recent first. - `id: str` The ID of the call attempt. - `answered_at: object` The time the call was answered. - `dial_error: Optional[Literal["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: object` The time the call ended. - `phone_number: str` The phone number that was called. Formatted in E.164 format. Example: +1234567890 - `recording_url: Optional[str]` The URL of the audio recording of the call. - `result: Optional[Literal["IVR", "voicemail", "human", 2 more]]` - `"IVR"` - `"voicemail"` - `"human"` - `"unknown"` - `"ios-screening-filter"` - `started_at: object` The time the call started. - `status: Literal["queued", "ringing", "ongoing", 2 more]` The status of the call attempt. - `"queued"` - `"ringing"` - `"ongoing"` - `"completed"` - `"error"` - `end_reason: Optional[str]` Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voicemail', 'transfer', 'ivr_no_navigate'. - `ended_by: Optional[Literal["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: Optional[Dict[str, object]]` The data extracted from the call, using the structured output config from the parent call object. - `transcript: Optional[List[RowCallCallAttemptTranscript]]` The transcript of the call. - `content: str` - `role: Literal["user", "assistant", "tool"]` - `"user"` - `"assistant"` - `"tool"` - `tool_arguments: Optional[Union[Dict[str, object], str, null]]` - `Dict[str, object]` - `str` - `tool_is_error: Optional[bool]` - `tool_name: Optional[str]` - `call_retry_config: Optional[RowCallCallRetryConfig]` Configuration for call retry behavior including time windows, delays, and max iterations. If not provided, defaults will be used. - `calling_windows: List[RowCallCallRetryConfigCallingWindow]` - `calling_window_end_time: str` 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: str` 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: int` Delay between retry attempts in seconds. Default: 7200 (2 hours). - `max_retry_attempts: int` Maximum number of call retry attempts. Default: 3. - `timezone: Optional[str]` 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: Optional[RowCallCampaign]` - `id: str` - `name: str` - `created_at: object` The time the call order was created. - `direction: Literal["inbound", "outbound"]` Whether the call is inbound or outbound. - `"inbound"` - `"outbound"` - `first_sentence_delay_ms: int` Delay in milliseconds before speaking the first sentence. Default: 400. - `from_phone_number: str` 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: Optional[RowCallLastCallAttempt]` This represent a single call attempt. A call attempt is a single call made to the phone number. - `id: str` The ID of the call attempt. - `answered_at: object` The time the call was answered. - `dial_error: Optional[Literal["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: object` The time the call ended. - `phone_number: str` The phone number that was called. Formatted in E.164 format. Example: +1234567890 - `recording_url: Optional[str]` The URL of the audio recording of the call. - `result: Optional[Literal["IVR", "voicemail", "human", 2 more]]` - `"IVR"` - `"voicemail"` - `"human"` - `"unknown"` - `"ios-screening-filter"` - `started_at: object` The time the call started. - `status: Literal["queued", "ringing", "ongoing", 2 more]` The status of the call attempt. - `"queued"` - `"ringing"` - `"ongoing"` - `"completed"` - `"error"` - `end_reason: Optional[str]` Reason for ending the call when ended_by is 'agent'. E.g. 'tool_end_call', 'voicemail', 'transfer', 'ivr_no_navigate'. - `ended_by: Optional[Literal["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: Optional[Dict[str, object]]` The data extracted from the call, using the structured output config from the parent call object. - `transcript: Optional[List[RowCallLastCallAttemptTranscript]]` The transcript of the call. - `content: str` - `role: Literal["user", "assistant", "tool"]` - `"user"` - `"assistant"` - `"tool"` - `tool_arguments: Optional[Union[Dict[str, object], str, null]]` - `Dict[str, object]` - `str` - `tool_is_error: Optional[bool]` - `tool_name: Optional[str]` - `llm_model: RowCallLlmModel` - `class RowCallLlmModelUnionMember0: …` - `name: Literal["gpt-4.1", "ministral-3-8b-instruct"]` - `"gpt-4.1"` - `"ministral-3-8b-instruct"` - `type: Literal["dedicated-instance"]` - `"dedicated-instance"` - `class RowCallLlmModelUnionMember1: …` - `openrouter_model_id: str` The model ID to use from OpenRouter. eg: openai/gpt-4.1 - `openrouter_provider: str` The provider to use from OpenRouter. eg: nebius, openai, azure, etc. - `type: Literal["openrouter"]` Use a model from OpenRouter. - `"openrouter"` - `metadata: Optional[Dict[str, str]]` Metadata stored with the call. - `organization_id: str` The ID of the organization that owns the call. - `scheduled_at: object` The time the call order is scheduled to start. - `status: Literal["initializing", "queued_for_calling", "calling", 4 more]` The status of the call. - `"initializing"` - `"queued_for_calling"` - `"calling"` - `"scheduled"` - `"completed"` - `"cancelled"` - `"errored"` - `to_phone_number: str` The phone number that received the call. Formatted in E.164 format. Example: +1234567890 - `total: float` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) response = client.campaigns.get_rows( id="id", page=0, page_size=0, ) print(response.page) ``` ## Export Rows `campaigns.export_rows(strid) -> CampaignExportRowsResponse` **get** `/campaigns/{id}/export` Export all rows of a campaign as a CSV file for offline analysis or reporting. ### Parameters - `id: str` ### Returns - `class CampaignExportRowsResponse: …` - `csv: str` - `filename: str` ### Example ```python import os from revox import Revox client = Revox( api_key=os.environ.get("REVOX_API_KEY"), # This is the default and can be omitted ) response = client.campaigns.export_rows( "id", ) print(response.csv) ```