# Crazytel Documentation > Documentation for Crazytel Append .md to any documentation page URL to get its markdown version. ## Guides - [Introduction](https://developer.crazytel.io/docs/getting-started.md): This page will help you get started with Crazytel. You'll be up and running in a jiffy! - [Getting Started with Crazytel API](https://developer.crazytel.io/docs/getting-started-with-the-api.md): A quick start guide covering authentication, technical details and important concepts about the API. - [Endpoints](https://developer.crazytel.io/docs/endpoints.md) - [Purchase Phone Numbers (DID)](https://developer.crazytel.io/docs/purchase-phone-numbers-did.md): How to puchase phone numbers using Crazytel API. ## API Reference - [Get Account Balance](https://developer.crazytel.io/reference/get_account_balance_api_v1_balance__get.md): Get the balance for the authenticated user. - [Get Account DID Details](https://developer.crazytel.io/reference/get_did_details.md): Retrieve detailed information about a specific DID (Direct Inward Dialing) number. This endpoint returns comprehensive information about an active DID number that has already been purchased and is associated with your account. It cannot be used to query DIDs that are available for purchase. ## Response Includes * Basic details * Number * Description * Location * Fees * Setup fee * Monthly fee * Configuration * Primary and backup routes * Block preferences * SMS routing (for virtual mobile numbers only - starting with '614') ## Parameters * `did_number` - The active DID number to retrieve details for ## Returns A detailed object containing all DID information ## Raises * `404` - If the DID is not found or not associated with the account * `500` - If there is an error communicating with the Crazytel API - [Get Addresses](https://developer.crazytel.io/reference/get_addresses_api_v1_phone_numbers_addresses_get.md): Retrieve a list of addresses associated with the authenticated Crazytel account. This endpoint returns all available addresses that can be assigned to a DID (Direct Inward Dialing) phone number during the purchasing process. ## Response Fields * `id` - A unique identifier (UUID) for the address. Required when purchasing phone numbers * `nickname` - A user-friendly name showing the main part of the physical address ## Returns A list of address objects containing the above fields ## Raises * `404` - If no addresses are found for the account * `500` - If there is an error communicating with the Crazytel API - [Get Owners](https://developer.crazytel.io/reference/get_owners_api_v1_phone_numbers_owners__get.md): Retrieve a list of number owners associated with the authenticated Crazytel account. This endpoint returns all available persons/owners that can be assigned to a DID (Direct Inward Dialing) phone number during the purchasing process. This information is particularly important for IPND (Integrated Public Number Database) which is used by emergency services (000). ## Response Fields * `id` - A unique identifier (UUID) for the person. Required when purchasing phone numbers * `last_name` - The person's surname or family name * `given_name` - The person's given name(s) ## Returns A list of person objects containing the above fields ## Raises * `404` - If no owners are found for the account * `500` - If there is an error communicating with the Crazytel API - [Get Cities](https://developer.crazytel.io/reference/get_cities_api_v1_phone_numbers_cities__state__get.md): Retrieve a list of available cities in the Crazytel network for a given state. This endpoint returns all available cities where geographic phone numbers can be purchased. The results are filtered by state and only include geographic numbers. ## Parameters * `state` - Australian state code (ACT, NSW, NT, QLD, SA, VIC, WA) or New Zealand region (Nth Is, Sth Is) ## Returns A list of city objects containing: * Country * Number type (geographic only) * State * City information ## Raises * `400` - If an invalid state is provided * `500` - If there is an error communicating with the Crazytel API - [Get Destinations](https://developer.crazytel.io/reference/get_destinations_api_v1_phone_numbers_destinations__get.md): Retrieve all available routing destinations for the authenticated account. This endpoint combines data from multiple sources to provide a comprehensive list of all possible routing destinations for phone numbers. ## Response Fields * `route_type` - The type of route (corresponds to primary_route when purchasing) * `destination` - The destination value * `nickname` - Optional friendly name * `group` - Optional grouping category > **Note:** The route_type field matches the primary_route field used when purchasing > or configuring phone numbers. For example, if a destination has route_type "device", > you would use "device" as the primary_route value. ## Returns A list of all available routing destinations ## Raises * `500` - If there is an error communicating with the Crazytel API - [List Available DIDs / Phone Numbers](https://developer.crazytel.io/reference/get_available_numbers_api_v1_phone_numbers_available_numbers__get.md): Retrieve a list of available phone numbers ready for purchase. ## Available Number Types ### Australia (AU) - `geographic`: National Australian Numbers - `mobile`: Virtual Mobile Numbers - `special-rate`: 1300 Numbers - `tollfree`: 1800 Numbers ### New Zealand (NZ) - `geographic`: National New Zealand Numbers ## Parameters * `country`: Country code (AU or NZ) * `state`: Optional state/region code * `city`: Optional city name * `number_type`: Type of number to search for (see above) ## Returns A list of available numbers (maximum 10) with details including: * DID number * Country * Number type * State (if applicable) * City (if applicable) * Setup fee * Monthly fee * Maximum channels ## Tips - You can use GET /api/phone-numbers/cities/{state} to get a list of available cities - Results are limited to 10 numbers per request - All fees are in AUD - [Get Account Phone Numbers](https://developer.crazytel.io/reference/get_account_phonenumbers_api_v1_phone_numbers_get.md): Retrieve all active phone numbers for an account with optional filtering. For retrieving a single phone number, you can also use GET /api/v1/phone-numbers/{did_number} To get a list of available cities for a state, you can use GET /api/v1/phone-numbers/cities/{state} Available number types: - Australia (AU): - geographic: National Australian Numbers - mobile: Virtual Mobile Numbers - special-rate: 1300 Numbers - tollfree: 1800 Numbers - New Zealand (NZ): - geographic: National New Zealand Numbers - [Purchase DID / Phone Number](https://developer.crazytel.io/reference/purchase_did_api_v1_phone_numbers_purchase_post.md): Purchase a DID (Direct Inward Dialing) number. This endpoint allows you to purchase a new DID number. It first checks if you have sufficient account balance, then processes the purchase through the Crazytel API. ## Parameters * `purchase_request` - Purchase details including: * DID number * Address ID * Person ID * Primary route configuration ## Returns A success message if the purchase is completed ## Raises * `400` - If there are insufficient funds * `404` - If the DID is not available * `500` - If there is an error communicating with the Crazytel API - [Update DID Configuration](https://developer.crazytel.io/reference/update_did_config_api_v1_phone_numbers_patch.md): Update the configuration of an existing DID (Direct Inward Dialing) number. This endpoint can also be used to update IPDN (Integrated Public Number Database) information. ## Request Body * `did_number`: The DID number to update (must start with 61 for AU or 86 for NZ) * `description`: Optional friendly description for the number * `primary_route`: Primary routing method * `primary_destination`: Destination for primary route (required for some route types) * `primary_timeout`: Optional timeout in seconds * `backup_route`: Backup routing method * `backup_destination`: Destination for backup route (required for some route types) * `block_prefs`: Call blocking preferences * `block_invalid`: Block calls with invalid CLI * `block_hidden`: Block calls with hidden CLI * `block_international`: Block international calls * `block_landline`: Block calls from landlines * `block_mobile`: Block calls from mobiles * `block_list`: List of numbers to block * `allow_list`: List of numbers to allow * `route`: Routing method for blocked calls * `destination`: Destination for blocked calls * `sms_routes`: SMS routing configuration (only for virtual mobile numbers) * `route`: SMS routing method * `destination`: SMS destination * `address_id`: UUID of the address for IPDN registration * `person_id`: UUID of the person for IPDN registration ## IPDN Information The `address_id` and `person_id` fields are used to update the IPDN registration details: * `address_id`: Links the DID to a registered service address in the IPDN. You can create and manage addresses using the Account Addresses API. * `person_id`: Links the DID to a registered person or organization in the IPDN. You can create and manage account holders using the Account Holders API. These fields are important for maintaining accurate emergency service information. ## Available Destinations You can retrieve a list of available destinations by making a GET request to: `/api/v1/phone-numbers/destinations/` ## Route Types * `congestion`: Play congestion tone * `device`: Route to a specific device * `server`: Route to a SIP server * `uri`: Route to a SIP URI * `pstn`: Route to PSTN * `group`: Route to a hunt group * `voicemail`: Send to voicemail * `pbx`: Route to PBX * `timeswitch`: Use time-based routing * `fax`: Send to fax server * `aa`: Auto attendant * `announcement`: Play announcement * `pstn2`: Alternative PSTN route * `stateroute`: State-based routing * `busy`: Play busy tone ## SMS Route Types (for virtual mobile numbers) * `email`: Forward to email * `sip`: Forward via SIP * `httpget`: Forward via HTTP GET * `httppost`: Forward via HTTP POST * `httpform`: Forward via HTTP form * `httpjson`: Forward via HTTP JSON * `forward`: Forward to another number * `forwardspoof`: Forward with CLI spoofing * `device`: Send to device * `softphone`: Send to softphone * `server`: Send to server * `reply`: Auto-reply * `replyonce`: Single auto-reply * `pbx`: Send to PBX * `3cx`: Send to 3CX * `softphone_pbx`: Send to softphone via PBX ## Returns * Success message if the update is completed ## Raises * `400`: Invalid configuration * `404`: DID not found * `500`: API communication error - [Delete DID](https://developer.crazytel.io/reference/delete_did_api_v1_phone_numbers__did_number__delete.md): Delete an existing DID (Direct Inward Dialing) number. ## Path Parameters * `did_number`: The DID number to delete (must start with 61 for AU or 86 for NZ) ## Requirements * DIDs can only be deleted after being owned for at least 30 days ## Returns * Success message if the deletion is completed ## Raises * `404`: DID not found * `500`: API communication error - [Get Verified Caller ID List](https://developer.crazytel.io/reference/get_verified_caller_ids_api_v1_account_verified_cli__get.md): Retrieve a list of verified Caller IDs that can be used with SIP trunks or extensions. This endpoint returns all Caller IDs that have been verified and approved for use with your account. These numbers can be used as outbound Caller IDs on compatible SIP trunks and extensions. ## Response Fields * `id` - Unique identifier for the Caller ID verification record * `domain` - SIP domain associated with the Caller ID * `number` - The verified phone number (in E.164 format) * `nickname` - A friendly name for identifying the Caller ID ## Returns A list of verified Caller ID objects containing the above fields ## Notes - All numbers are returned in E.164 format (e.g., 61299887766) - Only verified and active Caller IDs are included in the response - The nickname can be used to easily identify the purpose or owner of each number ## Raises * `401` - If authentication fails * `500` - If there is an error communicating with the Crazytel API - [Send Sms](https://developer.crazytel.io/reference/send_sms_api_v1_sms_send_post.md): Send an SMS message from your verified number to any Australian mobile number. This endpoint allows sending SMS messages using your account's verified caller ID numbers as the sender. The recipient can be any valid Australian mobile number. ## Parameters * `from_number`: Your verified Caller ID number * `to_number`: Any Australian mobile number * `message`: The SMS content to send ## Number Format Requirements * Numbers must start with either '04' or '614' * Examples of valid formats: * 0400000000 * 61400000000 ## Prerequisites * You must have a verified Caller ID for the from_number * You must have sufficient account credit balance * You must have generated an SMS API key in the Crazytel portal ## Returns A response object containing: * Status of the message * Account details * Price information * Message direction ## Notes * Message charges apply (see pricing in response) * Numbers are automatically converted to E.164 format * API response may take several seconds - [Send Bulk Sms](https://developer.crazytel.io/reference/send_bulk_sms_api_v1_sms_bulk_send_post.md): Send the same SMS message to multiple Australian mobile numbers from your verified number. This endpoint allows sending bulk SMS messages using your account's verified caller ID number as the sender. The same message will be sent to all recipient numbers. ## Parameters * `from_number`: Your verified Caller ID number * `to_numbers`: List of Australian mobile numbers * `message`: The SMS content to send to all recipients ## Number Format Requirements * Numbers must start with either '04' or '614' * Examples of valid formats: * 0400000000 * 61400000000 ## Prerequisites * You must have a verified Caller ID for the from_number * You must have sufficient account credit balance * You must have generated an SMS API key in the Crazytel portal ## Processing Details * Total processing time depends on the number of recipients and API response times ## Returns A list of results for each message attempt containing: * to_number: The recipient number * status: Success or failure status * detail: Additional information about the result ## Notes * Message charges apply for each recipient * Numbers are automatically converted to E.164 format * Each message may take several seconds to process - [Get Sip Trunks](https://developer.crazytel.io/reference/get_sip_trunks_api_v1_sip_trunks__get.md): Retrieve SIP trunk details. If username or id is provided, returns details for a specific trunk. Otherwise, returns all trunks associated with the account. ## Parameters * `username`: Optional. The username of the specific SIP trunk to retrieve * `id`: Optional. The ID of the specific SIP trunk to retrieve ## Returns List of SIP trunk objects containing details such as: * ID * Client account code * Username * Enabled status * SIP domain * Area code * Caller ID number * Description * Other configuration flags ## Raises * `401` - If unauthorized * `500` - If there is an error communicating with the Crazytel API - [Create Sip Trunk](https://developer.crazytel.io/reference/create_sip_trunk_api_v1_sip_trunks__post.md): Create a new SIP trunk with automatically generated username. ## Important Notes * Usernames are automatically generated in the format 'CTXXXXXX' (where X is a random digit) * Custom usernames are not supported * Caller ID numbers must be verified before they can be used - You can get a list of your verified numbers using GET /api/v1/account/verified-cli/ - Additional numbers can be verified through your Crazytel Account portal - Any numbers purchased on your account automatically become verified numbers * SMS sender numbers must be verified and start with '614' ## Parameters Request body containing: * `password`: Required password for the trunk - Must be at least 8 characters long - Must contain at least 1 uppercase letter - Must contain at least 1 lowercase letter - Must contain at least 1 number * `caller_id_number`: Required caller ID number - Must be pre-verified for your account - Used for outbound calls - Get available numbers via GET /api/v1/account/verified-cli/ * `enabled`: Optional boolean to enable/disable trunk (default: True) * `area_code`: Optional area code for geographic routing * `description`: Optional description to identify the trunk * `hide_caller_id`: Optional boolean to hide caller ID on outbound calls (default: False) - When enabled, all outbound calls will appear as private number - Note: This may affect international call connectivity and reliability * `sms_sender`: Optional SMS sender number - Must start with '614' - Must be pre-verified for your account - This number will be displayed when sending SMS from CrazyPhone Softphone - Using the same SMS sender across multiple SIP trunks enables SMS synchronization between all CrazyPhone instances using that number - Get available numbers via GET /api/v1/account/verified-cli/ * `softphone_show_balance`: Optional boolean to display balance in CrazyPhone (default: True) * `softphone_sync_sms`: Optional boolean to enable SMS synchronization in CrazyPhone (default: False) - When enabled, SMS messages will sync across all SIP trunks using the same SMS sender number ## Returns Newly created SIP trunk object including the automatically generated username ## Raises * `400` - If caller ID or SMS sender is not verified or SMS sender format is invalid * `401` - If user is not authenticated * `422` - If password format does not meet requirements * `500` - If there is an error communicating with the Crazytel API - [Update Sip Trunk](https://developer.crazytel.io/reference/update_sip_trunk_api_v1_sip_trunks__trunk_id__patch.md): Update an existing SIP trunk's settings. This API allows you to perform partial updates to trunk settings. Only the fields that are provided will be updated; omitted fields will retain their existing values. ## Common Use Cases * Suspend/Enable a SIP trunk by setting `enabled=false/true` * Change the trunk's password for enhanced security * Update caller ID settings for outbound calls * Configure SMS capabilities * Modify CrazyPhone softphone settings ## Important Notes * The following fields cannot be modified: - id - username * Caller ID numbers must be verified before they can be used - Get verified numbers via GET /api/v1/account/verified-cli/ * SMS sender numbers must be verified and start with '614' * Required password format: - Must be at least 8 characters long - Must contain at least 1 uppercase letter - Must contain at least 1 lowercase letter - Must contain at least 1 number ## Parameters * `trunk_id`: UUID of the SIP trunk to update (format: 00000000-0000-0000-0000-000000000000) ## Request Body Fields (all optional) * `enabled`: Control trunk status - Set to `false` to suspend the trunk - Set to `true` to enable the trunk * `password`: Update trunk authentication - Minimum 8 characters - Must include: 1 uppercase, 1 lowercase, 1 number - Example: "SecurePass123" * `area_code`: Set geographic routing - Example: "02" for Sydney * `caller_id_number`: Set outbound caller ID - Must be pre-verified - Example: "61291234567" * `description`: Add a friendly name/note - Example: "Sales Team Trunk" * `hide_caller_id`: Control number privacy - Set to `true` to hide outbound caller ID - Set to `false` to show outbound caller ID * `sms_sender`: Configure SMS capabilities - Must start with '614' and be pre-verified - Example: "61412345678" * `softphone_show_balance`: CrazyPhone settings - Set to `true` to display balance - Set to `false` to hide balance * `softphone_sync_sms`: CrazyPhone SMS features - Set to `true` to enable SMS sync - Set to `false` to disable SMS sync ## Returns Updated SIP trunk object with all current settings ## Raises * `400` - If caller ID or SMS sender is not verified or SMS sender format is invalid * `401` - If user is not authenticated * `404` - If SIP trunk is not found * `422` - If password format does not meet requirements * `500` - If there is an error communicating with the Crazytel API - [Delete SIP Trunk](https://developer.crazytel.io/reference/delete_siptrunk_api_v1_sip_trunk__trunk_id__delete.md): Delete a specific SIP trunk by its ID. Note: If a 424 error is returned, it's likely because the SIP trunk is still attached to a Ring Group or Phone Number. Remove these associations before deleting the trunk. - [Add a new address](https://developer.crazytel.io/reference/add_address_api_v1_account_address__post.md): Add a new address for IPND emergency services location purposes. This endpoint allows adding a new address that can be associated with phone numbers (DIDs). The address information is used by emergency services to locate the physical address of the phone number in case of emergency. ⚠️ IMPORTANT LEGAL NOTICE You are legally responsible for ensuring that all address information provided is true, accurate, and complete. Incorrect information may impact emergency services response and could have serious consequences. Providing false information may result in legal penalties under telecommunications and emergency services regulations. ### Required Fields (Mandatory for new addresses) - `city`: City/suburb name (string) - `state`: State code e.g., NSW, VIC (string) - `postcode`: Australian postal code (string) ### Optional Fields (All fields accept null) - `nickname`: Friendly name for the address (string|null) - `unit_number`: Unit number (string|null) - `unit_number_suffix`: Suffix for unit number (string|null) - `unit_number_end`: For unit ranges - end number (string|null) - `unit_number_end_suffix`: Suffix for end unit number (string|null) - `level_number`: Level number (string|null) - `level_suffix`: Suffix for level number (string|null) - `building_name`: Name of building (string|null) - `building_location`: Location within building (string|null) - `street_number_pretty`: Formatted street number (string|null) - `street_number_first`: First street number (string|null) - `street_number_first_suffix`: Suffix for first street number (string|null) - `street_number_last`: Last street number for ranges (string|null) - `street_number_last_suffix`: Suffix for last street number (string|null) - `street_name`: Name of street (string|null) - `street_2_name`: Secondary street name for corners (string|null) - `gnaf_id`: GNAF identifier (string|null) - `country`: Country name (string|null, defaults to "Australia") ### Optional Enumerated Fields (All accept null) #### Unit Type (`unit_type`) Enum values (string|null): | Code | Description | |-------|--------------------------| | ATM | Automated Teller Machine | | BTSD | Boatshed | | COOL | Coolroom | | DUPL | Duplex | | FCTY | Factory | | FLAT | Flat | | LBBY | Lobby | | LOFT | Loft | | MBTH | Marine Berth | | OFFC | Office | | RESV | Reserve | | ROOM | Room | | STLL | Stall | | STOR | Store | | STR | Strata Unit | | UNIT | Unit | | WHSE | Warehouse | | WKSH | Workshop | | ANT | Antenna | | APT | Apartment | | BBQ | Barbecue | | BLCK | Block | | BLDG | Building | | BNGW | Bungalow | | CAGE | Cage | | CARP | Carpark | | CARS | Carspace | | CLUB | Club | | CTGE | Cottage | | GRGE | Garage | | HALL | Hall | | HSE | House | | KSK | Kiosk | | LOT | Lot | | LSE | Lease | | MSNT | Maisonette | | PTHS | Penthouse | | REAR | Rear | | SE | Suite | | SEC | Section | | SHED | Shed | | SHOP | Shop | | SHRM | Showroom | | SIGN | Sign | | SITE | Site | | STU | Studio | | SUBS | Substation | | TNCY | Tenancy | | TNHS | Townhouse | | TWR | Tower | | VLLA | Villa | | VLT | Vault | | WARD | Ward | | RTCE | Roof Terrace | #### Level Type (`level_type`) Enum values (string|null): | Code | Description | |-------|---------------------| | OD | Observation Deck | | P | Parking | | PDM | Podium | | PLF | Platform | | PTHS | Penthouse | | SB | Sub Basement | | B | Basement | | FL | Floor | | G | Ground | | L | Level | | LB | Lobby | | LG | Lower Ground Floor | | M | Mezzanine | | RT | Rooftop | | UG | Upper Ground Floor | | UNGD | Underground | #### Street Type (`street_type` and `street_2_type`) Enum values (string|null): | Code | Description | |-------|-------------------| | ST | Street | | RD | Road | | AVE | Avenue | #### Street Suffix (`street_suffix` and `street_2_suffix`) Enum values (string|null): | Code | Description | |------|------------| | DE | Deviation | | OP | Overpass | | CN | Central | | E | East | | EX | Extension | | IN | Inner | | LR | Lower | | ML | Mall | | N | North | | NE | North East | | NW | North West | | OF | Off | | ON | On | | OT | Outer | | S | South | | SE | South East | | SW | South West | | UP | Upper | | W | West | - [Get All Addresses](https://developer.crazytel.io/reference/get_addresses_api_v1_account_address_get.md): Retrieve all addresses associated with the current user's account - [Get Address by ID](https://developer.crazytel.io/reference/get_address_by_id_api_v1_account_address__address_id__get.md): Retrieve a specific address by its ID - [Delete Address](https://developer.crazytel.io/reference/delete_address_api_v1_account_address__address_id__delete.md): Delete a specific address by its ID. Note: If a 418 error is returned, it's likely because the address is still attached to a phone number (DID). Contact support if you need assistance. - [Add a new person/account holder](https://developer.crazytel.io/reference/add_person_api_v1_account_person__post.md): Add a new person/account holder for IPND emergency services purposes. This endpoint allows adding new account holder details that can be associated with phone numbers. The information is used for the IPND database which is accessed by emergency services. ⚠️ IMPORTANT: There are no PATCH or PUT endpoints available for updating account holders. If you need to modify account holder details, you must create a new person record and delete the old one. 💡 TIP: You can view your current list of account holders by using: GET /api/v1/phone-numbers/owners/ ⚠️ IMPORTANT LEGAL NOTICE You are legally responsible for ensuring that all person information provided is true, accurate, and complete. Incorrect information may impact emergency services response and could have serious consequences. Providing false information may result in legal penalties under telecommunications and emergency services regulations. ### Required Fields - `name_1`: Last name/surname (string) - `name_2`: First name/given name (string) - `title`: Title (Mr, Mrs, etc.) (string) - `person_type`: Type of account holder (enum) - `contact_number`: Contact phone number (string) - `nickname`: Friendly name for reference (string) - `contact_name_1`: Primary contact name (string) - `contact_name_2`: Secondary contact name (string) - `birthdate`: Date of birth (YYYY-MM-DD) ### Person Type Values | Code | Description | |------|----------------| | R | Residential | | B | Business | | G | Government | | C | Charity | | N | Not for Profit | - [Delete a person/account holder](https://developer.crazytel.io/reference/delete_person_api_v1_account_person__person_id__delete.md): Delete an existing person/account holder from the IPND emergency services database. This endpoint allows removing account holder details from the system. ⚠️ IMPORTANT NOTICE Deleting a person record will remove their information from the IPND database. Ensure that the person is no longer associated with any active services before deletion. ### Required Parameters - `person_id`: UUID of the person to delete (path parameter) - [Get Cdrs](https://developer.crazytel.io/reference/get_cdrs_api_v1_cdrs__get.md): Retrieve Call Detail Records (CDRs) for the authenticated user. This API can be used to fetch Voice calls, SMS messages (incoming and outgoing), and DID call records. Parameters: - **limit**: Maximum number of records to return (default: 100) - **extension**: Filter by SIP Trunk or CrazyPBX Extension Number - **type**: Filter by call type (must start with '*') - Valid options: - *voice: Voice call records - *smsout: Outgoing SMS messages - *smsin: Incoming SMS messages - *did: DID call records - **start_date**: Start date in YYYY-MM-DD or ISO format - **end_date**: End date in YYYY-MM-DD or ISO format Notes: - If no dates are provided, returns records from the last 3 months - Maximum date range is 3 months - Results are ordered by setup_time in descending order (newest first) - Several fields in the response may be null/None: - answer_time: Will be null for unanswered calls - connect_fee, rate, total_cost: May be null for certain call types - caller_id_name: May be null if not provided - pdd (Post Dial Delay): May be null for certain call scenarios - destination_name, prefix: May be null depending on the call routing - Integrators should handle null values for all fields in their applications