@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Telnyx API
@base https://api.telnyx.com/v2
@version 2.0.0
@auth Bearer bearer | Bearer bearer | OAuth2 | Bearer bearer | Bearer bearer
@endpoints 1022
@hint download_for_search
@toc .well-known(2), 10dlc(42), access_ip_address(4), access_ip_ranges(3), actions(2), addresses(6), advanced_orders(4), ai(139), alphanumeric_sender_ids(4), audit_events(1), authentication_providers(5), available_phone_number_blocks(1), available_phone_numbers(1), balance(1), billing_groups(5), bulk_sim_card_actions(2), bundle_pricing(8), call_control_applications(5), call_events(1), calls(40), channel_zones(2), charges_breakdown(1), charges_summary(1), comments(4), conferences(23), connections(3), country_coverage(2), credential_connections(6), custom_storage_credentials(4), customer_service_records(4), detail_records(1), dialogflow_connections(4), document_links(1), documents(7), dynamic_emergency_addresses(4), dynamic_emergency_endpoints(4), enterprises(13), external_connections(22), fax_applications(5), faxes(6), fqdn_connections(5), fqdns(5), global_ip_allowed_ports(1), global_ip_assignment_health(1), global_ip_assignments(5), global_ip_assignments_usage(1), global_ip_health_check_types(1), global_ip_health_checks(4), global_ip_latency(1), global_ip_protocols(1), global_ip_usage(1), global_ips(4), inbound_channels(2), inexplicit_number_orders(3), integration_secrets(3), inventory_coverage(1), invoices(2), ip_connections(5), ips(5), ledger_billing_group_reports(2), legacy(26), list(2), managed_accounts(8), media(6), messages(13), messaging(6), messaging_hosted_number_orders(8), messaging_hosted_numbers(4), messaging_numbers_bulk_updates(2), messaging_optouts(1), messaging_profile_metrics(1), messaging_profiles(15), messaging_tollfree(6), messaging_url_domains(1), mobile_network_operators(1), mobile_phone_numbers(5), mobile_push_credentials(4), network_coverage(1), networks(9), notification_channels(5), notification_event_conditions(1), notification_events(1), notification_profiles(5), notification_settings(4), number_block_orders(3), number_lookup(1), number_order_phone_numbers(4), number_orders(4), number_reservations(4), numbers_features(1), oauth(7), oauth_clients(5), oauth_grants(3), operator_connect(1), organizations(4), ota_updates(2), outbound_voice_profiles(5), payment(3), phone_number_blocks(3), phone_numbers(25), phone_numbers_regulatory_requirements(1), portability_checks(1), porting(14), porting_orders(38), porting_phone_numbers(1), portouts(14), private_wireless_gateways(4), public_internet_gateways(4), queues(9), recording_transcriptions(3), recordings(4), regions(1), regulatory_requirements(1), reports(8), reputation(3), requirement_groups(6), requirement_types(2), requirements(2), room_compositions(4), room_participants(2), room_recordings(4), room_sessions(7), rooms(8), session_analysis(3), seti(1), short_codes(3), sim_card_actions(2), sim_card_data_usage_notifications(5), sim_card_group_actions(2), sim_card_groups(9), sim_card_order_preview(1), sim_card_orders(3), sim_cards(17), siprec_connectors(4), speech-to-text(1), storage(15), sub_number_orders(5), sub_number_orders_report(3), telephony_credentials(6), terms_of_service(1), texml(33), texml_applications(5), text-to-speech(3), traffic_policy_profiles(6), usage_reports(2), user_addresses(3), user_tags(1), mobile_voice_connections(5), whatsapp(19), whatsapp_message_templates(3), x402(2), verifications(7), verified_numbers(5), verify_profiles(8), virtual_cross_connects(5), virtual_cross_connects_coverage(1), voice_clones(6), voice_designs(7), webhook_deliveries(2), wireguard_interfaces(4), wireguard_peers(6), wireless(5), wireless_blocklist_values(1), wireless_blocklists(5)

@group .well-known
@endpoint GET /.well-known/oauth-authorization-server
@returns(200) {authorization_endpoint: str(uri), code_challenge_methods_supported: [str], grant_types_supported: [str], introspection_endpoint: str(uri), issuer: str(uri), jwks_uri: str(uri), registration_endpoint: str(uri), response_types_supported: [str], scopes_supported: [str], token_endpoint: str(uri), token_endpoint_auth_methods_supported: [str]}
@errors {400, 401}

@endpoint GET /.well-known/oauth-protected-resource
@returns(200) {authorization_servers: [str(uri)], resource: str(uri)}
@errors {400, 401}

@endgroup

@group 10dlc
@endpoint GET /10dlc/brand
@optional {page: int=1, recordsPerPage: int=10, sort: str(assignedCampaignsCount/-assignedCampaignsCount/brandId/-brandId/createdAt/-createdAt/displayName/-displayName/identityStatus/-identityStatus/status/-status/tcrBrandId/-tcrBrandId)=-createdAt, displayName: str, entityType: str, state: str, country: str, brandId: str, tcrBrandId: str}
@returns(200) {page: int, records: [map], totalRecords: int}
@errors {4XX}

@endpoint POST /10dlc/brand
@required {country: str, displayName: str, email: str, entityType: any, vertical: any}
@optional {businessContactEmail: str, city: str, companyName: str, ein: str, firstName: str, ipAddress: str, isReseller: bool=false, lastName: str, mobilePhone: str, mock: bool=false, phone: str, postalCode: str, state: str, stockExchange: any, stockSymbol: str, street: str, webhookFailoverURL: str, webhookURL: str, website: str}
@returns(200) {altBusinessId: str, altBusinessIdType: str, brandId: str, brandRelationship: any, businessContactEmail: str, city: str, companyName: str, country: str, createdAt: str, cspId: str, displayName: str, ein: str, email: str, entityType: any, failureReasons: str, firstName: str, identityStatus: str, ipAddress: str, isReseller: bool, lastName: str, mobilePhone: str, mock: bool, optionalAttributes: map{taxExemptStatus: str}, phone: str, postalCode: str, referenceId: str, state: str, status: str, stockExchange: any, stockSymbol: str, street: str, tcrBrandId: str, universalEin: str, updatedAt: str, vertical: str, webhookFailoverURL: str, webhookURL: str, website: str}
@errors {422, 4XX}

@endpoint GET /10dlc/brand/feedback/{brandId}
@required {brandId: str}
@returns(200) {brandId: str, category: [map]}
@errors {422, 4XX}

@endpoint GET /10dlc/brand/smsOtp/{referenceId}
@required {referenceId: str}
@optional {brandId: str}
@returns(200) {brandId: str, deliveryStatus: str, deliveryStatusDate: str(date-time), deliveryStatusDetails: str, mobilePhone: str, referenceId: str, requestDate: str(date-time), verifyDate: str(date-time)}
@errors {404, 422, 4XX}

@endpoint DELETE /10dlc/brand/{brandId}
@required {brandId: str}
@returns(204)
@errors {400, 404, 422, 4XX}

@endpoint GET /10dlc/brand/{brandId}
@required {brandId: str}
@returns(200)
@errors {422, 4XX}

@endpoint PUT /10dlc/brand/{brandId}
@required {brandId: str, country: str, displayName: str, email: str, entityType: any, vertical: any}
@optional {altBusinessId: str, altBusinessIdType: str(NONE/DUNS/GIIN/LEI), businessContactEmail: str, city: str, companyName: str, ein: str, firstName: str, identityStatus: str(VERIFIED/UNVERIFIED/SELF_DECLARED/VETTED_VERIFIED), ipAddress: str, isReseller: bool, lastName: str, phone: str, postalCode: str, state: str, stockExchange: any, stockSymbol: str, street: str, webhookFailoverURL: str, webhookURL: str, website: str}
@returns(200) {altBusinessId: str, altBusinessIdType: str, brandId: str, brandRelationship: any, businessContactEmail: str, city: str, companyName: str, country: str, createdAt: str, cspId: str, displayName: str, ein: str, email: str, entityType: any, failureReasons: str, firstName: str, identityStatus: str, ipAddress: str, isReseller: bool, lastName: str, mobilePhone: str, mock: bool, optionalAttributes: map{taxExemptStatus: str}, phone: str, postalCode: str, referenceId: str, state: str, status: str, stockExchange: any, stockSymbol: str, street: str, tcrBrandId: str, universalEin: str, updatedAt: str, vertical: str, webhookFailoverURL: str, webhookURL: str, website: str}
@errors {422, 4XX}

@endpoint POST /10dlc/brand/{brandId}/2faEmail
@required {brandId: str}
@returns(200)
@errors {4XX}

@endpoint GET /10dlc/brand/{brandId}/externalVetting
@required {brandId: str}
@returns(200)
@errors {422, 4XX}

@endpoint POST /10dlc/brand/{brandId}/externalVetting
@required {brandId: str, evpId: str, vettingClass: str}
@returns(200) {createDate: str, evpId: str, vettedDate: str, vettingClass: str, vettingId: str, vettingScore: int, vettingToken: str}
@errors {422, 4XX}

@endpoint PUT /10dlc/brand/{brandId}/externalVetting
@required {brandId: str, evpId: str, vettingId: str}
@optional {vettingToken: str}
@returns(200) {createDate: str, evpId: str, vettedDate: str, vettingClass: str, vettingId: str, vettingScore: int, vettingToken: str}
@errors {422, 4XX}

@endpoint PUT /10dlc/brand/{brandId}/revet
@required {brandId: str}
@returns(200) {altBusinessId: str, altBusinessIdType: str, brandId: str, brandRelationship: any, businessContactEmail: str, city: str, companyName: str, country: str, createdAt: str, cspId: str, displayName: str, ein: str, email: str, entityType: any, failureReasons: str, firstName: str, identityStatus: str, ipAddress: str, isReseller: bool, lastName: str, mobilePhone: str, mock: bool, optionalAttributes: map{taxExemptStatus: str}, phone: str, postalCode: str, referenceId: str, state: str, status: str, stockExchange: any, stockSymbol: str, street: str, tcrBrandId: str, universalEin: str, updatedAt: str, vertical: str, webhookFailoverURL: str, webhookURL: str, website: str}
@errors {422, 4XX}

@endpoint GET /10dlc/brand/{brandId}/smsOtp
@required {brandId: str}
@returns(200) {brandId: str, deliveryStatus: str, deliveryStatusDate: str(date-time), deliveryStatusDetails: str, mobilePhone: str, referenceId: str, requestDate: str(date-time), verifyDate: str(date-time)}
@errors {404, 422, 4XX}

@endpoint POST /10dlc/brand/{brandId}/smsOtp
@required {brandId: str, pinSms: str, successSms: str}
@returns(200) {brandId: str, referenceId: str}
@errors {400, 422, 4XX}

@endpoint PUT /10dlc/brand/{brandId}/smsOtp
@required {brandId: str, otpPin: str}
@returns(204)
@errors {400, 422, 4XX}

@endpoint GET /10dlc/campaign
@required {brandId: str}
@optional {page: int=1, recordsPerPage: int=10, sort: str(assignedPhoneNumbersCount/-assignedPhoneNumbersCount/campaignId/-campaignId/createdAt/-createdAt/status/-status/tcrCampaignId/-tcrCampaignId)=-createdAt}
@returns(200) {page: int, records: [map], totalRecords: int}
@errors {422, 4XX}

@endpoint POST /10dlc/campaign/acceptSharing/{campaignId}
@required {campaignId: str}
@returns(202)
@errors {422, 4XX}

@endpoint GET /10dlc/campaign/usecase/cost
@required {usecase: str}
@returns(200) {campaignUsecase: str, description: str, monthlyCost: str, upFrontCost: str}
@errors {422, 4XX}

@endpoint DELETE /10dlc/campaign/{campaignId}
@required {campaignId: str}
@returns(200) {message: str, record_type: str, time: num}
@errors {422, 4XX}

@endpoint GET /10dlc/campaign/{campaignId}
@required {campaignId: str}
@returns(200) {ageGated: bool, autoRenewal: bool, billedDate: str, brandDisplayName: str, brandId: str, campaignId: str, campaignStatus: str, createDate: str, cspId: str, description: str, directLending: bool, embeddedLink: bool, embeddedLinkSample: str, embeddedPhone: bool, failureReasons: str, helpKeywords: str, helpMessage: str, isTMobileNumberPoolingEnabled: bool, isTMobileRegistered: bool, isTMobileSuspended: bool, messageFlow: str, mock: bool, nextRenewalOrExpirationDate: str, numberPool: bool, optinKeywords: str, optinMessage: str, optoutKeywords: str, optoutMessage: str, privacyPolicyLink: str, referenceId: str, resellerId: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, status: str, subUsecases: [str], submissionStatus: str, subscriberHelp: bool, subscriberOptin: bool, subscriberOptout: bool, tcrBrandId: str, tcrCampaignId: str, termsAndConditions: bool, termsAndConditionsLink: str, usecase: str, vertical: str, webhookFailoverURL: str, webhookURL: str}
@errors {422, 4XX}

@endpoint PUT /10dlc/campaign/{campaignId}
@required {campaignId: str}
@optional {autoRenewal: bool=true, helpMessage: str, messageFlow: str, resellerId: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, webhookFailoverURL: str, webhookURL: str}
@returns(200) {ageGated: bool, autoRenewal: bool, billedDate: str, brandDisplayName: str, brandId: str, campaignId: str, campaignStatus: str, createDate: str, cspId: str, description: str, directLending: bool, embeddedLink: bool, embeddedLinkSample: str, embeddedPhone: bool, failureReasons: str, helpKeywords: str, helpMessage: str, isTMobileNumberPoolingEnabled: bool, isTMobileRegistered: bool, isTMobileSuspended: bool, messageFlow: str, mock: bool, nextRenewalOrExpirationDate: str, numberPool: bool, optinKeywords: str, optinMessage: str, optoutKeywords: str, optoutMessage: str, privacyPolicyLink: str, referenceId: str, resellerId: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, status: str, subUsecases: [str], submissionStatus: str, subscriberHelp: bool, subscriberOptin: bool, subscriberOptout: bool, tcrBrandId: str, tcrCampaignId: str, termsAndConditions: bool, termsAndConditionsLink: str, usecase: str, vertical: str, webhookFailoverURL: str, webhookURL: str}
@errors {422, 4XX}

@endpoint POST /10dlc/campaign/{campaignId}/appeal
@required {campaignId: str(uuid), appeal_reason: str}
@returns(200) {appealed_at: str(date-time)}
@errors {400, 404, 422, 4XX}

@endpoint GET /10dlc/campaign/{campaignId}/mnoMetadata
@required {campaignId: str}
@returns(200) {10999: map{minMsgSamples: int, mno: str, mnoReview: bool, mnoSupport: bool, noEmbeddedLink: bool, noEmbeddedPhone: bool, qualify: bool, reqSubscriberHelp: bool, reqSubscriberOptin: bool, reqSubscriberOptout: bool}}
@errors {4XX, 5XX}

@endpoint GET /10dlc/campaign/{campaignId}/operationStatus
@required {campaignId: str}
@returns(200)
@errors {422, 4XX}

@endpoint GET /10dlc/campaign/{campaignId}/osr/attributes
@required {campaignId: str}
@returns(200)
@errors {422, 4XX}

@endpoint GET /10dlc/campaign/{campaignId}/sharing
@required {campaignId: str}
@returns(200) {sharedByMe: map{downstreamCnpId: str, sharedDate: str, sharingStatus: str, statusDate: str, upstreamCnpId: str}, sharedWithMe: map{downstreamCnpId: str, sharedDate: str, sharingStatus: str, statusDate: str, upstreamCnpId: str}}
@errors {422, 4XX}

@endpoint POST /10dlc/campaignBuilder
@required {brandId: str, description: str, usecase: str}
@optional {ageGated: bool, autoRenewal: bool, directLending: bool, embeddedLink: bool, embeddedLinkSample: str, embeddedPhone: bool, helpKeywords: str, helpMessage: str, messageFlow: str, mnoIds: [int], numberPool: bool, optinKeywords: str, optinMessage: str, optoutKeywords: str, optoutMessage: str, privacyPolicyLink: str, referenceId: str, resellerId: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, subUsecases: [str], subscriberHelp: bool, subscriberOptin: bool, subscriberOptout: bool, tag: [str], termsAndConditions: bool, termsAndConditionsLink: str, webhookFailoverURL: str, webhookURL: str}
@returns(200) {ageGated: bool, autoRenewal: bool, billedDate: str, brandDisplayName: str, brandId: str, campaignId: str, campaignStatus: str, createDate: str, cspId: str, description: str, directLending: bool, embeddedLink: bool, embeddedLinkSample: str, embeddedPhone: bool, failureReasons: str, helpKeywords: str, helpMessage: str, isTMobileNumberPoolingEnabled: bool, isTMobileRegistered: bool, isTMobileSuspended: bool, messageFlow: str, mock: bool, nextRenewalOrExpirationDate: str, numberPool: bool, optinKeywords: str, optinMessage: str, optoutKeywords: str, optoutMessage: str, privacyPolicyLink: str, referenceId: str, resellerId: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, status: str, subUsecases: [str], submissionStatus: str, subscriberHelp: bool, subscriberOptin: bool, subscriberOptout: bool, tcrBrandId: str, tcrCampaignId: str, termsAndConditions: bool, termsAndConditionsLink: str, usecase: str, vertical: str, webhookFailoverURL: str, webhookURL: str}
@errors {400, 402, 422, 4XX}

@endpoint GET /10dlc/campaignBuilder/brand/{brandId}/usecase/{usecase}
@required {usecase: str, brandId: str}
@returns(200) {annualFee: num, maxSubUsecases: int, minSubUsecases: int, mnoMetadata: map, monthlyFee: num, quarterlyFee: num, usecase: str}
@errors {422, 4XX}

@endpoint GET /10dlc/enum/{endpoint}
@required {endpoint: str(mno/optionalAttributes/usecase/vertical/altBusinessIdType/brandIdentityStatus/brandRelationship/campaignStatus/entityType/extVettingProvider/vettingStatus/brandStatus/operationStatus/approvedPublicCompany/stockExchange/vettingClass)}
@returns(200)
@errors {404, 4XX}

@endpoint GET /10dlc/partnerCampaign/sharedByMe
@optional {page: int=1, recordsPerPage: int=10}
@returns(200) {page: int, records: [map], totalRecords: int}
@errors {422, 4XX}

@endpoint GET /10dlc/partnerCampaign/{campaignId}/sharing
@required {campaignId: str}
@returns(200)
@errors {422, 4XX}

@endpoint GET /10dlc/partner_campaigns
@optional {page: int=1, recordsPerPage: int=10, sort: str(assignedPhoneNumbersCount/-assignedPhoneNumbersCount/brandDisplayName/-brandDisplayName/tcrBrandId/-tcrBrandId/tcrCampaignId/-tcrCampaignId/createdAt/-createdAt/campaignStatus/-campaignStatus)=-createdAt}
@returns(200) {page: int, records: [map], totalRecords: int}
@errors {422, 4XX}

@endpoint GET /10dlc/partner_campaigns/{campaignId}
@required {campaignId: str}
@returns(200) {ageGated: bool, assignedPhoneNumbersCount: num, brandDisplayName: str, campaignStatus: str, createdAt: str, description: str, directLending: bool, embeddedLink: bool, embeddedLinkSample: str, embeddedPhone: bool, failureReasons: str, helpKeywords: str, helpMessage: str, isNumberPoolingEnabled: bool, messageFlow: str, numberPool: bool, optinKeywords: str, optinMessage: str, optoutKeywords: str, optoutMessage: str, privacyPolicyLink: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, subUsecases: [str], subscriberOptin: bool, subscriberOptout: bool, tcrBrandId: str, tcrCampaignId: str, termsAndConditions: bool, termsAndConditionsLink: str, updatedAt: str, usecase: str, webhookFailoverURL: str, webhookURL: str}
@errors {422, 4XX}

@endpoint PATCH /10dlc/partner_campaigns/{campaignId}
@required {campaignId: str}
@optional {webhookFailoverURL: str, webhookURL: str}
@returns(200) {ageGated: bool, assignedPhoneNumbersCount: num, brandDisplayName: str, campaignStatus: str, createdAt: str, description: str, directLending: bool, embeddedLink: bool, embeddedLinkSample: str, embeddedPhone: bool, failureReasons: str, helpKeywords: str, helpMessage: str, isNumberPoolingEnabled: bool, messageFlow: str, numberPool: bool, optinKeywords: str, optinMessage: str, optoutKeywords: str, optoutMessage: str, privacyPolicyLink: str, sample1: str, sample2: str, sample3: str, sample4: str, sample5: str, subUsecases: [str], subscriberOptin: bool, subscriberOptout: bool, tcrBrandId: str, tcrCampaignId: str, termsAndConditions: bool, termsAndConditionsLink: str, updatedAt: str, usecase: str, webhookFailoverURL: str, webhookURL: str}
@errors {422, 4XX}

@endpoint POST /10dlc/phoneNumberAssignmentByProfile
@required {messagingProfileId: str}
@optional {campaignId: str, tcrCampaignId: str}
@returns(202) {campaignId: str, messagingProfileId: str, taskId: str, tcrCampaignId: str}
@errors {500, 4XX}

@endpoint GET /10dlc/phoneNumberAssignmentByProfile/{taskId}
@required {taskId: str}
@returns(200) {createdAt: str(date-time), status: str, taskId: str, updatedAt: str(date-time)}
@errors {4XX}

@endpoint GET /10dlc/phoneNumberAssignmentByProfile/{taskId}/phoneNumbers
@required {taskId: str}
@optional {recordsPerPage: int=20, page: int=1}
@returns(200) {records: [map]}
@errors {422, 4XX}

@endpoint GET /10dlc/phone_number_campaigns
@optional {recordsPerPage: int=20, page: int=1, filter: map, sort: str(assignmentStatus/-assignmentStatus/createdAt/-createdAt/phoneNumber/-phoneNumber)=-createdAt}
@returns(200) {page: int, records: [map], totalRecords: int}
@errors {4XX}

@endpoint POST /10dlc/phone_number_campaigns
@required {campaignId: str, phoneNumber: str}
@returns(200) {assignmentStatus: str, brandId: str, campaignId: str, createdAt: str, failureReasons: str, phoneNumber: str, tcrBrandId: str, tcrCampaignId: str, telnyxCampaignId: str, updatedAt: str}
@errors {4XX}

@endpoint DELETE /10dlc/phone_number_campaigns/{phoneNumber}
@required {phoneNumber: str}
@returns(200) {assignmentStatus: str, brandId: str, campaignId: str, createdAt: str, failureReasons: str, phoneNumber: str, tcrBrandId: str, tcrCampaignId: str, telnyxCampaignId: str, updatedAt: str}
@errors {4XX}

@endpoint GET /10dlc/phone_number_campaigns/{phoneNumber}
@required {phoneNumber: str}
@returns(200) {assignmentStatus: str, brandId: str, campaignId: str, createdAt: str, failureReasons: str, phoneNumber: str, tcrBrandId: str, tcrCampaignId: str, telnyxCampaignId: str, updatedAt: str}
@errors {4XX}

@endpoint PUT /10dlc/phone_number_campaigns/{phoneNumber}
@required {phoneNumber: str, campaignId: str, phoneNumber: str}
@returns(200) {assignmentStatus: str, brandId: str, campaignId: str, createdAt: str, failureReasons: str, phoneNumber: str, tcrBrandId: str, tcrCampaignId: str, telnyxCampaignId: str, updatedAt: str}
@errors {4XX}

@endgroup

@group access_ip_address
@endpoint GET /access_ip_address
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /access_ip_address
@required {ip_address: str}
@optional {description: str}
@returns(200) {created_at: str(date-time), description: str, id: str, ip_address: str, source: str, status: str, updated_at: str(date-time), user_id: str}
@errors {422}

@endpoint DELETE /access_ip_address/{access_ip_address_id}
@required {access_ip_address_id: str}
@returns(200) {created_at: str(date-time), description: str, id: str, ip_address: str, source: str, status: str, updated_at: str(date-time), user_id: str}
@errors {404}

@endpoint GET /access_ip_address/{access_ip_address_id}
@required {access_ip_address_id: str}
@returns(200) {created_at: str(date-time), description: str, id: str, ip_address: str, source: str, status: str, updated_at: str(date-time), user_id: str}
@errors {404}

@endgroup

@group access_ip_ranges
@endpoint GET /access_ip_ranges
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /access_ip_ranges
@required {cidr_block: str}
@optional {description: str}
@returns(200) {cidr_block: str, created_at: str(date-time), description: str, id: str, status: str, updated_at: str(date-time), user_id: str}
@errors {422}

@endpoint DELETE /access_ip_ranges/{access_ip_range_id}
@required {access_ip_range_id: str}
@returns(200) {cidr_block: str, created_at: str(date-time), description: str, id: str, status: str, updated_at: str(date-time), user_id: str}
@errors {404}

@endgroup

@group actions
@endpoint POST /actions/purchase/esims
@required {amount: int}
@optional {product: str, sim_card_group_id: str(uuid), status: str(enabled/disabled/standby)=enabled, tags: [str], whitelabel_name: str}
@returns(202) {data: [map], errors: [map]}
@errors {401}

@endpoint POST /actions/register/sim_cards
@required {registration_codes: [str]}
@optional {sim_card_group_id: str(uuid), status: str(enabled/disabled/standby)=enabled, tags: [str]}
@returns(202) {data: [map], errors: [map]}
@errors {401}

@endgroup

@group addresses
@endpoint GET /addresses
@optional {page: map, filter: map, sort: str(created_at/first_name/last_name/business_name/street_address)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint POST /addresses
@required {business_name: str, country_code: str, first_name: str, last_name: str, locality: str, street_address: str}
@optional {address_book: bool=true, administrative_area: str, borough: str, customer_reference: str, extended_address: str, neighborhood: str, phone_number: str, postal_code: str, validate_address: bool=true}
@returns(200) {data: map{address_book: bool, administrative_area: str, borough: str, business_name: str, country_code: str, created_at: str, customer_reference: str, extended_address: str, first_name: str, id: str, last_name: str, locality: str, neighborhood: str, phone_number: str, postal_code: str, record_type: str, street_address: str, updated_at: str, validate_address: bool}}
@errors {422}

@endpoint POST /addresses/actions/validate
@required {country_code: str, postal_code: str, street_address: str}
@optional {administrative_area: str, extended_address: str, locality: str}
@returns(200) {data: map{errors: [map], record_type: str, result: str, suggested: map{administrative_area: str, country_code: str, extended_address: str, locality: str, postal_code: str, street_address: str}}}
@errors {422}

@endpoint DELETE /addresses/{id}
@required {id: str}
@returns(200) {data: map{address_book: bool, administrative_area: str, borough: str, business_name: str, country_code: str, created_at: str, customer_reference: str, extended_address: str, first_name: str, id: str, last_name: str, locality: str, neighborhood: str, phone_number: str, postal_code: str, record_type: str, street_address: str, updated_at: str, validate_address: bool}}
@errors {401, 404, 422}

@endpoint GET /addresses/{id}
@required {id: str}
@returns(200) {data: map{address_book: bool, administrative_area: str, borough: str, business_name: str, country_code: str, created_at: str, customer_reference: str, extended_address: str, first_name: str, id: str, last_name: str, locality: str, neighborhood: str, phone_number: str, postal_code: str, record_type: str, street_address: str, updated_at: str, validate_address: bool}}
@errors {401, 404, 422}

@endpoint POST /addresses/{id}/actions/accept_suggestions
@required {id: str(uuid)}
@optional {id: str}
@returns(200) {data: map{accepted: bool, id: str(uuid), record_type: str}}
@returns(202) {data: map{accepted: bool, id: str(uuid), record_type: str}}
@errors {404}

@endgroup

@group advanced_orders
@endpoint GET /advanced_orders
@returns(200) {data: [map]}
@errors {400, 401, 404, 422, 500}

@endpoint POST /advanced_orders
@optional {area_code: str=, comments: str=, country_code: str=US, customer_reference: str=, features: [any], phone_number_type: str(local/mobile/toll_free/shared_cost/national/landline)=local, quantity: int=1, requirement_group_id: str(uuid)}
@returns(200) {area_code: str, comments: str, country_code: str, customer_reference: str, features: [any], id: str(uuid), orders: [str(uuid)], phone_number_type: any, quantity: int, requirement_group_id: str(uuid), status: any}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /advanced_orders/{advanced-order-id}/requirement_group
@required {advanced-order-id: str(uuid)}
@optional {area_code: str=, comments: str=, country_code: str=US, customer_reference: str=, features: [any], phone_number_type: str(local/mobile/toll_free/shared_cost/national/landline)=local, quantity: int=1, requirement_group_id: str(uuid)}
@returns(200) {area_code: str, comments: str, country_code: str, customer_reference: str, features: [any], id: str(uuid), orders: [str(uuid)], phone_number_type: any, quantity: int, requirement_group_id: str(uuid), status: any}
@errors {400, 401, 404, 422, 500}

@endpoint GET /advanced_orders/{order_id}
@required {order_id: str(uuid)}
@returns(200) {area_code: str, comments: str, country_code: str, customer_reference: str, features: [any], id: str(uuid), orders: [str(uuid)], phone_number_type: any, quantity: int, requirement_group_id: str(uuid), status: any}
@errors {400, 401, 404, 422, 500}

@endgroup

@group ai
@endpoint GET /ai/assistants
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/assistants
@required {instructions: str, model: str, name: str}
@optional {description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, insight_settings: map{insight_group_id: str}, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map, recording_settings: map, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map}, tool_ids: [str], tools: [any], transcription: map{language: str, model: str, region: str, settings: map}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice!: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map, default_state: str, give_feedback_url: str, logo_icon_url: str, position: str, report_issue_url: str, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str}}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint POST /ai/assistants/import
@required {api_key_ref: str, provider: str(elevenlabs/vapi/retell)}
@optional {import_ids: [str]}
@returns(200) {data: [map]}
@errors {422}

@endpoint GET /ai/assistants/tags
@returns(200) {tags: [str]}
@errors {422}

@endpoint GET /ai/assistants/tests
@optional {test_suite: str, telnyx_conversation_channel: str, destination: str, page: map}
@returns(200) {data: [map], meta: any}
@errors {422}

@endpoint POST /ai/assistants/tests
@required {destination: str, instructions: str, name: str, rubric: [map{criteria!: str, name!: str}]}
@optional {description: str, max_duration_seconds: int, telnyx_conversation_channel: any=web_chat, test_suite: str}
@returns(201) {created_at: str(date-time), description: str, destination: str, instructions: str, max_duration_seconds: int, name: str, rubric: [map], telnyx_conversation_channel: any, test_id: str(uuid), test_suite: str}
@errors {422}

@endpoint GET /ai/assistants/tests/test-suites
@returns(200) {data: [str]}
@errors {422}

@endpoint GET /ai/assistants/tests/test-suites/{suite_name}/runs
@required {suite_name: str}
@optional {status: str, test_suite_run_id: str, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/assistants/tests/test-suites/{suite_name}/runs
@required {suite_name: str}
@optional {destination_version_id: str}
@returns(201)
@errors {422}

@endpoint DELETE /ai/assistants/tests/{test_id}
@required {test_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/assistants/tests/{test_id}
@required {test_id: str}
@returns(200) {created_at: str(date-time), description: str, destination: str, instructions: str, max_duration_seconds: int, name: str, rubric: [map], telnyx_conversation_channel: any, test_id: str(uuid), test_suite: str}
@errors {422}

@endpoint PUT /ai/assistants/tests/{test_id}
@required {test_id: str}
@optional {description: str, destination: str, instructions: str, max_duration_seconds: int, name: str, rubric: [map{criteria!: str, name!: str}], telnyx_conversation_channel: str(phone_call/web_call/sms_chat/web_chat), test_suite: str}
@returns(200) {created_at: str(date-time), description: str, destination: str, instructions: str, max_duration_seconds: int, name: str, rubric: [map], telnyx_conversation_channel: any, test_id: str(uuid), test_suite: str}
@errors {422}

@endpoint GET /ai/assistants/tests/{test_id}/runs
@required {test_id: str}
@optional {status: str, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/assistants/tests/{test_id}/runs
@required {test_id: str}
@optional {destination_version_id: str}
@returns(201) {completed_at: str(date-time), conversation_id: str, conversation_insights_id: str, created_at: str(date-time), detail_status: [map], logs: str, run_id: str(uuid), status: str, test_id: str(uuid), test_suite_run_id: str(uuid), triggered_by: str, updated_at: str(date-time)}
@errors {422}

@endpoint GET /ai/assistants/tests/{test_id}/runs/{run_id}
@required {test_id: str, run_id: str}
@returns(200) {completed_at: str(date-time), conversation_id: str, conversation_insights_id: str, created_at: str(date-time), detail_status: [map], logs: str, run_id: str(uuid), status: str, test_id: str(uuid), test_suite_run_id: str(uuid), triggered_by: str, updated_at: str(date-time)}
@errors {422}

@endpoint DELETE /ai/assistants/{assistant_id}
@required {assistant_id: str}
@returns(200) {deleted: bool, id: str, object: str}
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}
@required {assistant_id: str}
@optional {fetch_dynamic_variables_from_webhook: bool=false, from: str, to: str, call_control_id: str}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}
@required {assistant_id: str}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint DELETE /ai/assistants/{assistant_id}/canary-deploys
@required {assistant_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}/canary-deploys
@required {assistant_id: str}
@returns(200) {assistant_id: str, created_at: str(date-time), updated_at: str(date-time), versions: [map]}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/canary-deploys
@required {assistant_id: str, versions: [map{percentage!: num, version_id!: str}]}
@returns(200) {assistant_id: str, created_at: str(date-time), updated_at: str(date-time), versions: [map]}
@errors {422}

@endpoint PUT /ai/assistants/{assistant_id}/canary-deploys
@required {assistant_id: str, versions: [map{percentage!: num, version_id!: str}]}
@returns(200) {assistant_id: str, created_at: str(date-time), updated_at: str(date-time), versions: [map]}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/chat
@required {assistant_id: str, content: str, conversation_id: str}
@optional {name: str}
@returns(200) {content: str}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/chat/sms
@required {assistant_id: str, from: str, to: str}
@optional {conversation_metadata: map, should_create_conversation: bool, text: str}
@returns(200) {conversation_id: str}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/clone
@required {assistant_id: str}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}/scheduled_events
@required {assistant_id: str}
@optional {from_date: str(date-time), to_date: str(date-time), conversation_channel: str, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/scheduled_events
@required {assistant_id: str, scheduled_at_fixed_datetime: str(date-time), telnyx_agent_target: str, telnyx_conversation_channel: str(phone_call/sms_chat), telnyx_end_user_target: str}
@optional {conversation_metadata: map, dynamic_variables: map, text: str}
@returns(201)
@errors {422}

@endpoint DELETE /ai/assistants/{assistant_id}/scheduled_events/{event_id}
@required {assistant_id: str, event_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}/scheduled_events/{event_id}
@required {assistant_id: str, event_id: str}
@returns(200)
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/tags
@required {assistant_id: str, tag: str}
@returns(200) {tags: [str]}
@errors {422}

@endpoint DELETE /ai/assistants/{assistant_id}/tags/{tag}
@required {assistant_id: str, tag: str}
@returns(200) {tags: [str]}
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}/texml
@required {assistant_id: str}
@returns(200)
@errors {422}

@endpoint DELETE /ai/assistants/{assistant_id}/tools/{tool_id}
@required {assistant_id: str, tool_id: str}
@returns(200)
@errors {422}

@endpoint PUT /ai/assistants/{assistant_id}/tools/{tool_id}
@required {assistant_id: str, tool_id: str}
@returns(200)
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/tools/{tool_id}/test
@required {assistant_id: str, tool_id: str}
@optional {arguments: map, dynamic_variables: map}
@returns(200) {data: map{content_type: str, request: map, response: str, status_code: int, success: bool}}
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}/versions
@required {assistant_id: str}
@returns(200) {data: [map]}
@errors {422}

@endpoint DELETE /ai/assistants/{assistant_id}/versions/{version_id}
@required {assistant_id: str, version_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/assistants/{assistant_id}/versions/{version_id}
@required {assistant_id: str, version_id: str}
@optional {include_mcp_servers: bool}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/versions/{version_id}
@required {assistant_id: str, version_id: str}
@optional {description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map, recording_settings: map, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map}, tool_ids: [str], tools: [any], transcription: map{language: str, model: str, region: str, settings: map}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice!: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map, default_state: str, give_feedback_url: str, logo_icon_url: str, position: str, report_issue_url: str, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str}}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint POST /ai/assistants/{assistant_id}/versions/{version_id}/promote
@required {assistant_id: str, version_id: str}
@returns(200) {created_at: str(date-time), description: str, dynamic_variables: map, dynamic_variables_webhook_url: str, enabled_features: [str], greeting: str, id: str, import_metadata: map{import_id: str, import_provider: str}, insight_settings: map{insight_group_id: str}, instructions: str, llm_api_key_ref: str, messaging_settings: map{conversation_inactivity_minutes: int, default_messaging_profile_id: str, delivery_status_webhook_url: str}, model: str, name: str, privacy_settings: map{data_retention: bool}, telephony_settings: map{default_texml_app_id: str, noise_suppression: str, noise_suppression_config: map{attenuation_limit: int, mode: str}, recording_settings: map{channels: str, format: str}, supports_unauthenticated_web_calls: bool, time_limit_secs: int, user_idle_timeout_secs: int, voicemail_detection: map{on_voicemail_detected: map{action: str, voicemail_message: map}}}, tools: [any], transcription: map{language: str, model: str, region: str, settings: map{eager_eot_threshold: num, eot_threshold: num, eot_timeout_ms: int, numerals: bool, smart_format: bool}}, voice_settings: map{api_key_ref: str, background_audio: any, expressive_mode: bool, language_boost: str?, similarity_boost: num, speed: num, style: num, temperature: num, use_speaker_boost: bool, voice: str, voice_speed: num}, widget_settings: map{agent_thinking_text: str, audio_visualizer_config: map{color: str, preset: str}, default_state: str, give_feedback_url: str?, logo_icon_url: str?, position: str, report_issue_url: str?, speak_to_interrupt_text: str, start_call_text: str, theme: str, view_history_url: str?}}
@errors {422}

@endpoint POST /ai/audio/transcriptions
@returns(200) {duration: num, segments: [map], text: str}
@errors {422}

@endpoint POST /ai/chat/completions
@required {messages: [map{content!: any, role!: str}]}
@optional {api_key_ref: str, best_of: int, early_stopping: bool=false, enable_thinking: bool=true, frequency_penalty: num=0, guided_choice: [str], guided_json: map, guided_regex: str, length_penalty: num=1, logprobs: bool=false, max_tokens: int, min_p: num, model: str=meta-llama/Meta-Llama-3.1-8B-Instruct, n: num, presence_penalty: num=0, response_format: map{type!: str}, stream: bool=false, temperature: num=0.1, tool_choice: str(none/auto/required), tools: [any], top_logprobs: int, top_p: num, use_beam_search: bool=false}
@returns(200)
@errors {422}

@endpoint GET /ai/clusters
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/clusters
@required {bucket: str}
@optional {files: [str], min_cluster_size: int=25, min_subcluster_size: int=5, prefix: str}
@returns(200) {data: map{task_id: str}}
@errors {422}

@endpoint DELETE /ai/clusters/{task_id}
@required {task_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/clusters/{task_id}
@required {task_id: str}
@optional {top_n_nodes: int=0, show_subclusters: bool=false}
@returns(200) {data: map{bucket: str, clusters: [map], status: str}}
@errors {422}

@endpoint GET /ai/clusters/{task_id}/graph
@required {task_id: str}
@optional {cluster_id: int}
@returns(200)
@errors {422}

@endpoint GET /ai/conversations
@optional {id: str, name: str, created_at: str, last_message_at: str, metadata->assistant_id: str, metadata->call_control_id: str, metadata->telnyx_agent_target: str, metadata->telnyx_end_user_target: str, metadata->telnyx_conversation_channel: str, limit: int, order: str, or: str}
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/conversations
@optional {metadata: map, name: str}
@returns(200) {created_at: str(date-time), id: str(uuid), last_message_at: str(date-time), metadata: map, name: str}
@errors {422}

@endpoint GET /ai/conversations/insight-groups
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/conversations/insight-groups
@required {name: str}
@optional {description: str, webhook: str=}
@returns(200) {data: map{created_at: str(date-time), description: str, id: str(uuid), insights: [map], name: str, webhook: str}}
@errors {422}

@endpoint DELETE /ai/conversations/insight-groups/{group_id}
@required {group_id: str(uuid)}
@returns(200)
@errors {422}

@endpoint GET /ai/conversations/insight-groups/{group_id}
@required {group_id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), description: str, id: str(uuid), insights: [map], name: str, webhook: str}}
@errors {422}

@endpoint PUT /ai/conversations/insight-groups/{group_id}
@required {group_id: str(uuid)}
@optional {description: str, name: str, webhook: str}
@returns(200) {data: map{created_at: str(date-time), description: str, id: str(uuid), insights: [map], name: str, webhook: str}}
@errors {422}

@endpoint POST /ai/conversations/insight-groups/{group_id}/insights/{insight_id}/assign
@required {group_id: str(uuid), insight_id: str(uuid)}
@returns(200)
@errors {422}

@endpoint DELETE /ai/conversations/insight-groups/{group_id}/insights/{insight_id}/unassign
@required {group_id: str(uuid), insight_id: str(uuid)}
@returns(200)
@errors {422}

@endpoint GET /ai/conversations/insights
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/conversations/insights
@required {instructions: str, name: str}
@optional {json_schema: any, webhook: str=}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), insight_type: str, instructions: str, json_schema: any, name: str, webhook: str}}
@errors {422}

@endpoint DELETE /ai/conversations/insights/{insight_id}
@required {insight_id: str(uuid)}
@returns(200)
@errors {422}

@endpoint GET /ai/conversations/insights/{insight_id}
@required {insight_id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), insight_type: str, instructions: str, json_schema: any, name: str, webhook: str}}
@errors {422}

@endpoint PUT /ai/conversations/insights/{insight_id}
@required {insight_id: str(uuid)}
@optional {instructions: str, json_schema: any, name: str, webhook: str}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), insight_type: str, instructions: str, json_schema: any, name: str, webhook: str}}
@errors {422}

@endpoint DELETE /ai/conversations/{conversation_id}
@required {conversation_id: str}
@returns(200)
@errors {404, 422}

@endpoint GET /ai/conversations/{conversation_id}
@required {conversation_id: str}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), last_message_at: str(date-time), metadata: map, name: str}}
@errors {404, 422}

@endpoint PUT /ai/conversations/{conversation_id}
@required {conversation_id: str}
@optional {metadata: map}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), last_message_at: str(date-time), metadata: map, name: str}}
@errors {404, 422}

@endpoint GET /ai/conversations/{conversation_id}/conversations-insights
@required {conversation_id: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/conversations/{conversation_id}/message
@required {conversation_id: str(uuid), role: str}
@optional {content: str=, metadata: map, name: str, sent_at: str(date-time), tool_call_id: str, tool_calls: [map], tool_choice: any}
@returns(200)
@errors {422}

@endpoint GET /ai/conversations/{conversation_id}/messages
@required {conversation_id: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint GET /ai/embeddings
@optional {status: [str]=processing,queued}
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/embeddings
@required {bucket_name: str}
@optional {document_chunk_overlap_size: int=512, document_chunk_size: int=1024, embedding_model: any=thenlper/gte-large, loader: any=default}
@returns(200) {data: map{created_at: str, finished_at: str?, status: str, task_id: str(uuid), task_name: str, user_id: str(uuid)}}
@errors {422}

@endpoint GET /ai/embeddings/buckets
@returns(200) {data: map{buckets: [str]}}
@errors {422}

@endpoint DELETE /ai/embeddings/buckets/{bucket_name}
@required {bucket_name: str}
@returns(200)
@errors {404, 422}

@endpoint GET /ai/embeddings/buckets/{bucket_name}
@required {bucket_name: str}
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/embeddings/similarity-search
@required {bucket_name: str, query: str}
@optional {num_of_docs: int=3}
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/embeddings/url
@required {bucket_name: str, url: str}
@returns(200) {data: map{created_at: str, finished_at: str?, status: str, task_id: str(uuid), task_name: str, user_id: str(uuid)}}
@errors {422}

@endpoint GET /ai/embeddings/{task_id}
@required {task_id: str}
@returns(200) {data: map{created_at: str, finished_at: str, status: str, task_id: str(uuid), task_name: str}}
@errors {422}

@endpoint GET /ai/fine_tuning/jobs
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/fine_tuning/jobs
@required {model: str, training_file: str}
@optional {hyperparameters: map{n_epochs: int}, suffix: str}
@returns(200) {created_at: int, finished_at: int?, hyperparameters: map{n_epochs: int}, id: str, model: str, organization_id: str, status: str, trained_tokens: int?, training_file: str}
@errors {422}

@endpoint GET /ai/fine_tuning/jobs/{job_id}
@required {job_id: str}
@returns(200) {created_at: int, finished_at: int?, hyperparameters: map{n_epochs: int}, id: str, model: str, organization_id: str, status: str, trained_tokens: int?, training_file: str}
@errors {422}

@endpoint POST /ai/fine_tuning/jobs/{job_id}/cancel
@required {job_id: str}
@returns(200) {created_at: int, finished_at: int?, hyperparameters: map{n_epochs: int}, id: str, model: str, organization_id: str, status: str, trained_tokens: int?, training_file: str}
@errors {422}

@endpoint GET /ai/integrations
@returns(200) {data: [map]}
@errors {422}

@endpoint GET /ai/integrations/connections
@returns(200) {data: [map]}
@errors {422}

@endpoint DELETE /ai/integrations/connections/{user_connection_id}
@required {user_connection_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/integrations/connections/{user_connection_id}
@required {user_connection_id: str}
@returns(200) {data: map{allowed_tools: [str], id: str, integration_id: str}}
@errors {422}

@endpoint GET /ai/integrations/{integration_id}
@required {integration_id: str}
@returns(200) {available_tools: [str], description: str, display_name: str, id: str, logo_url: str, name: str, status: str}
@errors {422}

@endpoint GET /ai/mcp_servers
@optional {type: str, url: str, page[size]: int=20, page[number]: int=1}
@returns(200)
@errors {422}

@endpoint POST /ai/mcp_servers
@required {name: str, type: str, url: str}
@optional {allowed_tools: [str], api_key_ref: str}
@returns(200) {allowed_tools: [str]?, api_key_ref: str?, created_at: str(date-time), id: str, name: str, type: str, url: str}
@errors {422}

@endpoint DELETE /ai/mcp_servers/{mcp_server_id}
@required {mcp_server_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/mcp_servers/{mcp_server_id}
@required {mcp_server_id: str}
@returns(200) {allowed_tools: [str]?, api_key_ref: str?, created_at: str(date-time), id: str, name: str, type: str, url: str}
@errors {422}

@endpoint PUT /ai/mcp_servers/{mcp_server_id}
@required {mcp_server_id: str}
@optional {allowed_tools: [str], api_key_ref: str, created_at: str(date-time), id: str, name: str, type: str, url: str}
@returns(200) {allowed_tools: [str]?, api_key_ref: str?, created_at: str(date-time), id: str, name: str, type: str, url: str}
@errors {422}

@endpoint GET /ai/missions
@optional {page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/missions
@required {name: str}
@optional {description: str, execution_mode: str(external/managed), instructions: str, metadata: map, model: str}
@returns(201) {data: map{created_at: str(date-time), description: str, execution_mode: str, instructions: str, metadata: map, mission_id: str(uuid), model: str, name: str, updated_at: str(date-time)}}
@errors {422}

@endpoint GET /ai/missions/events
@optional {type: str, page[number]: int=1, page[size]: int=50}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint GET /ai/missions/runs
@optional {status: str, page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint DELETE /ai/missions/{mission_id}
@required {mission_id: str(uuid)}
@returns(204)
@errors {422}

@endpoint GET /ai/missions/{mission_id}
@required {mission_id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), description: str, execution_mode: str, instructions: str, metadata: map, mission_id: str(uuid), model: str, name: str, updated_at: str(date-time)}}
@errors {422}

@endpoint PUT /ai/missions/{mission_id}
@required {mission_id: str(uuid)}
@optional {description: str, execution_mode: str(external/managed), instructions: str, metadata: map, model: str, name: str}
@returns(200) {data: map{created_at: str(date-time), description: str, execution_mode: str, instructions: str, metadata: map, mission_id: str(uuid), model: str, name: str, updated_at: str(date-time)}}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/clone
@required {mission_id: str}
@returns(201)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/knowledge-bases
@required {mission_id: str}
@returns(200)
@errors {422}

@endpoint POST /ai/missions/{mission_id}/knowledge-bases
@required {mission_id: str}
@returns(201)
@errors {422}

@endpoint DELETE /ai/missions/{mission_id}/knowledge-bases/{knowledge_base_id}
@required {mission_id: str, knowledge_base_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/knowledge-bases/{knowledge_base_id}
@required {mission_id: str, knowledge_base_id: str}
@returns(200)
@errors {422}

@endpoint PUT /ai/missions/{mission_id}/knowledge-bases/{knowledge_base_id}
@required {mission_id: str, knowledge_base_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/mcp-servers
@required {mission_id: str}
@returns(200)
@errors {422}

@endpoint POST /ai/missions/{mission_id}/mcp-servers
@required {mission_id: str}
@returns(201)
@errors {422}

@endpoint DELETE /ai/missions/{mission_id}/mcp-servers/{mcp_server_id}
@required {mission_id: str, mcp_server_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/mcp-servers/{mcp_server_id}
@required {mission_id: str, mcp_server_id: str}
@returns(200)
@errors {422}

@endpoint PUT /ai/missions/{mission_id}/mcp-servers/{mcp_server_id}
@required {mission_id: str, mcp_server_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs
@required {mission_id: str(uuid)}
@optional {status: str, page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs
@required {mission_id: str(uuid)}
@optional {input: map, metadata: map}
@returns(201) {data: map{error: str, finished_at: str(date-time), input: map, metadata: map, mission_id: str(uuid), result_payload: map, result_summary: str, run_id: str(uuid), started_at: str(date-time), status: str, updated_at: str(date-time)}}
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs/{run_id}
@required {mission_id: str(uuid), run_id: str(uuid)}
@returns(200) {data: map{error: str, finished_at: str(date-time), input: map, metadata: map, mission_id: str(uuid), result_payload: map, result_summary: str, run_id: str(uuid), started_at: str(date-time), status: str, updated_at: str(date-time)}}
@errors {422}

@endpoint PATCH /ai/missions/{mission_id}/runs/{run_id}
@required {mission_id: str(uuid), run_id: str(uuid)}
@optional {error: str, metadata: map, result_payload: map, result_summary: str, status: str(pending/running/paused/succeeded/failed/cancelled)}
@returns(200) {data: map{error: str, finished_at: str(date-time), input: map, metadata: map, mission_id: str(uuid), result_payload: map, result_summary: str, run_id: str(uuid), started_at: str(date-time), status: str, updated_at: str(date-time)}}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/cancel
@required {mission_id: str(uuid), run_id: str(uuid)}
@returns(200) {data: map{error: str, finished_at: str(date-time), input: map, metadata: map, mission_id: str(uuid), result_payload: map, result_summary: str, run_id: str(uuid), started_at: str(date-time), status: str, updated_at: str(date-time)}}
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs/{run_id}/events
@required {mission_id: str(uuid), run_id: str(uuid)}
@optional {type: str, step_id: str, agent_id: str, page[number]: int=1, page[size]: int=50}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/events
@required {mission_id: str(uuid), run_id: str(uuid), summary: str, type: str(status_change/step_started/step_completed/step_failed/tool_call/tool_result/message/error/custom)}
@optional {agent_id: str, idempotency_key: str, payload: map, step_id: str}
@returns(201) {data: map{agent_id: str, event_id: str, idempotency_key: str, payload: map, run_id: str, step_id: str, summary: str, timestamp: str(date-time), type: str}}
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs/{run_id}/events/{event_id}
@required {mission_id: str(uuid), run_id: str(uuid), event_id: str}
@returns(200) {data: map{agent_id: str, event_id: str, idempotency_key: str, payload: map, run_id: str, step_id: str, summary: str, timestamp: str(date-time), type: str}}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/pause
@required {mission_id: str(uuid), run_id: str(uuid)}
@returns(200) {data: map{error: str, finished_at: str(date-time), input: map, metadata: map, mission_id: str(uuid), result_payload: map, result_summary: str, run_id: str(uuid), started_at: str(date-time), status: str, updated_at: str(date-time)}}
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs/{run_id}/plan
@required {mission_id: str(uuid), run_id: str(uuid)}
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/plan
@required {mission_id: str(uuid), run_id: str(uuid), steps: [map{description!: str, metadata: map, parent_step_id: str, sequence!: int, step_id!: str}]}
@returns(201) {data: [map]}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/plan/steps
@required {mission_id: str(uuid), run_id: str(uuid), steps: [map{description!: str, metadata: map, parent_step_id: str, sequence!: int, step_id!: str}]}
@returns(201) {data: [map]}
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs/{run_id}/plan/steps/{step_id}
@required {mission_id: str(uuid), run_id: str(uuid), step_id: str}
@returns(200) {data: map{completed_at: str(date-time), description: str, metadata: map, parent_step_id: str, run_id: str(uuid), sequence: int, started_at: str(date-time), status: str, step_id: str}}
@errors {422}

@endpoint PATCH /ai/missions/{mission_id}/runs/{run_id}/plan/steps/{step_id}
@required {mission_id: str(uuid), run_id: str(uuid), step_id: str}
@optional {metadata: map, status: str(pending/in_progress/completed/skipped/failed)}
@returns(200) {data: map{completed_at: str(date-time), description: str, metadata: map, parent_step_id: str, run_id: str(uuid), sequence: int, started_at: str(date-time), status: str, step_id: str}}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/resume
@required {mission_id: str(uuid), run_id: str(uuid)}
@returns(200) {data: map{error: str, finished_at: str(date-time), input: map, metadata: map, mission_id: str(uuid), result_payload: map, result_summary: str, run_id: str(uuid), started_at: str(date-time), status: str, updated_at: str(date-time)}}
@errors {422}

@endpoint GET /ai/missions/{mission_id}/runs/{run_id}/telnyx-agents
@required {mission_id: str(uuid), run_id: str(uuid)}
@returns(200) {data: [map]}
@errors {422}

@endpoint POST /ai/missions/{mission_id}/runs/{run_id}/telnyx-agents
@required {mission_id: str(uuid), run_id: str(uuid), telnyx_agent_id: str}
@returns(201) {data: map{created_at: str(date-time), run_id: str, telnyx_agent_id: str}}
@errors {422}

@endpoint DELETE /ai/missions/{mission_id}/runs/{run_id}/telnyx-agents/{telnyx_agent_id}
@required {mission_id: str(uuid), run_id: str(uuid), telnyx_agent_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/tools
@required {mission_id: str}
@returns(200)
@errors {422}

@endpoint POST /ai/missions/{mission_id}/tools
@required {mission_id: str}
@returns(201)
@errors {422}

@endpoint DELETE /ai/missions/{mission_id}/tools/{tool_id}
@required {mission_id: str, tool_id: str}
@returns(204)
@errors {422}

@endpoint GET /ai/missions/{mission_id}/tools/{tool_id}
@required {mission_id: str, tool_id: str}
@returns(200)
@errors {422}

@endpoint PUT /ai/missions/{mission_id}/tools/{tool_id}
@required {mission_id: str, tool_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/models
@returns(200) {data: [map], object: str}
@errors {422}

@endpoint POST /ai/openai/embeddings
@required {input: any, model: str}
@optional {dimensions: int, encoding_format: str(float/base64)=float, user: str}
@returns(200) {data: [map], model: str, object: str, usage: map{prompt_tokens: int, total_tokens: int}}
@errors {422}

@endpoint GET /ai/openai/embeddings/models
@returns(200) {data: [map], object: str}
@errors {422}

@endpoint POST /ai/summarize
@required {bucket: str, filename: str}
@optional {system_prompt: str}
@returns(200) {data: map{summary: str}}
@errors {422}

@endpoint GET /ai/tools
@optional {filter[type]: str, filter[name]: str, page[size]: int=20, page[number]: int=1}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /ai/tools
@required {display_name: str, type: str}
@optional {function: map, handoff: map, invite: map, retrieval: map, timeout_ms: int=5000, webhook: map}
@returns(200) {created_at: str, display_name: str, id: str, timeout_ms: int, tool_definition: map, type: str}
@errors {422}

@endpoint DELETE /ai/tools/{tool_id}
@required {tool_id: str}
@returns(200)
@errors {422}

@endpoint GET /ai/tools/{tool_id}
@required {tool_id: str}
@returns(200) {created_at: str, display_name: str, id: str, timeout_ms: int, tool_definition: map, type: str}
@errors {422}

@endpoint PATCH /ai/tools/{tool_id}
@required {tool_id: str}
@optional {display_name: str, function: map, handoff: map, invite: map, retrieval: map, timeout_ms: int, type: str, webhook: map}
@returns(200) {created_at: str, display_name: str, id: str, timeout_ms: int, tool_definition: map, type: str}
@errors {422}

@endgroup

@group alphanumeric_sender_ids
@endpoint GET /alphanumeric_sender_ids
@optional {filter[messaging_profile_id]: str(uuid), page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /alphanumeric_sender_ids
@required {alphanumeric_sender_id: str, messaging_profile_id: str(uuid)}
@optional {us_long_code_fallback: str}
@returns(201) {data: map{alphanumeric_sender_id: str, id: str(uuid), messaging_profile_id: str(uuid), organization_id: str, record_type: str, us_long_code_fallback: str}}
@errors {401, 422}

@endpoint DELETE /alphanumeric_sender_ids/{id}
@required {id: str}
@returns(200) {data: map{alphanumeric_sender_id: str, id: str(uuid), messaging_profile_id: str(uuid), organization_id: str, record_type: str, us_long_code_fallback: str}}
@errors {401, 404}

@endpoint GET /alphanumeric_sender_ids/{id}
@required {id: str}
@returns(200) {data: map{alphanumeric_sender_id: str, id: str(uuid), messaging_profile_id: str(uuid), organization_id: str, record_type: str, us_long_code_fallback: str}}
@errors {401, 404}

@endgroup

@group audit_events
@endpoint GET /audit_events
@optional {page: map, filter: map, sort: str(asc/desc)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endgroup

@group authentication_providers
@endpoint GET /authentication_providers
@optional {sort: str(name/-name/short_name/-short_name/active/-active/created_at/-created_at/updated_at/-updated_at)=-created_at, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint POST /authentication_providers
@required {name: str, settings: map{idp_cert_fingerprint!: str, idp_cert_fingerprint_algorithm: str, idp_entity_id!: str(uri), idp_sso_target_url!: str(uri)}, short_name: str}
@optional {active: bool=true, settings_url: str(uri)}
@returns(200) {data: map{activated_at: str(date-time), active: bool, created_at: str(date-time), id: str(uuid), name: str, organization_id: str(uuid), record_type: str, settings: map{assertion_consumer_service_url: str(uri), idp_attribute_names: map, idp_cert_fingerprint: str, idp_cert_fingerprint_algorithm: str, idp_certificate: str, idp_entity_id: str(uri), idp_slo_target_url: str(uri), idp_sso_target_url: str(uri), name_identifier_format: str, provision_groups: bool, service_provider_entity_id: str(uri), service_provider_login_url: str(uri)}, short_name: str, updated_at: str(date-time)}}
@errors {422}

@endpoint DELETE /authentication_providers/{id}
@required {id: str}
@returns(200) {data: map{activated_at: str(date-time), active: bool, created_at: str(date-time), id: str(uuid), name: str, organization_id: str(uuid), record_type: str, settings: map{assertion_consumer_service_url: str(uri), idp_attribute_names: map, idp_cert_fingerprint: str, idp_cert_fingerprint_algorithm: str, idp_certificate: str, idp_entity_id: str(uri), idp_slo_target_url: str(uri), idp_sso_target_url: str(uri), name_identifier_format: str, provision_groups: bool, service_provider_entity_id: str(uri), service_provider_login_url: str(uri)}, short_name: str, updated_at: str(date-time)}}
@errors {401, 404, 422}

@endpoint GET /authentication_providers/{id}
@required {id: str}
@returns(200) {data: map{activated_at: str(date-time), active: bool, created_at: str(date-time), id: str(uuid), name: str, organization_id: str(uuid), record_type: str, settings: map{assertion_consumer_service_url: str(uri), idp_attribute_names: map, idp_cert_fingerprint: str, idp_cert_fingerprint_algorithm: str, idp_certificate: str, idp_entity_id: str(uri), idp_slo_target_url: str(uri), idp_sso_target_url: str(uri), name_identifier_format: str, provision_groups: bool, service_provider_entity_id: str(uri), service_provider_login_url: str(uri)}, short_name: str, updated_at: str(date-time)}}
@errors {401, 404, 422}

@endpoint PATCH /authentication_providers/{id}
@required {id: str}
@optional {active: bool=true, name: str, settings: map{idp_cert_fingerprint!: str, idp_cert_fingerprint_algorithm: str, idp_entity_id!: str(uri), idp_sso_target_url!: str(uri)}, settings_url: str(uri), short_name: str}
@returns(200) {data: map{activated_at: str(date-time), active: bool, created_at: str(date-time), id: str(uuid), name: str, organization_id: str(uuid), record_type: str, settings: map{assertion_consumer_service_url: str(uri), idp_attribute_names: map, idp_cert_fingerprint: str, idp_cert_fingerprint_algorithm: str, idp_certificate: str, idp_entity_id: str(uri), idp_slo_target_url: str(uri), idp_sso_target_url: str(uri), name_identifier_format: str, provision_groups: bool, service_provider_entity_id: str(uri), service_provider_login_url: str(uri)}, short_name: str, updated_at: str(date-time)}}
@errors {401, 404, 422}

@endgroup

@group available_phone_number_blocks
@endpoint GET /available_phone_number_blocks
@optional {filter: map}
@returns(200) {data: [map], meta: map{best_effort_results: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group available_phone_numbers
@endpoint GET /available_phone_numbers
@optional {filter: map}
@returns(200) {data: [map], meta: map{best_effort_results: int, total_results: int}, metadata: map{best_effort_results: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group balance
@endpoint GET /balance
@returns(200) {data: map{available_credit: str, balance: str, credit_limit: str, currency: str, pending: str, record_type: str}}
@errors {403, 422, 503}

@endgroup

@group billing_groups
@endpoint GET /billing_groups
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400}

@endpoint POST /billing_groups
@optional {name: str}
@returns(200) {data: map{created_at: str(date-time), deleted_at: str(date-time)?, id: str(uuid), name: str, organization_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {409, 422}

@endpoint DELETE /billing_groups/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), deleted_at: str(date-time)?, id: str(uuid), name: str, organization_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {403, 404, 409, 422}

@endpoint GET /billing_groups/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), deleted_at: str(date-time)?, id: str(uuid), name: str, organization_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {403, 404}

@endpoint PATCH /billing_groups/{id}
@required {id: str(uuid)}
@optional {name: str}
@returns(200) {data: map{created_at: str(date-time), deleted_at: str(date-time)?, id: str(uuid), name: str, organization_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {403, 404, 422}

@endgroup

@group bulk_sim_card_actions
@endpoint GET /bulk_sim_card_actions
@optional {page[number]: int=1, page[size]: int=20, filter[action_type]: str(bulk_disable_voice/bulk_enable_voice/bulk_set_public_ips)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint GET /bulk_sim_card_actions/{id}
@required {id: str(uuid)}
@returns(200) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map, sim_card_actions_summary: [map], updated_at: str}}
@errors {401}

@endgroup

@group bundle_pricing
@endpoint GET /bundle_pricing/billing_bundles
@optional {filter: map, page: map, authorization_bearer: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401}

@endpoint GET /bundle_pricing/billing_bundles/{bundle_id}
@required {bundle_id: str(uuid)}
@optional {authorization_bearer: str}
@returns(200) {data: map{active: bool, bundle_limits: [map], cost_code: str, created_at: str(date), id: str(uuid), is_public: bool, name: str, slug: str}}
@errors {401, 404}

@endpoint GET /bundle_pricing/user_bundles
@optional {filter: map, page: map, authorization_bearer: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401}

@endpoint POST /bundle_pricing/user_bundles/bulk
@optional {authorization_bearer: str, idempotency_key: str(uuid), items: [map{billing_bundle_id!: str(uuid), quantity!: int}]}
@returns(201) {data: [map]}
@errors {400, 401, 404, 422}

@endpoint GET /bundle_pricing/user_bundles/unused
@optional {filter: map, authorization_bearer: str}
@returns(200) {data: [map]}
@errors {400, 401}

@endpoint DELETE /bundle_pricing/user_bundles/{user_bundle_id}
@required {user_bundle_id: str(uuid)}
@optional {authorization_bearer: str}
@returns(200) {data: map{active: bool, billing_bundle: map{cost_code: str, created_at: str(date), currency: str, id: str(uuid), is_public: bool, mrc_price: num(float), name: str, slug: str, specs: [str]}, created_at: str(date), id: str(uuid), resources: [map], updated_at: str(date)?, user_id: str(uuid)}}
@errors {401, 404, 422}

@endpoint GET /bundle_pricing/user_bundles/{user_bundle_id}
@required {user_bundle_id: str(uuid)}
@optional {authorization_bearer: str}
@returns(200) {data: map{active: bool, billing_bundle: map{cost_code: str, created_at: str(date), currency: str, id: str(uuid), is_public: bool, mrc_price: num(float), name: str, slug: str, specs: [str]}, created_at: str(date), id: str(uuid), resources: [map], updated_at: str(date)?, user_id: str(uuid)}}
@errors {401, 404}

@endpoint GET /bundle_pricing/user_bundles/{user_bundle_id}/resources
@required {user_bundle_id: str(uuid)}
@optional {authorization_bearer: str}
@returns(200) {data: [map]}
@errors {401, 404}

@endgroup

@group call_control_applications
@endpoint GET /call_control_applications
@optional {filter: map, page: map, sort: str(created_at/connection_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint POST /call_control_applications
@required {application_name: str, webhook_event_url: str(url)}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/London, UK/Chennai, IN/Amsterdam, Netherlands/Toronto, Canada/Sydney, Australia)=Latency, call_cost_in_webhooks: bool=false, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, first_command_timeout: bool=false, first_command_timeout_secs: int=30, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, redact_dtmf_debug_logging: bool=false, webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(url)=, webhook_timeout_secs: int=null}
@returns(201) {data: map{active: bool, anchorsite_override: str, application_name: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, redact_dtmf_debug_logging: bool, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(url)?, webhook_event_url: str(url), webhook_timeout_secs: int?}}
@errors {422}

@endpoint DELETE /call_control_applications/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, application_name: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, redact_dtmf_debug_logging: bool, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(url)?, webhook_event_url: str(url), webhook_timeout_secs: int?}}
@errors {401, 404, 422}

@endpoint GET /call_control_applications/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, application_name: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, redact_dtmf_debug_logging: bool, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(url)?, webhook_event_url: str(url), webhook_timeout_secs: int?}}
@errors {401, 404, 422}

@endpoint PATCH /call_control_applications/{id}
@required {id: str, application_name: str, webhook_event_url: str(url)}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/London, UK/Chennai, IN/Amsterdam, Netherlands/Toronto, Canada/Sydney, Australia)=Latency, call_cost_in_webhooks: bool=false, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, first_command_timeout: bool=false, first_command_timeout_secs: int=30, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, redact_dtmf_debug_logging: bool=false, tags: [str], webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(url)=, webhook_timeout_secs: int=null}
@returns(200) {data: map{active: bool, anchorsite_override: str, application_name: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, redact_dtmf_debug_logging: bool, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(url)?, webhook_event_url: str(url), webhook_timeout_secs: int?}}
@errors {401, 404, 422}

@endgroup

@group call_events
@endpoint GET /call_events
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endgroup

@group calls
@endpoint POST /calls
@required {connection_id: str, from: str, to: any}
@optional {answering_machine_detection: str(premium/detect/detect_beep/detect_words/greeting_end/disabled)=disabled, answering_machine_detection_config: map{after_greeting_silence_millis: int(int32), between_words_silence_millis: int(int32), greeting_duration_millis: int(int32), greeting_silence_duration_millis: int(int32), greeting_total_analysis_time_millis: int(int32), initial_silence_millis: int(int32), maximum_number_of_words: int(int32), maximum_word_length_millis: int(int32), silence_threshold: int(int32), total_analysis_time_millis: int(int32)}, audio_url: str, billing_group_id: str(uuid), bridge_intent: bool=false, bridge_on_answer: bool=false, client_state: str, command_id: str, conference_config: map{beep_enabled: str, conference_name: str, early_media: bool, end_conference_on_exit: bool, hold: bool, hold_audio_url: str, hold_media_name: str, id: str(uuid), mute: bool, soft_end_conference_on_exit: bool, start_conference_on_create: bool, start_conference_on_enter: bool, supervisor_role: str, whisper_call_control_ids: [str]}, custom_headers: [map{name!: str, value!: str}], dialogflow_config: map{analyze_sentiment: bool, partial_automated_agent_reply: bool}, enable_dialogflow: bool=false, from_display_name: str, link_to: str, media_encryption: str(disabled/SRTP/DTLS)=disabled, media_name: str, park_after_unbridge: str, preferred_codecs: str, prevent_double_bridge: bool=false, record: str, record_channels: str(single/dual)=dual, record_custom_file_name: str, record_format: str(wav/mp3)=mp3, record_max_length: int(int32)=0, record_timeout_secs: int(int32)=0, record_track: str(both/inbound/outbound)=both, record_trim: str, send_silence_when_idle: bool=false, sip_auth_password: str, sip_auth_username: str, sip_headers: [map{name!: str, value!: str}], sip_region: str(US/Europe/Canada/Australia/Middle East)=US, sip_transport_protocol: str(UDP/TCP/TLS)=UDP, sound_modifications: map{octaves: num(float), pitch: num(float), semitone: num(float), track: str}, stream_auth_token: str, stream_bidirectional_codec: str(PCMU/PCMA/G722/OPUS/AMR-WB/L16)=PCMU, stream_bidirectional_mode: str(mp3/rtp)=mp3, stream_bidirectional_sampling_rate: int(8000/16000/22050/24000/48000)=8000, stream_bidirectional_target_legs: str(both/self/opposite)=opposite, stream_codec: str(PCMU/PCMA/G722/OPUS/AMR-WB/L16/default)=default, stream_establish_before_call_originate: bool=false, stream_track: str(inbound_track/outbound_track/both_tracks)=inbound_track, stream_url: str, supervise_call_control_id: str, supervisor_role: str(barge/whisper/monitor)=barge, time_limit_secs: int(int32)=14400, timeout_secs: int(int32)=30, transcription: bool=false, transcription_config: map{client_state: str, command_id: str, transcription_engine: str, transcription_engine_config: any, transcription_tracks: str}, webhook_url: str, webhook_url_method: str(POST/GET)=POST}
@returns(200) {data: map{call_control_id: str, call_duration: int, call_leg_id: str, call_session_id: str, client_state: str, end_time: str, is_alive: bool, record_type: str, recording_id: str(uuid), start_time: str}}
@errors {400, 422, 500, 503}

@endpoint GET /calls/{call_control_id}
@required {call_control_id: str}
@returns(200) {data: map{call_control_id: str, call_duration: int, call_leg_id: str, call_session_id: str, client_state: str, end_time: str, is_alive: bool, record_type: str, start_time: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/ai_assistant_add_messages
@required {call_control_id: str}
@optional {client_state: str, command_id: str, messages: [any]}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/ai_assistant_join
@required {call_control_id: str, conversation_id: str, participant: map{id!: str, name: str, on_hangup: str, role!: str}}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{conversation_id: str(uuid), result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/ai_assistant_start
@required {call_control_id: str}
@optional {assistant: map{id: str, instructions: str, openai_api_key_ref: str}, client_state: str, command_id: str, greeting: str, interruption_settings: map{enable: bool}, message_history: [any]=, participants: [map{id!: str, name: str, on_hangup: str, role!: str}]=, send_message_history_updates: bool=false, transcription: map{model: str}, voice: str=Telnyx.KokoroTTS.af, voice_settings: any}
@returns(200) {data: map{conversation_id: str(uuid), result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/ai_assistant_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/answer
@required {call_control_id: str}
@optional {billing_group_id: str(uuid), client_state: str, command_id: str, custom_headers: [map{name!: str, value!: str}], preferred_codecs: str, record: str, record_channels: str(single/dual)=dual, record_custom_file_name: str, record_format: str(wav/mp3)=mp3, record_max_length: int(int32)=0, record_timeout_secs: int(int32)=0, record_track: str(both/inbound/outbound)=both, record_trim: str, send_silence_when_idle: bool=false, sip_headers: [map{name!: str, value!: str}], sound_modifications: map{octaves: num(float), pitch: num(float), semitone: num(float), track: str}, stream_bidirectional_codec: str(PCMU/PCMA/G722/OPUS/AMR-WB/L16)=PCMU, stream_bidirectional_mode: str(mp3/rtp)=mp3, stream_bidirectional_target_legs: str(both/self/opposite)=opposite, stream_codec: str(PCMU/PCMA/G722/OPUS/AMR-WB/L16/default)=default, stream_track: str(inbound_track/outbound_track/both_tracks)=inbound_track, stream_url: str, transcription: bool=false, transcription_config: map{client_state: str, command_id: str, transcription_engine: str, transcription_engine_config: any, transcription_tracks: str}, webhook_retries_policies: map, webhook_url: str, webhook_url_method: str(POST/GET)=POST, webhook_urls: map, webhook_urls_method: str(POST/GET)=POST}
@returns(200) {data: map{recording_id: str(uuid), result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/bridge
@required {call_control_id: str, call_control_id: str}
@optional {client_state: str, command_id: str, hold_after_unbridge: bool, mute_dtmf: str(none/both/self/opposite)=none, park_after_unbridge: str, play_ringtone: bool=false, prevent_double_bridge: bool=false, queue: str, record: str, record_channels: str(single/dual)=dual, record_custom_file_name: str, record_format: str(wav/mp3)=mp3, record_max_length: int(int32)=0, record_timeout_secs: int(int32)=0, record_track: str(both/inbound/outbound)=both, record_trim: str, ringtone: str(at/au/be/bg/br/ch/cl/cn/cz/de/dk/ee/es/fi/fr/gr/hu/il/in/it/jp/lt/mx/my/nl/no/nz/ph/pl/pt/ru/se/sg/th/tw/uk/us-old/us/ve/za)=us, video_room_context: str, video_room_id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint PUT /calls/{call_control_id}/actions/client_state_update
@required {call_control_id: str, client_state: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/enqueue
@required {call_control_id: str, queue_name: str}
@optional {client_state: str, command_id: str, keep_after_hangup: bool=false, max_size: int=100, max_wait_time_secs: int}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/fork_start
@required {call_control_id: str}
@optional {client_state: str, command_id: str, rx: str, stream_type: str=decrypted, tx: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/fork_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str, stream_type: str(raw/decrypted)=raw}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/gather
@required {call_control_id: str}
@optional {client_state: str, command_id: str, gather_id: str, initial_timeout_millis: int(int32)=5000, inter_digit_timeout_millis: int(int32)=5000, maximum_digits: int(int32)=128, minimum_digits: int(int32)=1, terminating_digit: str=#, timeout_millis: int(int32)=60000, valid_digits: str=0123456789#*}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/gather_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/gather_using_ai
@required {call_control_id: str, parameters: map}
@optional {assistant: map{instructions: str, model: str, openai_api_key_ref: str, tools: [any]}, client_state: str, command_id: str, gather_ended_speech: str, greeting: str, interruption_settings: map{enable: bool}, language: any, message_history: [map{content: str, role: str}], send_message_history_updates: bool, send_partial_results: bool, transcription: map{model: str}, user_response_timeout_ms: int=10000, voice: str=Telnyx.KokoroTTS.af, voice_settings: any}
@returns(200) {data: map{conversation_id: str(uuid), result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/gather_using_audio
@required {call_control_id: str}
@optional {audio_url: str, client_state: str, command_id: str, inter_digit_timeout_millis: int(int32)=5000, invalid_audio_url: str, invalid_media_name: str, maximum_digits: int(int32)=128, maximum_tries: int(int32)=3, media_name: str, minimum_digits: int(int32)=1, terminating_digit: str=#, timeout_millis: int(int32)=60000, valid_digits: str=0123456789#*}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/gather_using_speak
@required {call_control_id: str, payload: str, voice: str}
@optional {client_state: str, command_id: str, inter_digit_timeout_millis: int(int32)=5000, invalid_payload: str, language: str(arb/cmn-CN/cy-GB/da-DK/de-DE/en-AU/en-GB/en-GB-WLS/en-IN/en-US/es-ES/es-MX/es-US/fr-CA/fr-FR/hi-IN/is-IS/it-IT/ja-JP/ko-KR/nb-NO/nl-NL/pl-PL/pt-BR/pt-PT/ro-RO/ru-RU/sv-SE/tr-TR), maximum_digits: int(int32)=128, maximum_tries: int(int32)=3, minimum_digits: int(int32)=1, payload_type: str(text/ssml)=text, service_level: str(basic/premium)=premium, terminating_digit: str=#, timeout_millis: int(int32)=60000, valid_digits: str=0123456789#*, voice_settings: any}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/hangup
@required {call_control_id: str}
@optional {client_state: str, command_id: str, custom_headers: [map{name!: str, value!: str}]}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/leave_queue
@required {call_control_id: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/playback_start
@required {call_control_id: str}
@optional {audio_type: str(mp3/wav)=mp3, audio_url: str, cache_audio: bool=true, client_state: str, command_id: str, loop: any, media_name: str, overlay: bool=false, playback_content: str, stop: str, target_legs: str=self}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/playback_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str, overlay: bool=false, stop: str=all}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/record_pause
@required {call_control_id: str}
@optional {client_state: str, command_id: str, recording_id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/record_resume
@required {call_control_id: str}
@optional {client_state: str, command_id: str, recording_id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/record_start
@required {call_control_id: str, channels: str(single/dual), format: str(wav/mp3)}
@optional {client_state: str, command_id: str, custom_file_name: str, max_length: int(int32)=0, play_beep: bool, recording_track: str(both/inbound/outbound)=both, timeout_secs: int(int32)=0, transcription: bool=false, transcription_engine: str(A/B/deepgram/nova-3)=A, transcription_language: str(af/af-ZA/am/am-ET/ar/ar-AE/ar-BH/ar-DZ/ar-EG/ar-IL/ar-IQ/ar-JO/ar-KW/ar-LB/ar-MA/ar-MR/ar-OM/ar-PS/ar-QA/ar-SA/ar-TN/ar-YE/as/auto_detect/az/az-AZ/ba/be/bg/bg-BG/bn/bn-BD/bn-IN/bo/br/bs/bs-BA/ca/ca-ES/cs/cs-CZ/cy/da/da-DK/de/de-AT/de-CH/de-DE/el/el-GR/en/en-AU/en-CA/en-GB/en-GH/en-HK/en-IE/en-IN/en-KE/en-NG/en-NZ/en-PH/en-PK/en-SG/en-TZ/en-US/en-ZA/es/es-419/es-AR/es-BO/es-CL/es-CO/es-CR/es-DO/es-EC/es-ES/es-GT/es-HN/es-MX/es-NI/es-PA/es-PE/es-PR/es-PY/es-SV/es-US/es-UY/es-VE/et/et-EE/eu/eu-ES/fa/fa-IR/fi/fi-FI/fil-PH/fo/fr/fr-BE/fr-CA/fr-CH/fr-FR/gl/gl-ES/gu/gu-IN/ha/haw/he/hi/hi-IN/hr/hr-HR/ht/hu/hu-HU/hy/hy-AM/id/id-ID/is/is-IS/it/it-CH/it-IT/iw-IL/ja/ja-JP/jv-ID/jw/ka/ka-GE/kk/kk-KZ/km/km-KH/kn/kn-IN/ko/ko-KR/la/lb/ln/lo/lo-LA/lt/lt-LT/lv/lv-LV/mg/mi/mk/mk-MK/ml/ml-IN/mn/mn-MN/mr/mr-IN/ms/ms-MY/mt/my/my-MM/ne/ne-NP/nl/nl-BE/nl-NL/nn/no/no-NO/oc/pa/pa-Guru-IN/pl/pl-PL/ps/pt/pt-BR/pt-PT/ro/ro-RO/ru/ru-RU/rw-RW/sa/sd/si/si-LK/sk/sk-SK/sl/sl-SI/sn/so/sq/sq-AL/sr/sr-RS/ss-latn-za/st-ZA/su/su-ID/sv/sv-SE/sw/sw-KE/sw-TZ/ta/ta-IN/ta-LK/ta-MY/ta-SG/te/te-IN/tg/th/th-TH/tk/tl/tn-latn-za/tr/tr-TR/ts-ZA/tt/uk/uk-UA/ur/ur-IN/ur-PK/uz/uz-UZ/ve-ZA/vi/vi-VN/xh-ZA/yi/yo/yue-Hant-HK/zh/zh-TW/zu-ZA)=en-US, transcription_max_speaker_count: int(int32)=6, transcription_min_speaker_count: int(int32)=2, transcription_profanity_filter: bool=false, transcription_speaker_diarization: bool=false, trim: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/record_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str, recording_id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/refer
@required {call_control_id: str, sip_address: str}
@optional {client_state: str, command_id: str, custom_headers: [map{name!: str, value!: str}], sip_auth_password: str, sip_auth_username: str, sip_headers: [map{name!: str, value!: str}]}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/reject
@required {call_control_id: str, cause: str(CALL_REJECTED/USER_BUSY)}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/send_dtmf
@required {call_control_id: str, digits: str}
@optional {client_state: str, command_id: str, duration_millis: int(int32)=250}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/send_sip_info
@required {call_control_id: str, body: str, content_type: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/siprec_start
@required {call_control_id: str}
@optional {client_state: str, connector_name: str, include_metadata_custom_headers: bool(true/false), secure: bool(true/false), session_timeout_secs: int=1800, sip_transport: str(udp/tcp/tls)=udp, siprec_track: str(inbound_track/outbound_track/both_tracks)=both_tracks}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/siprec_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/speak
@required {call_control_id: str, payload: str, voice: str}
@optional {client_state: str, command_id: str, language: str(arb/cmn-CN/cy-GB/da-DK/de-DE/en-AU/en-GB/en-GB-WLS/en-IN/en-US/es-ES/es-MX/es-US/fr-CA/fr-FR/hi-IN/is-IS/it-IT/ja-JP/ko-KR/nb-NO/nl-NL/pl-PL/pt-BR/pt-PT/ro-RO/ru-RU/sv-SE/tr-TR), loop: any, payload_type: str(text/ssml)=text, service_level: str(basic/premium)=premium, stop: str, target_legs: str(self/opposite/both)=self, voice_settings: any}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/streaming_start
@required {call_control_id: str}
@optional {client_state: str, command_id: str, custom_parameters: [map{name: str, value: str}], dialogflow_config: map{analyze_sentiment: bool, partial_automated_agent_reply: bool}, enable_dialogflow: bool=false, stream_auth_token: str, stream_bidirectional_codec: str(PCMU/PCMA/G722/OPUS/AMR-WB/L16)=PCMU, stream_bidirectional_mode: str(mp3/rtp)=mp3, stream_bidirectional_sampling_rate: int(8000/16000/22050/24000/48000)=8000, stream_bidirectional_target_legs: str(both/self/opposite)=opposite, stream_codec: str(PCMU/PCMA/G722/OPUS/AMR-WB/L16/default)=default, stream_track: str(inbound_track/outbound_track/both_tracks)=inbound_track, stream_url: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/streaming_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str, stream_id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/suppression_start
@required {call_control_id: str}
@optional {client_state: str, command_id: str, direction: str(inbound/outbound/both)=inbound, noise_suppression_engine: str(Denoiser/DeepFilterNet/Krisp/AiCoustics)=Denoiser, noise_suppression_engine_config: map{attenuation_limit: int, enhancement_level: num, family: str, mode: str, model: str, size: str, suppression_level: num, voice_gain: num}}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/suppression_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/switch_supervisor_role
@required {call_control_id: str, role: str(barge/whisper/monitor)}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/transcription_start
@required {call_control_id: str}
@optional {client_state: str, command_id: str, transcription_engine: str(Google/Telnyx/Deepgram/Azure/A/B)=Google, transcription_engine_config: any, transcription_tracks: str=inbound}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/transcription_stop
@required {call_control_id: str}
@optional {client_state: str, command_id: str}
@returns(200) {data: map{result: str}}
@errors {422}

@endpoint POST /calls/{call_control_id}/actions/transfer
@required {call_control_id: str, to: str}
@optional {answering_machine_detection: str(premium/detect/detect_beep/detect_words/greeting_end/disabled)=disabled, answering_machine_detection_config: map{after_greeting_silence_millis: int(int32), between_words_silence_millis: int(int32), greeting_duration_millis: int(int32), greeting_silence_duration_millis: int(int32), greeting_total_analysis_time_millis: int(int32), initial_silence_millis: int(int32), maximum_number_of_words: int(int32), maximum_word_length_millis: int(int32), silence_threshold: int(int32), total_analysis_time_millis: int(int32)}, audio_url: str, client_state: str, command_id: str, custom_headers: [map{name!: str, value!: str}], early_media: bool=true, from: str, from_display_name: str, media_encryption: str(disabled/SRTP/DTLS)=disabled, media_name: str, mute_dtmf: str(none/both/self/opposite)=none, park_after_unbridge: str, preferred_codecs: str, record: str, record_channels: str(single/dual)=dual, record_custom_file_name: str, record_format: str(wav/mp3)=mp3, record_max_length: int(int32)=0, record_timeout_secs: int(int32)=0, record_track: str(both/inbound/outbound)=both, record_trim: str, sip_auth_password: str, sip_auth_username: str, sip_headers: [map{name!: str, value!: str}], sip_region: str(US/Europe/Canada/Australia/Middle East)=US, sip_transport_protocol: str(UDP/TCP/TLS)=UDP, sound_modifications: map{octaves: num(float), pitch: num(float), semitone: num(float), track: str}, target_leg_client_state: str, time_limit_secs: int(int32)=14400, timeout_secs: int(int32)=30, webhook_retries_policies: map, webhook_url: str, webhook_url_method: str(POST/GET)=POST, webhook_urls: map, webhook_urls_method: str(POST/GET)=POST}
@returns(200) {data: map{result: str}}
@errors {422}

@endgroup

@group channel_zones
@endpoint GET /channel_zones
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint PUT /channel_zones/{channel_zone_id}
@required {channels: int(int64)}
@returns(200) {channels: int(int64), countries: [str], created_at: str, id: str, name: str, record_type: str, updated_at: str}
@errors {400, 401, 404}

@endgroup

@group charges_breakdown
@endpoint GET /charges_breakdown
@required {start_date: str(date)}
@optional {end_date: str(date), format: str(json/csv)=json}
@returns(200) {data: map{currency: str, end_date: str(date), results: [map], start_date: str(date), user_email: str(email), user_id: str}}
@errors {400, 422}

@endgroup

@group charges_summary
@endpoint GET /charges_summary
@required {start_date: str(date), end_date: str(date)}
@returns(200) {data: map{currency: str, end_date: str(date), start_date: str(date), summary: map{adjustments: [map], lines: [any]}, total: map{credits: str, existing_mrc: str, grand_total: str, ledger_adjustments: str, new_mrc: str, new_otc: str, other: str}, user_email: str(email), user_id: str}}
@errors {400, 422}

@endgroup

@group comments
@endpoint GET /comments
@optional {filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /comments
@optional {body: str, comment_record_id: str(uuid), comment_record_type: str(sub_number_order/requirement_group), commenter: str, commenter_type: str(admin/user), created_at: str(date-time), id: str(uuid), read_at: str(date-time), updated_at: str(date-time)}
@returns(200) {data: any}
@errors {400, 401, 404, 422, 500}

@endpoint GET /comments/{id}
@required {id: str}
@returns(200) {data: any}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /comments/{id}/read
@required {id: str}
@returns(200) {data: any}
@errors {400, 401, 404, 422, 500}

@endgroup

@group conferences
@endpoint GET /conferences
@optional {region: str(Australia/Europe/Middle East/US), filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /conferences
@required {call_control_id: str, name: str}
@optional {beep_enabled: str(always/never/on_enter/on_exit)=never, client_state: str, comfort_noise: bool=true, command_id: str, duration_minutes: int, hold_audio_url: str, hold_media_name: str, max_participants: int, region: str(Australia/Europe/Middle East/US), start_conference_on_create: bool}
@returns(200) {data: map{connection_id: str, created_at: str, end_reason: str, ended_by: map{call_control_id: str, call_session_id: str}, expires_at: str, id: str, name: str, record_type: str, region: str, status: str, updated_at: str}}
@errors {401, 422}

@endpoint GET /conferences/{conference_id}/participants
@required {conference_id: str}
@optional {region: str(Australia/Europe/Middle East/US), page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint GET /conferences/{id}
@required {id: str}
@optional {region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{connection_id: str, created_at: str, end_reason: str, ended_by: map{call_control_id: str, call_session_id: str}, expires_at: str, id: str, name: str, record_type: str, region: str, status: str, updated_at: str}}
@errors {404}

@endpoint POST /conferences/{id}/actions/end
@required {id: str(uuid)}
@optional {command_id: str}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/gather_using_audio
@required {id: str(uuid), call_control_id: str}
@optional {audio_url: str, client_state: str, gather_id: str, initial_timeout_millis: int, inter_digit_timeout_millis: int=5000, invalid_audio_url: str, invalid_media_name: str, maximum_digits: int=128, maximum_tries: int=3, media_name: str, minimum_digits: int=1, stop_playback_on_dtmf: bool=true, terminating_digit: str=#, timeout_millis: int=60000, valid_digits: str=0123456789#*}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/hold
@required {id: str}
@optional {audio_url: str, call_control_ids: [str], media_name: str, region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/join
@required {id: str, call_control_id: str}
@optional {beep_enabled: str(always/never/on_enter/on_exit), client_state: str, command_id: str, end_conference_on_exit: bool, hold: bool, hold_audio_url: str, hold_media_name: str, mute: bool, region: str(Australia/Europe/Middle East/US), soft_end_conference_on_exit: bool, start_conference_on_enter: bool, supervisor_role: str(barge/monitor/none/whisper), whisper_call_control_ids: [str]}
@returns(200) {data: map{result: str}}
@errors {401, 422}

@endpoint POST /conferences/{id}/actions/leave
@required {id: str, call_control_id: str}
@optional {beep_enabled: str(always/never/on_enter/on_exit), command_id: str, region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 422}

@endpoint POST /conferences/{id}/actions/mute
@required {id: str}
@optional {call_control_ids: [str], region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/play
@required {id: str}
@optional {audio_url: str, call_control_ids: [str], loop: any, media_name: str, region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/record_pause
@required {id: str}
@optional {command_id: str, recording_id: str, region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/record_resume
@required {id: str}
@optional {command_id: str, recording_id: str, region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/record_start
@required {id: str, format: str(wav/mp3)}
@optional {channels: str(single/dual)=single, command_id: str, custom_file_name: str, play_beep: bool, region: str(Australia/Europe/Middle East/US), trim: str}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/record_stop
@required {id: str}
@optional {client_state: str, command_id: str, recording_id: str(uuid), region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/send_dtmf
@required {id: str(uuid), digits: str}
@optional {call_control_ids: [str], client_state: str, duration_millis: int=250}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/speak
@required {id: str, payload: str, voice: str}
@optional {call_control_ids: [str], command_id: str, language: str(arb/cmn-CN/cy-GB/da-DK/de-DE/en-AU/en-GB/en-GB-WLS/en-IN/en-US/es-ES/es-MX/es-US/fr-CA/fr-FR/hi-IN/is-IS/it-IT/ja-JP/ko-KR/nb-NO/nl-NL/pl-PL/pt-BR/pt-PT/ro-RO/ru-RU/sv-SE/tr-TR), payload_type: str(text/ssml)=text, region: str(Australia/Europe/Middle East/US), voice_settings: any}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/stop
@required {id: str}
@optional {call_control_ids: [str], region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/unhold
@required {id: str, call_control_ids: [str]}
@optional {region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/unmute
@required {id: str}
@optional {call_control_ids: [str], region: str(Australia/Europe/Middle East/US)}
@returns(200) {data: map{result: str}}
@errors {401, 404, 422}

@endpoint POST /conferences/{id}/actions/update
@required {id: str, call_control_id: str, supervisor_role: str(barge/monitor/none/whisper)}
@optional {command_id: str, region: str(Australia/Europe/Middle East/US), whisper_call_control_ids: [str]}
@returns(200) {data: map{result: str}}
@errors {401, 422}

@endpoint GET /conferences/{id}/participants/{participant_id}
@required {id: str(uuid), participant_id: str}
@returns(200) {data: map{call_control_id: str, call_leg_id: str, conference_id: str, created_at: str(date-time), end_conference_on_exit: bool, id: str, label: str, muted: bool, on_hold: bool, soft_end_conference_on_exit: bool, status: str, updated_at: str(date-time), whisper_call_control_ids: [str]}}
@errors {401, 404, 422}

@endpoint PATCH /conferences/{id}/participants/{participant_id}
@required {id: str(uuid), participant_id: str}
@optional {beep_enabled: str(always/never/on_enter/on_exit), end_conference_on_exit: bool, soft_end_conference_on_exit: bool}
@returns(200) {data: map{call_control_id: str, call_leg_id: str, conference_id: str, created_at: str(date-time), end_conference_on_exit: bool, id: str, label: str, muted: bool, on_hold: bool, soft_end_conference_on_exit: bool, status: str, updated_at: str(date-time), whisper_call_control_ids: [str]}}
@errors {401, 404, 422}

@endgroup

@group connections
@endpoint GET /connections
@optional {filter: map, page: map, sort: str(created_at/connection_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint GET /connections/{connection_id}/active_calls
@required {connection_id: str}
@optional {page: map}
@returns(200) {data: [map], meta: map{cursors: map{after: str, before: str}, next: str, previous: str, total_items: int}}
@errors {422}

@endpoint GET /connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, connection_name: str, created_at: str, id: str, outbound_voice_profile_id: str, record_type: str, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri)?}}
@errors {400, 401, 403, 404}

@endgroup

@group country_coverage
@endpoint GET /country_coverage
@returns(200) {data: map}
@errors {400, 401, 404, 422, 500}

@endpoint GET /country_coverage/countries/{country_code}
@required {country_code: str}
@returns(200) {data: map{code: str, features: [str], international_sms: bool, inventory_coverage: bool, local: map{features: [str], full_pstn_replacement: bool, international_sms: bool, p2p: bool, quickship: bool, reservable: bool}, mobile: map, national: map, numbers: bool, p2p: bool, phone_number_type: [str], quickship: bool, region: str?, reservable: bool, shared_cost: map, toll_free: map{features: [str], full_pstn_replacement: bool, international_sms: bool, p2p: bool, quickship: bool, reservable: bool}}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group credential_connections
@endpoint GET /credential_connections
@optional {filter: map, page: map, sort: str(created_at/connection_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint POST /credential_connections
@required {connection_name: str, password: str, user_name: str}
@optional {active: bool, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, android_push_credential_id: str=null, call_cost_in_webhooks: bool=false, default_on_hold_comfort_noise_enabled: bool=false, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, encode_contact_header_enabled: bool=false, encrypted_media: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, simultaneous_ringing: str, sip_compact_headers_enabled: bool, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str=null, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str(inbound/outbound/both/disabled), noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool=false, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str}, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, sip_uri_calling_preference: str(disabled/unrestricted/internal), tags: [str], webhook_api_version: str(1/2/texml)=1, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(201) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, simultaneous_ringing: str, sip_compact_headers_enabled: bool, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, sip_uri_calling_preference: str, tags: [str], updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 422}

@endpoint DELETE /credential_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, simultaneous_ringing: str, sip_compact_headers_enabled: bool, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, sip_uri_calling_preference: str, tags: [str], updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {400, 401, 403, 404}

@endpoint GET /credential_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, simultaneous_ringing: str, sip_compact_headers_enabled: bool, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, sip_uri_calling_preference: str, tags: [str], updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {400, 401, 403, 404}

@endpoint PATCH /credential_connections/{id}
@required {id: str}
@optional {active: bool, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, android_push_credential_id: str=null, call_cost_in_webhooks: bool=false, connection_name: str, default_on_hold_comfort_noise_enabled: bool=false, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, encode_contact_header_enabled: bool=false, encrypted_media: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, simultaneous_ringing: str, sip_compact_headers_enabled: bool, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str=null, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str(inbound/outbound/both/disabled), noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool=false, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str}, password: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, sip_uri_calling_preference: str(disabled/unrestricted/internal), tags: [str], user_name: str, webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(200) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, simultaneous_ringing: str, sip_compact_headers_enabled: bool, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, sip_uri_calling_preference: str, tags: [str], updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endpoint POST /credential_connections/{id}/actions/check_registration_status
@required {id: str}
@returns(200) {data: map{ip_address: str, last_registration: str, port: int, record_type: str, sip_username: str, status: str, transport: str, user_agent: str}}
@errors {400, 401, 403, 404}

@endgroup

@group custom_storage_credentials
@endpoint DELETE /custom_storage_credentials/{connection_id}
@required {connection_id: str}
@returns(204)
@errors {401, 404}

@endpoint GET /custom_storage_credentials/{connection_id}
@required {connection_id: str}
@returns(200) {connection_id: str, data: map{backend: str, configuration: any}, record_type: str}
@errors {401, 404}

@endpoint POST /custom_storage_credentials/{connection_id}
@required {connection_id: str, backend: str(gcs/s3/azure), configuration: any}
@returns(200) {connection_id: str, data: map{backend: str, configuration: any}, record_type: str}
@errors {401, 404}

@endpoint PUT /custom_storage_credentials/{connection_id}
@required {connection_id: str, backend: str(gcs/s3/azure), configuration: any}
@returns(200) {connection_id: str, data: map{backend: str, configuration: any}, record_type: str}
@errors {401, 404}

@endgroup

@group customer_service_records
@endpoint GET /customer_service_records
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 403, 422, 500}

@endpoint POST /customer_service_records
@required {phone_number: str}
@optional {additional_data: map{account_number: str, address_line_1: str, authorized_person_name: str, billing_phone_number: str, city: str, customer_code: str, name: str, pin: str, state: str, zip_code: str}, webhook_url: str}
@returns(201) {data: map{created_at: str(date-time), error_message: str?, id: str(uuid), phone_number: str, record_type: str, result: map?, status: str, updated_at: str(date-time), webhook_url: str}}
@errors {401, 403, 422, 500}

@endpoint POST /customer_service_records/phone_number_coverages
@required {phone_numbers: [str]}
@returns(201) {data: [map]}
@errors {401, 403, 422, 500}

@endpoint GET /customer_service_records/{customer_service_record_id}
@required {customer_service_record_id: str}
@returns(201) {data: map{created_at: str(date-time), error_message: str?, id: str(uuid), phone_number: str, record_type: str, result: map?, status: str, updated_at: str(date-time), webhook_url: str}}
@errors {401, 403, 404, 500}

@endgroup

@group detail_records
@endpoint GET /detail_records
@optional {filter: map, sort: [str], page: map}
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400}

@endgroup

@group dialogflow_connections
@endpoint DELETE /dialogflow_connections/{connection_id}
@required {connection_id: str}
@returns(204)
@errors {404}

@endpoint GET /dialogflow_connections/{connection_id}
@required {connection_id: str}
@returns(200) {data: map{connection_id: str, conversation_profile_id: str, environment: str, record_type: str, service_account: str}}
@errors {404}

@endpoint POST /dialogflow_connections/{connection_id}
@required {connection_id: str, service_account: map}
@optional {conversation_profile_id: str, dialogflow_api: str(cx/es)=es, environment: str, location: str}
@returns(201) {data: map{connection_id: str, conversation_profile_id: str, environment: str, record_type: str, service_account: str}}
@errors {422}

@endpoint PUT /dialogflow_connections/{connection_id}
@required {connection_id: str, service_account: map}
@optional {conversation_profile_id: str, dialogflow_api: str(cx/es)=es, environment: str, location: str}
@returns(200) {data: map{connection_id: str, conversation_profile_id: str, environment: str, record_type: str, service_account: str}}
@errors {404, 422}

@endgroup

@group document_links
@endpoint GET /document_links
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endgroup

@group documents
@endpoint GET /documents
@optional {filter: map, sort: [str], page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /documents
@optional {customer_reference: str, file: str(byte), filename: str, url: str}
@returns(200) {data: any}
@errors {422}

@endpoint DELETE /documents/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /documents/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint PATCH /documents/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /documents/{id}/download
@required {id: str(uuid)}
@returns(200)
@errors {422}

@endpoint GET /documents/{id}/download_link
@required {id: str(uuid)}
@returns(200) {data: map{url: str(uri)}}
@errors {404, 422}

@endgroup

@group dynamic_emergency_addresses
@endpoint GET /dynamic_emergency_addresses
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: num(integer), page_size: num(integer), total_pages: num(integer), total_results: num(integer)}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /dynamic_emergency_addresses
@required {administrative_area: str, country_code: str(US/CA/PR), house_number: str, locality: str, postal_code: str, street_name: str}
@optional {created_at: str, extended_address: str, house_suffix: str, id: str, record_type: str, sip_geolocation_id: str, status: str(pending/activated/rejected), street_post_directional: str, street_pre_directional: str, street_suffix: str, updated_at: str}
@returns(201) {data: map{administrative_area: str, country_code: str, created_at: str, extended_address: str, house_number: str, house_suffix: str, id: str, locality: str, postal_code: str, record_type: str, sip_geolocation_id: str, status: str, street_name: str, street_post_directional: str, street_pre_directional: str, street_suffix: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint DELETE /dynamic_emergency_addresses/{id}
@required {id: str(uuid)}
@returns(200) {data: map{administrative_area: str, country_code: str, created_at: str, extended_address: str, house_number: str, house_suffix: str, id: str, locality: str, postal_code: str, record_type: str, sip_geolocation_id: str, status: str, street_name: str, street_post_directional: str, street_pre_directional: str, street_suffix: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /dynamic_emergency_addresses/{id}
@required {id: str(uuid)}
@returns(200) {data: map{administrative_area: str, country_code: str, created_at: str, extended_address: str, house_number: str, house_suffix: str, id: str, locality: str, postal_code: str, record_type: str, sip_geolocation_id: str, status: str, street_name: str, street_post_directional: str, street_pre_directional: str, street_suffix: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group dynamic_emergency_endpoints
@endpoint GET /dynamic_emergency_endpoints
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: num(integer), page_size: num(integer), total_pages: num(integer), total_results: num(integer)}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /dynamic_emergency_endpoints
@required {callback_number: str, caller_name: str, dynamic_emergency_address_id: str}
@optional {created_at: str, id: str, record_type: str, sip_from_id: str, status: str(pending/activated/rejected), updated_at: str}
@returns(201) {data: map{callback_number: str, caller_name: str, created_at: str, dynamic_emergency_address_id: str, id: str, record_type: str, sip_from_id: str, status: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint DELETE /dynamic_emergency_endpoints/{id}
@required {id: str(uuid)}
@returns(200) {data: map{callback_number: str, caller_name: str, created_at: str, dynamic_emergency_address_id: str, id: str, record_type: str, sip_from_id: str, status: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /dynamic_emergency_endpoints/{id}
@required {id: str(uuid)}
@returns(200) {data: map{callback_number: str, caller_name: str, created_at: str, dynamic_emergency_address_id: str, id: str, record_type: str, sip_from_id: str, status: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group enterprises
@endpoint GET /enterprises
@optional {page[number]: int=1, page[size]: int=10, legal_name: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /enterprises
@required {billing_address: map{administrative_area!: str, city!: str, country!: str, extended_address: str, postal_code!: str, street_address!: str}, billing_contact: map{email!: str(email), first_name!: str, last_name!: str, phone_number!: str}, country_code: str, doing_business_as: str, fein: str, industry: str, legal_name: str, number_of_employees: str(1-10/11-50/51-200/201-500/501-2000/2001-10000/10001+), organization_contact: map{email!: str(email), first_name!: str, job_title!: str, last_name!: str, phone!: str}, organization_legal_type: str(corporation/llc/partnership/nonprofit/other), organization_physical_address: map{administrative_area!: str, city!: str, country!: str, extended_address: str, postal_code!: str, street_address!: str}, organization_type: str(commercial/government/non_profit), website: str}
@optional {corporate_registration_number: str, customer_reference: str, dun_bradstreet_number: str, primary_business_domain_sic_code: str, professional_license_number: str, role_type: str(enterprise/bpo)=enterprise}
@returns(201) {data: map{billing_address: map{administrative_area: str, city: str, country: str, extended_address: str?, postal_code: str, street_address: str}, billing_contact: map{email: str(email), first_name: str, last_name: str, phone_number: str}, corporate_registration_number: str?, country_code: str, created_at: str(date-time), customer_reference: str?, doing_business_as: str, dun_bradstreet_number: str?, fein: str?, id: str(uuid), industry: str?, legal_name: str, number_of_employees: str?, organization_contact: map{email: str(email), first_name: str, job_title: str, last_name: str, phone: str}, organization_legal_type: str?, organization_physical_address: map{administrative_area: str, city: str, country: str, extended_address: str?, postal_code: str, street_address: str}, organization_type: str, primary_business_domain_sic_code: str?, professional_license_number: str?, role_type: str, updated_at: str(date-time), website: str?}}
@errors {400, 401, 422}

@endpoint DELETE /enterprises/{enterprise_id}
@required {enterprise_id: str(uuid)}
@returns(204)
@errors {401, 404}

@endpoint GET /enterprises/{enterprise_id}
@required {enterprise_id: str(uuid)}
@returns(200) {data: map{billing_address: map{administrative_area: str, city: str, country: str, extended_address: str?, postal_code: str, street_address: str}, billing_contact: map{email: str(email), first_name: str, last_name: str, phone_number: str}, corporate_registration_number: str?, country_code: str, created_at: str(date-time), customer_reference: str?, doing_business_as: str, dun_bradstreet_number: str?, fein: str?, id: str(uuid), industry: str?, legal_name: str, number_of_employees: str?, organization_contact: map{email: str(email), first_name: str, job_title: str, last_name: str, phone: str}, organization_legal_type: str?, organization_physical_address: map{administrative_area: str, city: str, country: str, extended_address: str?, postal_code: str, street_address: str}, organization_type: str, primary_business_domain_sic_code: str?, professional_license_number: str?, role_type: str, updated_at: str(date-time), website: str?}}
@errors {401, 404}

@endpoint PUT /enterprises/{enterprise_id}
@required {enterprise_id: str(uuid)}
@optional {billing_address: map{administrative_area!: str, city!: str, country!: str, extended_address: str, postal_code!: str, street_address!: str}, billing_contact: map{email!: str(email), first_name!: str, last_name!: str, phone_number!: str}, corporate_registration_number: str, customer_reference: str, doing_business_as: str, dun_bradstreet_number: str, fein: str, industry: str, legal_name: str, number_of_employees: str(1-10/11-50/51-200/201-500/501-2000/2001-10000/10001+), organization_contact: map{email!: str(email), first_name!: str, job_title!: str, last_name!: str, phone!: str}, organization_legal_type: str(corporation/llc/partnership/nonprofit/other), organization_physical_address: map{administrative_area!: str, city!: str, country!: str, extended_address: str, postal_code!: str, street_address!: str}, primary_business_domain_sic_code: str, professional_license_number: str, website: str}
@returns(200) {data: map{billing_address: map{administrative_area: str, city: str, country: str, extended_address: str?, postal_code: str, street_address: str}, billing_contact: map{email: str(email), first_name: str, last_name: str, phone_number: str}, corporate_registration_number: str?, country_code: str, created_at: str(date-time), customer_reference: str?, doing_business_as: str, dun_bradstreet_number: str?, fein: str?, id: str(uuid), industry: str?, legal_name: str, number_of_employees: str?, organization_contact: map{email: str(email), first_name: str, job_title: str, last_name: str, phone: str}, organization_legal_type: str?, organization_physical_address: map{administrative_area: str, city: str, country: str, extended_address: str?, postal_code: str, street_address: str}, organization_type: str, primary_business_domain_sic_code: str?, professional_license_number: str?, role_type: str, updated_at: str(date-time), website: str?}}
@errors {400, 401, 404}

@endpoint DELETE /enterprises/{enterprise_id}/reputation
@required {enterprise_id: str(uuid)}
@returns(204)
@errors {400, 401, 404}

@endpoint GET /enterprises/{enterprise_id}/reputation
@required {enterprise_id: str(uuid)}
@returns(200) {data: map{check_frequency: str, created_at: str(date-time), enterprise_id: str(uuid), loa_document_id: str?, rejection_reasons: [str]?, status: str, updated_at: str(date-time)}}
@errors {401, 404}

@endpoint POST /enterprises/{enterprise_id}/reputation
@required {enterprise_id: str(uuid), loa_document_id: str}
@optional {check_frequency: str(business_daily/daily/weekly/biweekly/monthly/never)=business_daily}
@returns(201) {data: map{check_frequency: str, created_at: str(date-time), enterprise_id: str(uuid), loa_document_id: str?, rejection_reasons: [str]?, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 409}

@endpoint PATCH /enterprises/{enterprise_id}/reputation/frequency
@required {enterprise_id: str(uuid), check_frequency: str(business_daily/daily/weekly/biweekly/monthly/never)}
@returns(200) {data: map{check_frequency: str, created_at: str(date-time), enterprise_id: str(uuid), loa_document_id: str?, rejection_reasons: [str]?, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404}

@endpoint GET /enterprises/{enterprise_id}/reputation/numbers
@required {enterprise_id: str(uuid)}
@optional {page[number]: int=1, page[size]: int=10, phone_number: str}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404}

@endpoint POST /enterprises/{enterprise_id}/reputation/numbers
@required {enterprise_id: str(uuid), phone_numbers: [str]}
@returns(201) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint DELETE /enterprises/{enterprise_id}/reputation/numbers/{phone_number}
@required {enterprise_id: str(uuid), phone_number: str}
@returns(204)
@errors {401, 404}

@endpoint GET /enterprises/{enterprise_id}/reputation/numbers/{phone_number}
@required {enterprise_id: str(uuid), phone_number: str}
@optional {fresh: bool=false}
@returns(200) {data: any}
@errors {401, 403, 404}

@endgroup

@group external_connections
@endpoint GET /external_connections
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint POST /external_connections
@required {external_sip_connection: str=zoom, outbound: map{channel_limit: int, outbound_voice_profile_id: str}}
@optional {active: bool=true, inbound: map{channel_limit: int, outbound_voice_profile_id!: str}, tags: [str], webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(201) {data: map{active: bool, created_at: str, credential_active: bool, external_sip_connection: str, id: str, inbound: map{channel_limit: int}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {422}

@endpoint GET /external_connections/log_messages
@optional {filter: map, page: map}
@returns(200) {log_messages: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint DELETE /external_connections/log_messages/{id}
@required {id: str}
@returns(200) {success: bool}
@errors {401, 404}

@endpoint GET /external_connections/log_messages/{id}
@required {id: str}
@returns(200) {log_messages: [map]}
@errors {401, 404}

@endpoint DELETE /external_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, created_at: str, credential_active: bool, external_sip_connection: str, id: str, inbound: map{channel_limit: int}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 404, 422}

@endpoint GET /external_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, created_at: str, credential_active: bool, external_sip_connection: str, id: str, inbound: map{channel_limit: int}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 404, 422}

@endpoint PATCH /external_connections/{id}
@required {id: str, outbound: map{channel_limit: int, outbound_voice_profile_id!: str}}
@optional {active: bool=true, inbound: map{channel_limit: int}, tags: [str], webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(200) {data: map{active: bool, created_at: str, credential_active: bool, external_sip_connection: str, id: str, inbound: map{channel_limit: int}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 404, 422}

@endpoint GET /external_connections/{id}/civic_addresses
@required {id: str}
@optional {filter: map}
@returns(200) {data: [map]}
@errors {401, 404, 500, 502}

@endpoint GET /external_connections/{id}/civic_addresses/{address_id}
@required {id: str, address_id: str(uuid)}
@returns(200) {data: map{city_or_town: str, city_or_town_alias: str, company_name: str, country: str, country_or_district: str, default_location_id: str(uuid), description: str, house_number: str, house_number_suffix: str, id: str(uuid), locations: [map], postal_or_zip_code: str, record_type: str, state_or_province: str, street_name: str, street_suffix: str}}
@errors {401, 404, 500, 502}

@endpoint PATCH /external_connections/{id}/locations/{location_id}
@required {id: str(uuid), location_id: str(uuid), static_emergency_address_id: str(uuid)}
@returns(200) {data: map{accepted_address_suggestions: bool, location_id: str(uuid), static_emergency_address_id: str(uuid)}}
@returns(202) {data: map{accepted_address_suggestions: bool, location_id: str(uuid), static_emergency_address_id: str(uuid)}}
@errors {404, 422}

@endpoint GET /external_connections/{id}/phone_numbers
@required {id: str}
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint GET /external_connections/{id}/phone_numbers/{phone_number_id}
@required {id: str, phone_number_id: str}
@returns(200) {data: map{acquired_capabilities: [str], civic_address_id: str(uuid), displayed_country_code: str, location_id: str(uuid), number_id: str, telephone_number: str, ticket_id: str(uuid)}}
@errors {401, 404}

@endpoint PATCH /external_connections/{id}/phone_numbers/{phone_number_id}
@required {id: str, phone_number_id: str}
@optional {location_id: str(uuid)}
@returns(200) {data: map{acquired_capabilities: [str], civic_address_id: str(uuid), displayed_country_code: str, location_id: str(uuid), number_id: str, telephone_number: str, ticket_id: str(uuid)}}
@errors {401, 404, 422}

@endpoint GET /external_connections/{id}/releases
@required {id: str}
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint GET /external_connections/{id}/releases/{release_id}
@required {id: str, release_id: str(uuid)}
@returns(200) {data: map{created_at: str, error_message: str, status: str, telephone_numbers: [map], tenant_id: str(uuid), ticket_id: str(uuid)}}
@errors {401, 404}

@endpoint GET /external_connections/{id}/uploads
@required {id: str}
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint POST /external_connections/{id}/uploads
@required {id: str, number_ids: [str]}
@optional {additional_usages: [str], civic_address_id: str(uuid), location_id: str(uuid), usage: str(calling_user_assignment/first_party_app_assignment)}
@returns(202) {success: bool, ticket_id: str(uuid)}
@errors {401, 404, 413, 422, 504}

@endpoint POST /external_connections/{id}/uploads/refresh
@required {id: str}
@returns(200) {success: bool}
@errors {401, 404, 409}

@endpoint GET /external_connections/{id}/uploads/status
@required {id: str}
@returns(200) {data: map{pending_numbers_count: int, pending_orders_count: int}}
@errors {401, 404}

@endpoint GET /external_connections/{id}/uploads/{ticket_id}
@required {id: str, ticket_id: str(uuid)}
@returns(200) {data: map{available_usages: [str], error_code: str, error_message: str, location_id: str(uuid), status: str, tenant_id: str(uuid), ticket_id: str(uuid), tn_upload_entries: [map]}}
@errors {401, 404}

@endpoint POST /external_connections/{id}/uploads/{ticket_id}/retry
@required {id: str, ticket_id: str(uuid)}
@returns(202) {data: map{available_usages: [str], error_code: str, error_message: str, location_id: str(uuid), status: str, tenant_id: str(uuid), ticket_id: str(uuid), tn_upload_entries: [map]}}
@errors {401, 404, 409, 422}

@endgroup

@group fax_applications
@endpoint GET /fax_applications
@optional {page: map, filter: map, sort: str(created_at/application_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint POST /fax_applications
@required {application_name: str, webhook_event_url: str(uri)}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, inbound: map{channel_limit: int, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, tags: [str]=, webhook_event_failover_url: str(uri)=, webhook_timeout_secs: int=null}
@returns(201) {data: map{active: bool, anchorsite_override: str, application_name: str, created_at: str, id: str, inbound: map{channel_limit: int, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 422}

@endpoint DELETE /fax_applications/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, application_name: str, created_at: str, id: str, inbound: map{channel_limit: int, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {400, 401, 403, 404}

@endpoint GET /fax_applications/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, application_name: str, created_at: str, id: str, inbound: map{channel_limit: int, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {400, 401, 403, 404}

@endpoint PATCH /fax_applications/{id}
@required {id: str, application_name: str, webhook_event_url: str(uri)}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, fax_email_recipient: str=null, inbound: map{channel_limit: int, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, tags: [str], webhook_event_failover_url: str(uri)=, webhook_timeout_secs: int=null}
@returns(200) {data: map{active: bool, anchorsite_override: str, application_name: str, created_at: str, id: str, inbound: map{channel_limit: int, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, tags: [str], updated_at: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endgroup

@group faxes
@endpoint GET /faxes
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {404}

@endpoint POST /faxes
@required {connection_id: str, from: str, to: str}
@optional {black_threshold: int=95, client_state: str, from_display_name: str, media_name: str, media_url: str, monochrome: bool=false, preview_format: str(pdf/tiff)=tiff, quality: str(normal/high/very_high/ultra_light/ultra_dark)=high, store_media: bool=false, store_preview: bool=false, t38_enabled: bool=true, webhook_url: str}
@returns(202) {data: map{client_state: str, connection_id: str, created_at: str(date-time), direction: str, from: str, from_display_name: str, id: str(uuid), media_name: str, media_url: str, preview_url: str, quality: str, record_type: str, status: str, store_media: bool, stored_media_url: str, to: str, updated_at: str(date-time), webhook_failover_url: str, webhook_url: str}}
@errors {422}

@endpoint DELETE /faxes/{id}
@required {id: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /faxes/{id}
@required {id: str(uuid)}
@returns(200) {data: map{client_state: str, connection_id: str, created_at: str(date-time), direction: str, from: str, from_display_name: str, id: str(uuid), media_name: str, media_url: str, preview_url: str, quality: str, record_type: str, status: str, store_media: bool, stored_media_url: str, to: str, updated_at: str(date-time), webhook_failover_url: str, webhook_url: str}}
@errors {404}

@endpoint POST /faxes/{id}/actions/cancel
@required {id: str(uuid)}
@returns(202) {data: map{result: str}}
@errors {404, 422}

@endpoint POST /faxes/{id}/actions/refresh
@required {id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {404}

@endgroup

@group fqdn_connections
@endpoint GET /fqdn_connections
@optional {filter: map, page: map, sort: str(created_at/connection_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403, 404}

@endpoint POST /fqdn_connections
@required {connection_name: str}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, android_push_credential_id: str=null, call_cost_in_webhooks: bool=false, default_on_hold_comfort_noise_enabled: bool=true, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, encode_contact_header_enabled: bool=false, encrypted_media: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_fqdn_id: str, default_routing_method: str, default_secondary_fqdn_id: str, default_tertiary_fqdn_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str=null, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, microsoft_teams_sbc: bool=false, noise_suppression: str(inbound/outbound/both/disabled), noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool=false, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool, channel_limit: int, encrypted_media: str, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str(UDP/TCP/TLS)=UDP, webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(201) {data: map{active: bool, adjust_dtmf_timestamp: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_enabled: bool, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, ignore_dtmf_duration: bool, ignore_mark_bit: bool, inbound: map{ani_number_format: str, channel_limit: int?, codecs: [str], default_primary_fqdn_id: str?, default_routing_method: str?, default_secondary_fqdn_id: str?, default_tertiary_fqdn_id: str?, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str?, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, microsoft_teams_sbc: bool, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, encrypted_media: str?, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, rtp_pass_codecs_on_stream_change: bool, send_normalized_timestamps: bool, tags: [str], third_party_control_enabled: bool, transport_protocol: str, txt_name: str, txt_ttl: int, txt_value: str, updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endpoint DELETE /fqdn_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, adjust_dtmf_timestamp: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_enabled: bool, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, ignore_dtmf_duration: bool, ignore_mark_bit: bool, inbound: map{ani_number_format: str, channel_limit: int?, codecs: [str], default_primary_fqdn_id: str?, default_routing_method: str?, default_secondary_fqdn_id: str?, default_tertiary_fqdn_id: str?, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str?, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, microsoft_teams_sbc: bool, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, encrypted_media: str?, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, rtp_pass_codecs_on_stream_change: bool, send_normalized_timestamps: bool, tags: [str], third_party_control_enabled: bool, transport_protocol: str, txt_name: str, txt_ttl: int, txt_value: str, updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endpoint GET /fqdn_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, adjust_dtmf_timestamp: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_enabled: bool, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, ignore_dtmf_duration: bool, ignore_mark_bit: bool, inbound: map{ani_number_format: str, channel_limit: int?, codecs: [str], default_primary_fqdn_id: str?, default_routing_method: str?, default_secondary_fqdn_id: str?, default_tertiary_fqdn_id: str?, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str?, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, microsoft_teams_sbc: bool, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, encrypted_media: str?, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, rtp_pass_codecs_on_stream_change: bool, send_normalized_timestamps: bool, tags: [str], third_party_control_enabled: bool, transport_protocol: str, txt_name: str, txt_ttl: int, txt_value: str, updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endpoint PATCH /fqdn_connections/{id}
@required {id: str}
@optional {active: bool, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, android_push_credential_id: str=null, call_cost_in_webhooks: bool=false, connection_name: str, default_on_hold_comfort_noise_enabled: bool=true, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, encode_contact_header_enabled: bool=false, encrypted_media: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_fqdn_id: str, default_routing_method: str, default_secondary_fqdn_id: str, default_tertiary_fqdn_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str=null, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str(inbound/outbound/both/disabled), noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool=false, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool, channel_limit: int, encrypted_media: str, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str(UDP/TCP/TLS)=UDP, webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(200) {data: map{active: bool, adjust_dtmf_timestamp: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_enabled: bool, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, ignore_dtmf_duration: bool, ignore_mark_bit: bool, inbound: map{ani_number_format: str, channel_limit: int?, codecs: [str], default_primary_fqdn_id: str?, default_routing_method: str?, default_secondary_fqdn_id: str?, default_tertiary_fqdn_id: str?, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str?, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, microsoft_teams_sbc: bool, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, encrypted_media: str?, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, password: str, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, rtp_pass_codecs_on_stream_change: bool, send_normalized_timestamps: bool, tags: [str], third_party_control_enabled: bool, transport_protocol: str, txt_name: str, txt_ttl: int, txt_value: str, updated_at: str, user_name: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endgroup

@group fqdns
@endpoint GET /fqdns
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401}

@endpoint POST /fqdns
@required {connection_id: str, dns_record_type: str, fqdn: str}
@optional {port: int=5060}
@returns(201) {data: map{connection_id: str, created_at: str, dns_record_type: str, fqdn: str, id: str, port: int, record_type: str, updated_at: str}}
@errors {401, 403, 422}

@endpoint DELETE /fqdns/{id}
@required {id: str}
@returns(200) {data: map{connection_id: str, created_at: str, dns_record_type: str, fqdn: str, id: str, port: int, record_type: str, updated_at: str}}
@errors {400, 401, 403, 404}

@endpoint GET /fqdns/{id}
@required {id: str}
@returns(200) {data: map{connection_id: str, created_at: str, dns_record_type: str, fqdn: str, id: str, port: int, record_type: str, updated_at: str}}
@errors {400, 401, 403, 404}

@endpoint PATCH /fqdns/{id}
@required {id: str}
@optional {connection_id: str, dns_record_type: str, fqdn: str, port: int=5060}
@returns(200) {data: map{connection_id: str, created_at: str, dns_record_type: str, fqdn: str, id: str, port: int, record_type: str, updated_at: str}}
@errors {401, 403, 404, 422}

@endgroup

@group global_ip_allowed_ports
@endpoint GET /global_ip_allowed_ports
@returns(200) {data: [any]}
@errors {422}

@endgroup

@group global_ip_assignment_health
@endpoint GET /global_ip_assignment_health
@optional {filter: map}
@returns(200) {data: [map]}
@errors {422}

@endgroup

@group global_ip_assignments
@endpoint GET /global_ip_assignments
@optional {page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /global_ip_assignments
@returns(202) {data: any}
@errors {422}

@endpoint DELETE /global_ip_assignments/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /global_ip_assignments/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint PATCH /global_ip_assignments/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endgroup

@group global_ip_assignments_usage
@endpoint GET /global_ip_assignments_usage
@optional {filter: map}
@returns(200) {data: [map]}
@errors {422}

@endgroup

@group global_ip_health_check_types
@endpoint GET /global_ip_health_check_types
@returns(200) {data: [any]}
@errors {422}

@endgroup

@group global_ip_health_checks
@endpoint GET /global_ip_health_checks
@optional {page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /global_ip_health_checks
@returns(202) {data: any}
@errors {422}

@endpoint DELETE /global_ip_health_checks/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /global_ip_health_checks/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endgroup

@group global_ip_latency
@endpoint GET /global_ip_latency
@optional {filter: map}
@returns(200) {data: [map]}
@errors {422}

@endgroup

@group global_ip_protocols
@endpoint GET /global_ip_protocols
@returns(200) {data: [any]}
@errors {422}

@endgroup

@group global_ip_usage
@endpoint GET /global_ip_usage
@optional {filter: map}
@returns(200) {data: [map]}
@errors {422}

@endgroup

@group global_ips
@endpoint GET /global_ips
@optional {page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /global_ips
@returns(202) {data: any}
@errors {422}

@endpoint DELETE /global_ips/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /global_ips/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endgroup

@group inbound_channels
@endpoint GET /inbound_channels
@returns(200) {data: map{channels: int, record_type: str}}
@errors {401, 404, 422}

@endpoint PATCH /inbound_channels
@required {channels: int}
@returns(200) {data: map{channels: int, record_type: str}}
@errors {400, 401, 404}

@endgroup

@group inexplicit_number_orders
@endpoint GET /inexplicit_number_orders
@optional {page_number: int=1, page_size: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /inexplicit_number_orders
@required {ordering_groups: [map{administrative_area: str, count_requested!: str, country_iso!: str, exclude_held_numbers: bool, features: [str], locality: str, national_destination_code: str, phone_number: map, phone_number_type!: str, quickship: bool, strategy: str}]}
@optional {billing_group_id: str, connection_id: str, customer_reference: str, messaging_profile_id: str}
@returns(200) {data: map{billing_group_id: str, connection_id: str, created_at: str(date-time), customer_reference: str, id: str, messaging_profile_id: str, ordering_groups: [map], updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /inexplicit_number_orders/{id}
@required {id: str(uuid)}
@returns(200) {data: map{billing_group_id: str, connection_id: str, created_at: str(date-time), customer_reference: str, id: str, messaging_profile_id: str, ordering_groups: [map], updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group integration_secrets
@endpoint GET /integration_secrets
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400}

@endpoint POST /integration_secrets
@required {identifier: str, type: str(bearer/basic)}
@optional {password: str, token: str, username: str}
@returns(201) {data: map{created_at: str(date-time), id: str, identifier: str, record_type: str, updated_at: str(date-time)}}
@errors {422}

@endpoint DELETE /integration_secrets/{id}
@required {id: str}
@returns(204)
@errors {404}

@endgroup

@group inventory_coverage
@endpoint GET /inventory_coverage
@optional {filter: map}
@returns(200) {data: [map], meta: map{total_results: int}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group invoices
@endpoint GET /invoices
@optional {sort: str(period_start/-period_start), page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {403}

@endpoint GET /invoices/{id}
@required {id: str(uuid)}
@optional {action: str(json/link)}
@returns(200) {data: map{download_url: str(uri), file_id: str(uuid), invoice_id: str(uuid), paid: bool, period_end: str(date), period_start: str(date), url: str(uri)}}
@errors {400, 403, 404}

@endgroup

@group ip_connections
@endpoint GET /ip_connections
@optional {filter: map, page: map, sort: str(created_at/connection_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint POST /ip_connections
@optional {active: bool, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, android_push_credential_id: str=null, call_cost_in_webhooks: bool=false, connection_name: str, default_on_hold_comfort_noise_enabled: bool=true, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, encode_contact_header_enabled: bool=false, encrypted_media: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_routing_method: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str=null, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str(inbound/outbound/both/disabled), noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool=false, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str}, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str(UDP/TCP/TLS)=UDP, webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(201) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_ip_id: str, default_routing_method: str, default_secondary_ip_id: str, default_tertiary_ip_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str}, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str, updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 422}

@endpoint DELETE /ip_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_ip_id: str, default_routing_method: str, default_secondary_ip_id: str, default_tertiary_ip_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str}, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str, updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {400, 401, 403, 404}

@endpoint GET /ip_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_ip_id: str, default_routing_method: str, default_secondary_ip_id: str, default_tertiary_ip_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str}, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str, updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {400, 401, 403, 404}

@endpoint PATCH /ip_connections/{id}
@required {id: str}
@optional {active: bool, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, android_push_credential_id: str=null, call_cost_in_webhooks: bool=false, connection_name: str, default_on_hold_comfort_noise_enabled: bool=true, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, encode_contact_header_enabled: bool=false, encrypted_media: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_ip_id: str, default_routing_method: str, default_secondary_ip_id: str, default_tertiary_ip_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str=null, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str(inbound/outbound/both/disabled), noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool=false, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str}, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str(UDP/TCP/TLS)=UDP, webhook_api_version: str(1/2)=1, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(200) {data: map{active: bool, anchorsite_override: str, android_push_credential_id: str?, call_cost_in_webhooks: bool, connection_name: str, created_at: str, default_on_hold_comfort_noise_enabled: bool, dtmf_type: str, encode_contact_header_enabled: bool, encrypted_media: str?, id: str, inbound: map{ani_number_format: str, channel_limit: int, codecs: [str], default_primary_ip_id: str, default_routing_method: str, default_secondary_ip_id: str, default_tertiary_ip_id: str, dnis_number_format: str, generate_ringback_tone: bool, isup_headers_enabled: bool, prack_enabled: bool, shaken_stir_enabled: bool, sip_compact_headers_enabled: bool, sip_region: str, sip_subdomain: str, sip_subdomain_receive_settings: str, timeout_1xx_secs: int, timeout_2xx_secs: int}, ios_push_credential_id: str?, jitter_buffer: map{enable_jitter_buffer: bool, jitterbuffer_msec_max: int, jitterbuffer_msec_min: int}, noise_suppression: str, noise_suppression_details: map{attenuation_limit: int, engine: str}, onnet_t38_passthrough_enabled: bool, outbound: map{ani_override: str, ani_override_type: str, call_parking_enabled: bool?, channel_limit: int, generate_ringback_tone: bool, instant_ringback_enabled: bool, ip_authentication_method: str, ip_authentication_token: str, localization: str, outbound_voice_profile_id: str, t38_reinvite_source: str, tech_prefix: str}, record_type: str, rtcp_settings: map{capture_enabled: bool, port: str, report_frequency_secs: int}, tags: [str], transport_protocol: str, updated_at: str, webhook_api_version: str, webhook_event_failover_url: str(uri)?, webhook_event_url: str(uri), webhook_timeout_secs: int?}}
@errors {401, 403, 404, 422}

@endgroup

@group ips
@endpoint GET /ips
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint POST /ips
@required {ip_address: str}
@optional {connection_id: str, port: int=5060}
@returns(201) {data: map{connection_id: str, created_at: str, id: str, ip_address: str, port: int, record_type: str, updated_at: str}}
@errors {401, 403, 422}

@endpoint DELETE /ips/{id}
@required {id: str(uuid)}
@returns(200) {data: map{connection_id: str, created_at: str, id: str, ip_address: str, port: int, record_type: str, updated_at: str}}
@errors {400, 401, 403, 404}

@endpoint GET /ips/{id}
@required {id: str(uuid)}
@returns(200) {data: map{connection_id: str, created_at: str, id: str, ip_address: str, port: int, record_type: str, updated_at: str}}
@errors {400, 401, 403, 404}

@endpoint PATCH /ips/{id}
@required {id: str(uuid), ip_address: str}
@optional {connection_id: str, port: int=5060}
@returns(200) {data: map{connection_id: str, created_at: str, id: str, ip_address: str, port: int, record_type: str, updated_at: str}}
@errors {401, 403, 404, 422}

@endgroup

@group ledger_billing_group_reports
@endpoint POST /ledger_billing_group_reports
@optional {month: int, year: int}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), organization_id: str(uuid), record_type: str, report_url: str(uri)?, status: str, updated_at: str(date-time)}}
@errors {401, 500}

@endpoint GET /ledger_billing_group_reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), organization_id: str(uuid), record_type: str, report_url: str(uri)?, status: str, updated_at: str(date-time)}}
@errors {401, 500}

@endgroup

@group legacy
@endpoint GET /legacy/reporting/batch_detail_records/messaging
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {401, 403, 500}

@endpoint POST /legacy/reporting/batch_detail_records/messaging
@required {end_time: str(date-time), start_time: str(date-time)}
@optional {connections: [int(int64)], directions: [int(int32)], filters: [map{billing_group: str, cld: str, cld_filter: str, cli: str, cli_filter: str, filter_type: str, tags_list: str}], include_message_body: bool, managed_accounts: [str(uuid)], profiles: [str(uuid)], record_types: [int(int32)], report_name: str, select_all_managed_accounts: bool, timezone: str}
@returns(200) {data: map{connections: [int(int64)], created_at: str(date-time), directions: [str], end_date: str(date-time), filters: [map], id: str(uuid), profiles: [str(uuid)], record_type: str, record_types: [str], report_name: str, report_url: str, start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {400, 401, 403, 500}

@endpoint DELETE /legacy/reporting/batch_detail_records/messaging/{id}
@required {id: str(uuid)}
@returns(200) {data: map{connections: [int(int64)], created_at: str(date-time), directions: [str], end_date: str(date-time), filters: [map], id: str(uuid), profiles: [str(uuid)], record_type: str, record_types: [str], report_name: str, report_url: str, start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/batch_detail_records/messaging/{id}
@required {id: str(uuid)}
@returns(200) {data: map{connections: [int(int64)], created_at: str(date-time), directions: [str], end_date: str(date-time), filters: [map], id: str(uuid), profiles: [str(uuid)], record_type: str, record_types: [str], report_name: str, report_url: str, start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/batch_detail_records/speech_to_text
@returns(200) {data: [map]}
@errors {401, 403, 500}

@endpoint POST /legacy/reporting/batch_detail_records/speech_to_text
@required {end_date: str(date-time), start_date: str(date-time)}
@returns(200) {data: map{created_at: str(date-time), download_link: str, end_date: str(date-time), id: str, record_type: str, start_date: str(date-time), status: str}}
@errors {400, 401, 403, 500}

@endpoint DELETE /legacy/reporting/batch_detail_records/speech_to_text/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), download_link: str, end_date: str(date-time), id: str, record_type: str, start_date: str(date-time), status: str}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/batch_detail_records/speech_to_text/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), download_link: str, end_date: str(date-time), id: str, record_type: str, start_date: str(date-time), status: str}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/batch_detail_records/voice
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {401, 403, 500}

@endpoint POST /legacy/reporting/batch_detail_records/voice
@required {end_time: str(date-time), start_time: str(date-time)}
@optional {call_types: [int(int32)], connections: [int(int64)], fields: [str], filters: [map{billing_group: str, cld: str, cld_filter: str, cli: str, cli_filter: str, filter_type: str, tags_list: str}], include_all_metadata: bool, managed_accounts: [str(uuid)], record_types: [int(int32)], report_name: str, select_all_managed_accounts: bool, source: str, timezone: str}
@returns(200) {data: map{call_types: [int(int32)], connections: [int(int64)], created_at: str, end_time: str, filters: [map], id: str, managed_accounts: [str(uuid)], record_type: str, record_types: [int(int32)], report_name: str, report_url: str, retry: int(int32), source: str, start_time: str, status: int(int32), timezone: str, updated_at: str}}
@errors {400, 401, 403, 500}

@endpoint GET /legacy/reporting/batch_detail_records/voice/fields
@returns(200) {Billing: [str], Interaction Data: [str], Number Information: [str], Telephony Data: [str]}
@errors {401, 403, 500}

@endpoint DELETE /legacy/reporting/batch_detail_records/voice/{id}
@required {id: str(uuid)}
@returns(200) {data: map{call_types: [int(int32)], connections: [int(int64)], created_at: str, end_time: str, filters: [map], id: str, managed_accounts: [str(uuid)], record_type: str, record_types: [int(int32)], report_name: str, report_url: str, retry: int(int32), source: str, start_time: str, status: int(int32), timezone: str, updated_at: str}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/batch_detail_records/voice/{id}
@required {id: str(uuid)}
@returns(200) {data: map{call_types: [int(int32)], connections: [int(int64)], created_at: str, end_time: str, filters: [map], id: str, managed_accounts: [str(uuid)], record_type: str, record_types: [int(int32)], report_name: str, report_url: str, retry: int(int32), source: str, start_time: str, status: int(int32), timezone: str, updated_at: str}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/usage_reports/messaging
@optional {page: int(int32)=1, per_page: int(int32)=20}
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400}

@endpoint POST /legacy/reporting/usage_reports/messaging
@returns(200) {data: map{aggregation_type: int(int32), connections: [str], created_at: str(date-time), end_time: str(date-time), id: str(uuid), profiles: [str(uuid)], record_type: str, report_url: str, result: map, start_time: str(date-time), status: int(int32), updated_at: str(date-time)}}
@errors {400, 401, 403, 500}

@endpoint DELETE /legacy/reporting/usage_reports/messaging/{id}
@required {id: str(uuid)}
@returns(200) {data: map{aggregation_type: int(int32), connections: [str], created_at: str(date-time), end_time: str(date-time), id: str(uuid), profiles: [str(uuid)], record_type: str, report_url: str, result: map, start_time: str(date-time), status: int(int32), updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/usage_reports/messaging/{id}
@required {id: str(uuid)}
@returns(200) {data: map{aggregation_type: int(int32), connections: [str], created_at: str(date-time), end_time: str(date-time), id: str(uuid), profiles: [str(uuid)], record_type: str, report_url: str, result: map, start_time: str(date-time), status: int(int32), updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/usage_reports/number_lookup
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400, 401, 403, 500}

@endpoint POST /legacy/reporting/usage_reports/number_lookup
@returns(200) {data: map{aggregation_type: str, created_at: str(date-time), end_date: str(date), id: str(uuid), managed_accounts: [str], record_type: str, report_url: str, result: [map], start_date: str(date), status: str, updated_at: str(date-time)}}
@errors {400, 401, 403, 422, 500}

@endpoint DELETE /legacy/reporting/usage_reports/number_lookup/{id}
@required {id: str}
@returns(200)
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/usage_reports/number_lookup/{id}
@required {id: str}
@returns(200) {data: map{aggregation_type: str, created_at: str(date-time), end_date: str(date), id: str(uuid), managed_accounts: [str], record_type: str, report_url: str, result: [map], start_date: str(date), status: str, updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/usage_reports/speech_to_text
@optional {start_date: str(date-time), end_date: str(date-time)}
@returns(200) {data: map}
@errors {400}

@endpoint GET /legacy/reporting/usage_reports/voice
@optional {page: int(int32)=1, per_page: int(int32)=20}
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400}

@endpoint POST /legacy/reporting/usage_reports/voice
@returns(200) {data: map{aggregation_type: int(int32), connections: [str], created_at: str(date-time), end_time: str(date-time), id: str(uuid), product_breakdown: int(int32), record_type: str, report_url: str, result: map, start_time: str(date-time), status: int(int32), updated_at: str(date-time)}}
@errors {400, 401, 403, 500}

@endpoint DELETE /legacy/reporting/usage_reports/voice/{id}
@required {id: str(uuid)}
@returns(200) {data: map{aggregation_type: int(int32), connections: [str], created_at: str(date-time), end_time: str(date-time), id: str(uuid), product_breakdown: int(int32), record_type: str, report_url: str, result: map, start_time: str(date-time), status: int(int32), updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endpoint GET /legacy/reporting/usage_reports/voice/{id}
@required {id: str(uuid)}
@returns(200) {data: map{aggregation_type: int(int32), connections: [str], created_at: str(date-time), end_time: str(date-time), id: str(uuid), product_breakdown: int(int32), record_type: str, report_url: str, result: map, start_time: str(date-time), status: int(int32), updated_at: str(date-time)}}
@errors {401, 403, 404, 500}

@endgroup

@group list
@endpoint GET /list
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint GET /list/{channel_zone_id}
@required {channel_zone_id: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endgroup

@group managed_accounts
@endpoint GET /managed_accounts
@optional {filter: map, page: map, sort: str(created_at/email)=created_at, include_cancelled_accounts: bool=false}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /managed_accounts
@required {business_name: str}
@optional {email: str, managed_account_allow_custom_pricing: bool, password: str, rollup_billing: bool}
@returns(200) {data: map{api_key: str, api_token: str, api_user: str, balance: map{available_credit: str, balance: str, credit_limit: str, currency: str, record_type: str}, created_at: str, email: str(email), id: str(uuid), managed_account_allow_custom_pricing: bool, manager_account_id: str, organization_name: str, record_type: str, rollup_billing: bool, updated_at: str}}
@errors {401, 422}

@endpoint GET /managed_accounts/allocatable_global_outbound_channels
@returns(200) {data: map{allocatable_global_outbound_channels: int, managed_account_allow_custom_pricing: bool, record_type: str, total_global_channels_allocated: int}}
@errors {401, 403}

@endpoint GET /managed_accounts/{id}
@required {id: str}
@returns(200) {data: map{api_key: str, api_token: str, api_user: str, balance: map{available_credit: str, balance: str, credit_limit: str, currency: str, record_type: str}, created_at: str, email: str(email), id: str(uuid), managed_account_allow_custom_pricing: bool, manager_account_id: str, organization_name: str, record_type: str, rollup_billing: bool, updated_at: str}}
@errors {401, 404}

@endpoint PATCH /managed_accounts/{id}
@required {id: str}
@optional {managed_account_allow_custom_pricing: bool}
@returns(200) {data: map{api_key: str, api_token: str, api_user: str, balance: map{available_credit: str, balance: str, credit_limit: str, currency: str, record_type: str}, created_at: str, email: str(email), id: str(uuid), managed_account_allow_custom_pricing: bool, manager_account_id: str, organization_name: str, record_type: str, rollup_billing: bool, updated_at: str}}
@errors {401, 404, 422}

@endpoint POST /managed_accounts/{id}/actions/disable
@required {id: str}
@returns(200) {data: map{api_key: str, api_token: str, api_user: str, balance: map{available_credit: str, balance: str, credit_limit: str, currency: str, record_type: str}, created_at: str, email: str(email), id: str(uuid), managed_account_allow_custom_pricing: bool, manager_account_id: str, organization_name: str, record_type: str, rollup_billing: bool, updated_at: str}}
@errors {401, 404, 422}

@endpoint POST /managed_accounts/{id}/actions/enable
@required {id: str}
@optional {reenable_all_connections: bool=false}
@returns(200) {data: map{api_key: str, api_token: str, api_user: str, balance: map{available_credit: str, balance: str, credit_limit: str, currency: str, record_type: str}, created_at: str, email: str(email), id: str(uuid), managed_account_allow_custom_pricing: bool, manager_account_id: str, organization_name: str, record_type: str, rollup_billing: bool, updated_at: str}}
@errors {401, 404, 422}

@endpoint PATCH /managed_accounts/{id}/update_global_channel_limit
@required {id: str}
@optional {channel_limit: int}
@returns(200) {data: map{channel_limit: int, email: str, id: str, manager_account_id: str, record_type: str}}
@errors {401, 404, 422}

@endgroup

@group media
@endpoint GET /media
@optional {filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /media
@required {media_url: str}
@optional {media_name: str, ttl_secs: int}
@returns(201) {data: map{content_type: str, created_at: str, expires_at: str, media_name: str, updated_at: str}}
@errors {401, 422}

@endpoint DELETE /media/{media_name}
@required {media_name: str}
@returns(204)
@errors {401, 404}

@endpoint GET /media/{media_name}
@required {media_name: str}
@returns(200) {data: map{content_type: str, created_at: str, expires_at: str, media_name: str, updated_at: str}}
@errors {401, 404}

@endpoint PUT /media/{media_name}
@required {media_name: str}
@optional {media_url: str, ttl_secs: int}
@returns(200) {data: map{content_type: str, created_at: str, expires_at: str, media_name: str, updated_at: str}}
@errors {401, 404, 422}

@endpoint GET /media/{media_name}/download
@required {media_name: str}
@returns(200)
@errors {401, 404, 422}

@endgroup

@group messages
@endpoint POST /messages
@required {to: str}
@optional {auto_detect: bool=false, encoding: str(auto/gsm7/ucs2)=auto, from: str, media_urls: [str(url)], messaging_profile_id: str, send_at: str(date-time), subject: str, text: str, type: str(SMS/MMS), use_profile_webhooks: bool=true, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messages/alphanumeric_sender_id
@required {from: str, messaging_profile_id: str(uuid), text: str, to: str}
@optional {use_profile_webhooks: bool, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {400, 401, 422}

@endpoint GET /messages/group/{message_id}
@required {message_id: str(uuid)}
@returns(200) {data: [map]}
@errors {401, 404}

@endpoint POST /messages/group_mms
@required {from: str, to: [str]}
@optional {media_urls: [str(url)], subject: str, text: str, use_profile_webhooks: bool=true, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messages/long_code
@required {from: str, to: str}
@optional {auto_detect: bool=false, encoding: str(auto/gsm7/ucs2)=auto, media_urls: [str(url)], subject: str, text: str, type: str(SMS/MMS), use_profile_webhooks: bool=true, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messages/number_pool
@required {messaging_profile_id: str, to: str}
@optional {auto_detect: bool=false, encoding: str(auto/gsm7/ucs2)=auto, media_urls: [str(url)], subject: str, text: str, type: str(SMS/MMS), use_profile_webhooks: bool=true, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messages/rcs
@required {agent_id: str, agent_message: map{content_message: map, event: map, expire_time: str(date-time), ttl: str}, messaging_profile_id: str, to: str}
@optional {mms_fallback: map{from: str, media_urls: [str], subject: str, text: str}, sms_fallback: map{from: str, text: str}, type: str, webhook_url: str(url)}
@returns(200) {data: map{body: map{content_message: map{content_info: map, rich_card: map, suggestions: [map], text: str}, event: map{event_type: str}, expire_time: str(date-time), ttl: str}, direction: str, encoding: str, from: map{agent_id: str, agent_name: str, carrier: str}, id: str, messaging_profile_id: str, organization_id: str, received_at: str(date-time), record_type: str, to: [map], type: str, wait_seconds: num(float)?}}
@errors {4XX}

@endpoint GET /messages/rcs/deeplinks/{agent_id}
@required {agent_id: str}
@optional {phone_number: str, body: str}
@returns(200) {data: map{url: str}}
@errors {4XX}

@endpoint POST /messages/schedule
@required {to: str}
@optional {auto_detect: bool=false, from: str, media_urls: [str(url)], messaging_profile_id: str, send_at: str(date-time), subject: str, text: str, type: str(SMS/MMS), use_profile_webhooks: bool=true, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messages/short_code
@required {from: str, to: str}
@optional {auto_detect: bool=false, encoding: str(auto/gsm7/ucs2)=auto, media_urls: [str(url)], subject: str, text: str, type: str(SMS/MMS), use_profile_webhooks: bool=true, webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, wait_seconds: num(float)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messages/whatsapp
@required {from: str, to: str, whatsapp_message: map{audio: map, biz_opaque_callback_data: str, contacts: [map], document: map, image: map, interactive: map, location: map, reaction: map, sticker: map, type: str, video: map}}
@optional {type: str, webhook_url: str(url)}
@returns(200) {data: map{body: map{audio: map{caption: str, filename: str, link: str(url), voice: bool}, biz_opaque_callback_data: str, contacts: [map], document: map{caption: str, filename: str, link: str(url), voice: bool}, image: map{caption: str, filename: str, link: str(url), voice: bool}, interactive: map{action: map, body: map, footer: map, header: map, type: str}, location: map{address: str, latitude: str, longitude: str, name: str}, reaction: map{emoji: str, message_id: str}, sticker: map{caption: str, filename: str, link: str(url), voice: bool}, type: str, video: map{caption: str, filename: str, link: str(url), voice: bool}}, direction: str, encoding: str, from: map{carrier: str, line_type: str, phone_number: str, status: str}, id: str, messaging_profile_id: str, organization_id: str, received_at: str(date-time), record_type: str, to: [map], type: str, wait_seconds: num(float)?}}
@errors {4XX}

@endpoint DELETE /messages/{id}
@required {id: str(uuid)}
@returns(200) {cc: [map], completed_at: str(date-time)?, cost: map?, cost_breakdown: map?, direction: str, encoding: str, errors: [any], from: map{carrier: str, line_type: str, phone_number: str}, id: str(uuid), media: [map], messaging_profile_id: str, organization_id: str(uuid), parts: int, received_at: str(date-time), record_type: str, sent_at: str(date-time)?, smart_encoding_applied: bool, subject: str?, tags: [str], tcr_campaign_billable: bool, tcr_campaign_id: str?, tcr_campaign_registered: str?, text: str, to: [map], type: str, valid_until: str(date-time)?, webhook_failover_url: str(url)?, webhook_url: str(url)?}
@errors {403, 404, 4XX}

@endpoint GET /messages/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {4XX}

@endgroup

@group messaging
@endpoint GET /messaging/rcs/agents
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /messaging/rcs/agents/{id}
@required {id: str}
@returns(200) {data: map{agent_id: str, agent_name: str, created_at: str(date-time), enabled: bool, profile_id: str(uuid)?, updated_at: str(date-time), user_id: str, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint PATCH /messaging/rcs/agents/{id}
@required {id: str}
@optional {profile_id: str(uuid), webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{agent_id: str, agent_name: str, created_at: str(date-time), enabled: bool, profile_id: str(uuid)?, updated_at: str(date-time), user_id: str, webhook_failover_url: str(url)?, webhook_url: str(url)?}}
@errors {4XX}

@endpoint POST /messaging/rcs/bulk_capabilities
@required {agent_id: str, phone_numbers: [str]}
@returns(200) {data: [map]}
@errors {4XX}

@endpoint GET /messaging/rcs/capabilities/{agent_id}/{phone_number}
@required {agent_id: str, phone_number: str}
@returns(200) {data: map{agent_id: str, agent_name: str, features: [str], phone_number: str, record_type: str}}
@errors {4XX}

@endpoint PUT /messaging/rcs/test_number_invite/{id}/{phone_number}
@required {id: str, phone_number: str}
@returns(200) {data: map{agent_id: str, phone_number: str, record_type: str, status: str}}
@errors {4XX}

@endgroup

@group messaging_hosted_number_orders
@endpoint GET /messaging_hosted_number_orders
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /messaging_hosted_number_orders
@optional {messaging_profile_id: str, phone_numbers: [str]}
@returns(200) {data: map{id: str(uuid), messaging_profile_id: str?, phone_numbers: [map], record_type: str, status: str}}
@errors {4XX}

@endpoint POST /messaging_hosted_number_orders/eligibility_numbers_check
@required {phone_numbers: [str]}
@returns(200) {phone_numbers: [map]}
@errors {400, 401}

@endpoint DELETE /messaging_hosted_number_orders/{id}
@required {id: str}
@returns(200) {data: map{id: str(uuid), messaging_profile_id: str?, phone_numbers: [map], record_type: str, status: str}}
@errors {4XX}

@endpoint GET /messaging_hosted_number_orders/{id}
@required {id: str}
@returns(200) {data: map{id: str(uuid), messaging_profile_id: str?, phone_numbers: [map], record_type: str, status: str}}
@errors {4XX}

@endpoint POST /messaging_hosted_number_orders/{id}/actions/file_upload
@required {id: str}
@returns(200) {data: map{id: str(uuid), messaging_profile_id: str?, phone_numbers: [map], record_type: str, status: str}}
@errors {4XX}

@endpoint POST /messaging_hosted_number_orders/{id}/validation_codes
@required {id: str, verification_codes: [map{code!: str, phone_number!: str}]}
@returns(200) {data: map{order_id: str(uuid), phone_numbers: [map]}}
@errors {4XX}

@endpoint POST /messaging_hosted_number_orders/{id}/verification_codes
@required {id: str, phone_numbers: [str], verification_method: str(sms/call)}
@returns(200) {data: [map]}
@errors {4XX}

@endgroup

@group messaging_hosted_numbers
@endpoint GET /messaging_hosted_numbers
@optional {filter[messaging_profile_id]: str(uuid), filter[phone_number]: str, filter[phone_number][contains]: str, sort[phone_number]: str(asc/desc), page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint DELETE /messaging_hosted_numbers/{id}
@required {id: str}
@returns(200) {data: map{id: str(uuid), messaging_profile_id: str?, phone_numbers: [map], record_type: str, status: str}}
@errors {4XX}

@endpoint GET /messaging_hosted_numbers/{id}
@required {id: str}
@returns(200) {data: map{country_code: str, created_at: str(date-time), eligible_messaging_products: [str], features: map{mms: map?, sms: map?}, health: map{inbound_outbound_ratio: num(float), message_count: int, spam_ratio: num(float), success_ratio: num(float)}, id: str, messaging_product: str, messaging_profile_id: str?, organization_id: str, phone_number: str, record_type: str, tags: [str], traffic_type: str, type: str, updated_at: str(date-time)}}
@errors {401, 404}

@endpoint PATCH /messaging_hosted_numbers/{id}
@required {id: str}
@optional {messaging_product: str, messaging_profile_id: str, tags: [str]}
@returns(200) {data: map{country_code: str, created_at: str(date-time), eligible_messaging_products: [str], features: map{mms: map?, sms: map?}, health: map{inbound_outbound_ratio: num(float), message_count: int, spam_ratio: num(float), success_ratio: num(float)}, id: str, messaging_product: str, messaging_profile_id: str?, organization_id: str, phone_number: str, record_type: str, tags: [str], traffic_type: str, type: str, updated_at: str(date-time)}}
@errors {401, 404}

@endgroup

@group messaging_numbers_bulk_updates
@endpoint POST /messaging_numbers_bulk_updates
@required {messaging_profile_id: str, numbers: [str]}
@optional {assign_only: bool=false}
@returns(200) {data: map{failed: [str], order_id: str(uuid), pending: [str], record_type: str, success: [str]}}
@errors {4XX}

@endpoint GET /messaging_numbers_bulk_updates/{order_id}
@required {order_id: str}
@returns(200) {data: map{failed: [str], order_id: str(uuid), pending: [str], record_type: str, success: [str]}}
@errors {4XX}

@endgroup

@group messaging_optouts
@endpoint GET /messaging_optouts
@optional {redaction_enabled: str, filter: map, page: map, created_at: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401}

@endgroup

@group messaging_profile_metrics
@endpoint GET /messaging_profile_metrics
@optional {time_frame: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401}

@endgroup

@group messaging_profiles
@endpoint GET /messaging_profiles
@optional {filter: map, page: map, filter[name][eq]: str, filter[name][contains]: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /messaging_profiles
@required {name: str, whitelisted_destinations: [str]}
@optional {ai_assistant_id: str, alpha_sender: str, daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool=true, health_webhook_url: str(url), mms_fall_back_to_sms: bool=false, mms_transcoding: bool=false, mobile_only: bool=false, number_pool_settings: map{geomatch: bool, long_code_weight!: num, skip_unhealthy!: bool, sticky_sender: bool, toll_free_weight!: num}, resource_group_id: str, smart_encoding: bool=false, url_shortener_settings: map{domain!: str, prefix: str, replace_blacklist_only: bool, send_webhooks: bool}, webhook_api_version: str(1/2/2010-04-01)=2, webhook_failover_url: str(url)=, webhook_url: str(url)=}
@returns(200) {data: map{ai_assistant_id: str?, alpha_sender: str?, created_at: str(date-time), daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, health_webhook_url: str(url)?, id: str(uuid), mms_fall_back_to_sms: bool, mms_transcoding: bool, mobile_only: bool, name: str, number_pool_settings: map?, organization_id: str, record_type: str, redaction_enabled: bool, redaction_level: int, resource_group_id: str?, smart_encoding: bool, updated_at: str(date-time), url_shortener_settings: map?, v1_secret: str, webhook_api_version: str, webhook_failover_url: str(url)?, webhook_url: str(url)?, whitelisted_destinations: [str]}}
@errors {4XX}

@endpoint DELETE /messaging_profiles/{id}
@required {id: str(uuid)}
@returns(200) {data: map{ai_assistant_id: str?, alpha_sender: str?, created_at: str(date-time), daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, health_webhook_url: str(url)?, id: str(uuid), mms_fall_back_to_sms: bool, mms_transcoding: bool, mobile_only: bool, name: str, number_pool_settings: map?, organization_id: str, record_type: str, redaction_enabled: bool, redaction_level: int, resource_group_id: str?, smart_encoding: bool, updated_at: str(date-time), url_shortener_settings: map?, v1_secret: str, webhook_api_version: str, webhook_failover_url: str(url)?, webhook_url: str(url)?, whitelisted_destinations: [str]}}
@errors {4XX}

@endpoint GET /messaging_profiles/{id}
@required {id: str(uuid)}
@returns(200) {data: map{ai_assistant_id: str?, alpha_sender: str?, created_at: str(date-time), daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, health_webhook_url: str(url)?, id: str(uuid), mms_fall_back_to_sms: bool, mms_transcoding: bool, mobile_only: bool, name: str, number_pool_settings: map?, organization_id: str, record_type: str, redaction_enabled: bool, redaction_level: int, resource_group_id: str?, smart_encoding: bool, updated_at: str(date-time), url_shortener_settings: map?, v1_secret: str, webhook_api_version: str, webhook_failover_url: str(url)?, webhook_url: str(url)?, whitelisted_destinations: [str]}}
@errors {4XX}

@endpoint PATCH /messaging_profiles/{id}
@required {id: str(uuid)}
@optional {alpha_sender: str, created_at: str(date-time), daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, id: str(uuid), mms_fall_back_to_sms: bool=false, mms_transcoding: bool=false, mobile_only: bool=false, name: str, number_pool_settings: map{geomatch: bool, long_code_weight!: num, skip_unhealthy!: bool, sticky_sender: bool, toll_free_weight!: num}, record_type: str, smart_encoding: bool=false, updated_at: str(date-time), url_shortener_settings: map{domain!: str, prefix: str, replace_blacklist_only: bool, send_webhooks: bool}, v1_secret: str, webhook_api_version: str(1/2/2010-04-01), webhook_failover_url: str(url), webhook_url: str(url), whitelisted_destinations: [str]}
@returns(200) {data: map{ai_assistant_id: str?, alpha_sender: str?, created_at: str(date-time), daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, health_webhook_url: str(url)?, id: str(uuid), mms_fall_back_to_sms: bool, mms_transcoding: bool, mobile_only: bool, name: str, number_pool_settings: map?, organization_id: str, record_type: str, redaction_enabled: bool, redaction_level: int, resource_group_id: str?, smart_encoding: bool, updated_at: str(date-time), url_shortener_settings: map?, v1_secret: str, webhook_api_version: str, webhook_failover_url: str(url)?, webhook_url: str(url)?, whitelisted_destinations: [str]}}
@errors {4XX}

@endpoint POST /messaging_profiles/{id}/actions/regenerate_secret
@required {id: str(uuid)}
@returns(200) {data: map{ai_assistant_id: str?, alpha_sender: str?, created_at: str(date-time), daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, health_webhook_url: str(url)?, id: str(uuid), mms_fall_back_to_sms: bool, mms_transcoding: bool, mobile_only: bool, name: str, number_pool_settings: map?, organization_id: str, record_type: str, redaction_enabled: bool, redaction_level: int, resource_group_id: str?, smart_encoding: bool, updated_at: str(date-time), url_shortener_settings: map?, v1_secret: str, webhook_api_version: str, webhook_failover_url: str(url)?, webhook_url: str(url)?, whitelisted_destinations: [str]}}
@errors {401, 404}

@endpoint GET /messaging_profiles/{id}/alphanumeric_sender_ids
@required {id: str(uuid)}
@optional {page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404}

@endpoint GET /messaging_profiles/{id}/metrics
@required {id: str(uuid)}
@optional {time_frame: str}
@returns(200) {data: map}
@errors {400, 401, 404}

@endpoint GET /messaging_profiles/{id}/phone_numbers
@required {id: str(uuid)}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /messaging_profiles/{id}/short_codes
@required {id: str(uuid)}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /messaging_profiles/{profile_id}/autoresp_configs
@required {profile_id: str(uuid)}
@optional {country_code: str, created_at: map, updated_at: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /messaging_profiles/{profile_id}/autoresp_configs
@required {profile_id: str, country_code: str, keywords: [str], op: str(start/stop/info)}
@optional {resp_text: str}
@returns(200) {data: map{country_code: str, created_at: str(date-time), id: str, keywords: [str], op: str, resp_text: str, updated_at: str(date-time)}}
@errors {4XX}

@endpoint DELETE /messaging_profiles/{profile_id}/autoresp_configs/{autoresp_cfg_id}
@required {profile_id: str(uuid), autoresp_cfg_id: str(uuid)}
@returns(200)
@errors {4XX}

@endpoint GET /messaging_profiles/{profile_id}/autoresp_configs/{autoresp_cfg_id}
@required {profile_id: str(uuid), autoresp_cfg_id: str(uuid)}
@returns(200) {data: map{country_code: str, created_at: str(date-time), id: str, keywords: [str], op: str, resp_text: str, updated_at: str(date-time)}}
@errors {4XX}

@endpoint PUT /messaging_profiles/{profile_id}/autoresp_configs/{autoresp_cfg_id}
@required {profile_id: str(uuid), autoresp_cfg_id: str(uuid), country_code: str, keywords: [str], op: str(start/stop/info)}
@optional {resp_text: str}
@returns(200) {data: map{country_code: str, created_at: str(date-time), id: str, keywords: [str], op: str, resp_text: str, updated_at: str(date-time)}}
@errors {4XX}

@endgroup

@group messaging_tollfree
@endpoint GET /messaging_tollfree/verification/requests
@required {page: int, page_size: int}
@optional {date_start: str(date-time), date_end: str(date-time), status: str, phone_number: str, business_name: str}
@returns(200) {records: [map], total_records: int}
@errors {4XX}

@endpoint POST /messaging_tollfree/verification/requests
@required {additionalInformation: str, businessAddr1: str, businessCity: str, businessContactEmail: str, businessContactFirstName: str, businessContactLastName: str, businessContactPhone: str, businessName: str, businessState: str, businessZip: str, corporateWebsite: str, messageVolume: any, optInWorkflow: str, optInWorkflowImageURLs: [map{url!: str(uri)}], phoneNumbers: [map{phoneNumber!: str}], productionMessageContent: str, useCase: any, useCaseSummary: str}
@optional {ageGatedContent: bool=false, businessAddr2: str, businessRegistrationCountry: str, businessRegistrationNumber: str, businessRegistrationType: str, campaignVerifyAuthorizationToken: str, doingBusinessAs: str, entityType: any, helpMessageResponse: str, isvReseller: str, optInConfirmationResponse: str, optInKeywords: str, privacyPolicyURL: str, termsAndConditionURL: str, webhookUrl: str}
@returns(200) {additionalInformation: str, ageGatedContent: bool, businessAddr1: str, businessAddr2: str, businessCity: str, businessContactEmail: str, businessContactFirstName: str, businessContactLastName: str, businessContactPhone: str, businessName: str, businessRegistrationCountry: str, businessRegistrationNumber: str, businessRegistrationType: str, businessState: str, businessZip: str, campaignVerifyAuthorizationToken: str?, corporateWebsite: str, doingBusinessAs: str, entityType: any, helpMessageResponse: str, id: str(uuid), isvReseller: str, messageVolume: any, optInConfirmationResponse: str, optInKeywords: str, optInWorkflow: str, optInWorkflowImageURLs: [map], phoneNumbers: [map], privacyPolicyURL: str, productionMessageContent: str, termsAndConditionURL: str, useCase: any, useCaseSummary: str, verificationRequestId: str, verificationStatus: any, webhookUrl: str}
@errors {4XX}

@endpoint DELETE /messaging_tollfree/verification/requests/{id}
@required {id: str(uuid)}
@returns(200)
@errors {404, 4XX}

@endpoint GET /messaging_tollfree/verification/requests/{id}
@required {id: str(uuid)}
@returns(200) {additionalInformation: str, ageGatedContent: bool, businessAddr1: str, businessAddr2: str, businessCity: str, businessContactEmail: str, businessContactFirstName: str, businessContactLastName: str, businessContactPhone: str, businessName: str, businessRegistrationCountry: str, businessRegistrationNumber: str, businessRegistrationType: str, businessState: str, businessZip: str, campaignVerifyAuthorizationToken: str?, corporateWebsite: str, createdAt: str(date-time), doingBusinessAs: str, entityType: any, helpMessageResponse: str, id: str(uuid), isvReseller: str, messageVolume: any, optInConfirmationResponse: str, optInKeywords: str, optInWorkflow: str, optInWorkflowImageURLs: [map], phoneNumbers: [map], privacyPolicyURL: str, productionMessageContent: str, reason: str, termsAndConditionURL: str, updatedAt: str(date-time), useCase: any, useCaseSummary: str, verificationStatus: any, webhookUrl: str}
@errors {4XX}

@endpoint PATCH /messaging_tollfree/verification/requests/{id}
@required {id: str(uuid), additionalInformation: str, businessAddr1: str, businessCity: str, businessContactEmail: str, businessContactFirstName: str, businessContactLastName: str, businessContactPhone: str, businessName: str, businessState: str, businessZip: str, corporateWebsite: str, messageVolume: any, optInWorkflow: str, optInWorkflowImageURLs: [map{url!: str(uri)}], phoneNumbers: [map{phoneNumber!: str}], productionMessageContent: str, useCase: any, useCaseSummary: str}
@optional {ageGatedContent: bool=false, businessAddr2: str, businessRegistrationCountry: str, businessRegistrationNumber: str, businessRegistrationType: str, campaignVerifyAuthorizationToken: str, doingBusinessAs: str, entityType: any, helpMessageResponse: str, isvReseller: str, optInConfirmationResponse: str, optInKeywords: str, privacyPolicyURL: str, termsAndConditionURL: str, webhookUrl: str}
@returns(200) {additionalInformation: str, ageGatedContent: bool, businessAddr1: str, businessAddr2: str, businessCity: str, businessContactEmail: str, businessContactFirstName: str, businessContactLastName: str, businessContactPhone: str, businessName: str, businessRegistrationCountry: str, businessRegistrationNumber: str, businessRegistrationType: str, businessState: str, businessZip: str, campaignVerifyAuthorizationToken: str?, corporateWebsite: str, doingBusinessAs: str, entityType: any, helpMessageResponse: str, id: str(uuid), isvReseller: str, messageVolume: any, optInConfirmationResponse: str, optInKeywords: str, optInWorkflow: str, optInWorkflowImageURLs: [map], phoneNumbers: [map], privacyPolicyURL: str, productionMessageContent: str, termsAndConditionURL: str, useCase: any, useCaseSummary: str, verificationRequestId: str, verificationStatus: any, webhookUrl: str}
@errors {4XX}

@endpoint GET /messaging_tollfree/verification/requests/{id}/status_history
@required {id: str(uuid), page[number]: int, page[size]: int}
@returns(200) {records: [map], total_records: int}
@errors {4XX}

@endgroup

@group messaging_url_domains
@endpoint GET /messaging_url_domains
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endgroup

@group mobile_network_operators
@endpoint GET /mobile_network_operators
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endgroup

@group mobile_phone_numbers
@endpoint GET /mobile_phone_numbers/messaging
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /mobile_phone_numbers/{id}/messaging
@required {id: str}
@returns(200) {data: map{country_code: str, created_at: str(date-time), features: map{sms: map?}, id: str, messaging_product: str, messaging_profile_id: str?, organization_id: str, phone_number: str, record_type: str, tags: [str], traffic_type: str, type: str, updated_at: str(date-time)}}
@errors {4XX}

@endgroup

@group mobile_push_credentials
@endpoint GET /mobile_push_credentials
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /mobile_push_credentials
@returns(200) {data: map{alias: str, certificate: str, created_at: str(date-time), id: str, private_key: str, project_account_json_file: map, record_type: str, type: str, updated_at: str(date-time)}}
@errors {401, 422}

@endpoint DELETE /mobile_push_credentials/{push_credential_id}
@required {push_credential_id: str(uuid)}
@returns(204)
@errors {401, 404, 422}

@endpoint GET /mobile_push_credentials/{push_credential_id}
@required {push_credential_id: str(uuid)}
@returns(200) {data: map{alias: str, certificate: str, created_at: str(date-time), id: str, private_key: str, project_account_json_file: map, record_type: str, type: str, updated_at: str(date-time)}}
@errors {401, 404, 422}

@endgroup

@group network_coverage
@endpoint GET /network_coverage
@optional {filters: map, filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endgroup

@group networks
@endpoint GET /networks
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /networks
@returns(200) {data: any}
@errors {422}

@endpoint DELETE /networks/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /networks/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint PATCH /networks/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint DELETE /networks/{id}/default_gateway
@required {id: str(uuid)}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint GET /networks/{id}/default_gateway
@required {id: str(uuid)}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /networks/{id}/default_gateway
@required {id: str(uuid)}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint GET /networks/{id}/network_interfaces
@required {id: str(uuid)}
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endgroup

@group notification_channels
@endpoint GET /notification_channels
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 422, 500}

@endpoint POST /notification_channels
@optional {channel_destination: str, channel_type_id: str(sms/voice/email/webhook), created_at: str(date-time), id: str, notification_profile_id: str, updated_at: str(date-time)}
@returns(200) {data: map{channel_destination: str, channel_type_id: str, created_at: str(date-time), id: str, notification_profile_id: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endpoint DELETE /notification_channels/{id}
@required {id: str(uuid)}
@returns(200) {data: map{channel_destination: str, channel_type_id: str, created_at: str(date-time), id: str, notification_profile_id: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endpoint GET /notification_channels/{id}
@required {id: str(uuid)}
@returns(200) {data: map{channel_destination: str, channel_type_id: str, created_at: str(date-time), id: str, notification_profile_id: str, updated_at: str(date-time)}}
@errors {400, 404, 422, 500}

@endpoint PATCH /notification_channels/{id}
@required {id: str(uuid)}
@optional {channel_destination: str, channel_type_id: str(sms/voice/email/webhook), created_at: str(date-time), id: str, notification_profile_id: str, updated_at: str(date-time)}
@returns(200) {data: map{channel_destination: str, channel_type_id: str, created_at: str(date-time), id: str, notification_profile_id: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endgroup

@group notification_event_conditions
@endpoint GET /notification_event_conditions
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 422, 500}

@endgroup

@group notification_events
@endpoint GET /notification_events
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 422, 500}

@endgroup

@group notification_profiles
@endpoint GET /notification_profiles
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 422, 500}

@endpoint POST /notification_profiles
@optional {created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}
@returns(200) {data: map{created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endpoint DELETE /notification_profiles/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endpoint GET /notification_profiles/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}}
@errors {400, 404, 422, 500}

@endpoint PATCH /notification_profiles/{id}
@required {id: str(uuid)}
@optional {created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}
@returns(200) {data: map{created_at: str(date-time), id: str, name: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endgroup

@group notification_settings
@endpoint GET /notification_settings
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 422, 500}

@endpoint POST /notification_settings
@optional {associated_record_type: str, associated_record_type_value: str, created_at: str(date-time), id: str, notification_channel_id: str, notification_event_condition_id: str, notification_profile_id: str, parameters: [map{name: str, value: str}], status: str(enabled/enable-received/enable-pending/enable-submtited/delete-received/delete-pending/delete-submitted/deleted), updated_at: str(date-time)}
@returns(200) {data: map{associated_record_type: str, associated_record_type_value: str, created_at: str(date-time), id: str, notification_channel_id: str, notification_event_condition_id: str, notification_profile_id: str, parameters: [map], status: str, updated_at: str(date-time)}}
@returns(201) {data: map{associated_record_type: str, associated_record_type_value: str, created_at: str(date-time), id: str, notification_channel_id: str, notification_event_condition_id: str, notification_profile_id: str, parameters: [map], status: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endpoint DELETE /notification_settings/{id}
@required {id: str(uuid)}
@returns(200) {data: map{associated_record_type: str, associated_record_type_value: str, created_at: str(date-time), id: str, notification_channel_id: str, notification_event_condition_id: str, notification_profile_id: str, parameters: [map], status: str, updated_at: str(date-time)}}
@returns(201) {data: map{associated_record_type: str, associated_record_type_value: str, created_at: str(date-time), id: str, notification_channel_id: str, notification_event_condition_id: str, notification_profile_id: str, parameters: [map], status: str, updated_at: str(date-time)}}
@errors {400, 422, 500}

@endpoint GET /notification_settings/{id}
@required {id: str(uuid)}
@returns(200) {data: map{associated_record_type: str, associated_record_type_value: str, created_at: str(date-time), id: str, notification_channel_id: str, notification_event_condition_id: str, notification_profile_id: str, parameters: [map], status: str, updated_at: str(date-time)}}
@errors {400, 404, 422, 500}

@endgroup

@group number_block_orders
@endpoint GET /number_block_orders
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /number_block_orders
@required {range: int, starting_number: str}
@optional {connection_id: str, created_at: str(date-time), customer_reference: str, errors: str, id: str(uuid), messaging_profile_id: str, phone_numbers_count: int, record_type: str, requirements_met: bool, status: str(pending/success/failure), updated_at: str(date-time)}
@returns(200) {data: map{connection_id: str, created_at: str(date-time), customer_reference: str, id: str(uuid), messaging_profile_id: str, phone_numbers_count: int, range: int, record_type: str, requirements_met: bool, starting_number: str, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /number_block_orders/{number_block_order_id}
@required {number_block_order_id: str}
@returns(200) {data: map{connection_id: str, created_at: str(date-time), customer_reference: str, id: str(uuid), messaging_profile_id: str, phone_numbers_count: int, range: int, record_type: str, requirements_met: bool, starting_number: str, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group number_lookup
@endpoint GET /number_lookup/{phone_number}
@required {phone_number: str}
@optional {type: str(carrier/caller-name)}
@returns(200) {data: map{caller_name: map{caller_name: str, error_code: str}, carrier: map{error_code: str?, mobile_country_code: str, mobile_network_code: str, name: str, normalized_carrier: str, type: str}, country_code: str, fraud: str?, national_format: str, phone_number: str, portability: map{altspid: str, altspid_carrier_name: str, altspid_carrier_type: str, city: str, line_type: str, lrn: str, ocn: str, ported_date: str, ported_status: str, spid: str, spid_carrier_name: str, spid_carrier_type: str, state: str}, record_type: str}}
@errors {422}

@endgroup

@group number_order_phone_numbers
@endpoint GET /number_order_phone_numbers
@optional {filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /number_order_phone_numbers/{id}/requirement_group
@required {id: str(uuid), requirement_group_id: str(uuid)}
@returns(200) {data: map{bundle_id: str(uuid)?, country_code: str, deadline: str(date-time), id: str(uuid), is_block_number: bool, locality: str, order_request_id: str(uuid), phone_number: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], requirements_met: bool, requirements_status: str, status: str, sub_number_order_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /number_order_phone_numbers/{number_order_phone_number_id}
@required {number_order_phone_number_id: str}
@returns(200) {data: map{bundle_id: str(uuid)?, country_code: str, deadline: str(date-time), id: str(uuid), is_block_number: bool, locality: str, order_request_id: str(uuid), phone_number: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], requirements_met: bool, requirements_status: str, status: str, sub_number_order_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /number_order_phone_numbers/{number_order_phone_number_id}
@required {number_order_phone_number_id: str}
@optional {regulatory_requirements: [map{field_value: str, requirement_id: str(uuid)}]}
@returns(200) {data: map{bundle_id: str(uuid)?, country_code: str, deadline: str(date-time), id: str(uuid), is_block_number: bool, locality: str, order_request_id: str(uuid), phone_number: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], requirements_met: bool, requirements_status: str, status: str, sub_number_order_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group number_orders
@endpoint GET /number_orders
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /number_orders
@optional {billing_group_id: str, connection_id: str, customer_reference: str, messaging_profile_id: str, phone_numbers: [map{bundle_id: str, phone_number!: str, requirement_group_id: str}]}
@returns(200) {data: map{billing_group_id: str, connection_id: str, created_at: str(date-time), customer_reference: str, id: str(uuid), messaging_profile_id: str, phone_numbers: [map], phone_numbers_count: int, record_type: str, requirements_met: bool, status: str, sub_number_orders_ids: [str], updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /number_orders/{number_order_id}
@required {number_order_id: str}
@returns(200) {data: map{billing_group_id: str, connection_id: str, created_at: str(date-time), customer_reference: str, id: str(uuid), messaging_profile_id: str, phone_numbers: [map], phone_numbers_count: int, record_type: str, requirements_met: bool, status: str, sub_number_orders_ids: [str], updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /number_orders/{number_order_id}
@required {number_order_id: str}
@optional {customer_reference: str, regulatory_requirements: [map{field_value: str, requirement_id: str(uuid)}]}
@returns(200) {data: map{billing_group_id: str, connection_id: str, created_at: str(date-time), customer_reference: str, id: str(uuid), messaging_profile_id: str, phone_numbers: [map], phone_numbers_count: int, record_type: str, requirements_met: bool, status: str, sub_number_orders_ids: [str], updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group number_reservations
@endpoint GET /number_reservations
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /number_reservations
@optional {created_at: str(date-time), customer_reference: str, id: str(uuid), phone_numbers: [map{created_at: str(date-time), errors: str, expired_at: str(date-time), id: str(uuid), phone_number: str, record_type: str, status: str, updated_at: str(date-time)}], record_type: str, status: str(pending/success/failure), updated_at: str(date-time)}
@returns(200) {data: map{created_at: str(date-time), customer_reference: str, errors: str, id: str(uuid), phone_numbers: [map], record_type: str, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /number_reservations/{number_reservation_id}
@required {number_reservation_id: str}
@returns(200) {data: map{created_at: str(date-time), customer_reference: str, errors: str, id: str(uuid), phone_numbers: [map], record_type: str, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /number_reservations/{number_reservation_id}/actions/extend
@required {number_reservation_id: str}
@returns(200) {data: map{created_at: str(date-time), customer_reference: str, errors: str, id: str(uuid), phone_numbers: [map], record_type: str, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group numbers_features
@endpoint POST /numbers_features
@required {phone_numbers: [str]}
@returns(200) {data: [map]}
@errors {400, 401, 422, 500}

@endgroup

@group oauth
@endpoint GET /oauth/authorize
@required {response_type: str, client_id: str, redirect_uri: str(uri)}
@optional {scope: str, state: str, code_challenge: str, code_challenge_method: str(plain/S256)}
@returns(200)
@errors {302, 400, 404, 422}

@endpoint GET /oauth/consent/{consent_token}
@required {consent_token: str}
@returns(200) {data: map{client_id: str, logo_uri: str(uri)?, name: str, policy_uri: str(uri)?, redirect_uri: str(uri), requested_scopes: [map], tos_uri: str(uri)?, verified: bool}}
@errors {422}

@endpoint POST /oauth/grants
@required {allowed: bool, consent_token: str}
@returns(200) {redirect_uri: str(uri)}
@errors {422}

@endpoint POST /oauth/introspect
@required {token: str}
@returns(200) {active: bool, aud: str, client_id: str, exp: int, iat: int, iss: str, scope: str}
@errors {400, 401}

@endpoint GET /oauth/jwks
@returns(200) {keys: [map]}
@errors {400, 401}

@endpoint POST /oauth/register
@optional {client_name: str, grant_types: [str]=authorization_code, logo_uri: str(uri), policy_uri: str(uri), redirect_uris: [str(uri)], response_types: [str]=code, scope: str, token_endpoint_auth_method: str(none/client_secret_basic/client_secret_post)=client_secret_basic, tos_uri: str(uri)}
@returns(201) {client_id: str, client_id_issued_at: int, client_name: str, client_secret: str, grant_types: [str], logo_uri: str(uri), policy_uri: str(uri), redirect_uris: [str(uri)], response_types: [str], scope: str, token_endpoint_auth_method: str, tos_uri: str(uri)}
@errors {400}

@endpoint POST /oauth/token
@required {grant_type: str(client_credentials/authorization_code/refresh_token)}
@optional {client_id: str, client_secret: str, code: str, code_verifier: str, redirect_uri: str(uri), refresh_token: str, scope: str}
@returns(200) {access_token: str, expires_in: int, refresh_token: str, scope: str, token_type: str}
@errors {400, 401}

@endgroup

@group oauth_clients
@endpoint GET /oauth_clients
@optional {page[size]: int=20, page[number]: int=1, filter[client_type]: str(confidential/public), filter[verified]: bool, filter[allowed_grant_types][contains]: str(client_credentials/authorization_code/refresh_token), filter[name]: str, filter[name][contains]: str, filter[client_id]: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /oauth_clients
@required {allowed_grant_types: [str], allowed_scopes: [str], client_type: str(public/confidential), name: str}
@optional {logo_uri: str(uri), policy_uri: str(uri), redirect_uris: [str(uri)]=, require_pkce: bool=false, tos_uri: str(uri)}
@returns(201) {data: map{allowed_grant_types: [str], allowed_scopes: [str], client_id: str, client_secret: str?, client_type: str, created_at: str(date-time), logo_uri: str(uri)?, name: str, org_id: str, policy_uri: str(uri)?, record_type: str, redirect_uris: [str(uri)], require_pkce: bool, tos_uri: str(uri)?, updated_at: str(date-time), user_id: str}}
@errors {400, 401, 422}

@endpoint DELETE /oauth_clients/{id}
@required {id: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /oauth_clients/{id}
@required {id: str(uuid)}
@returns(200) {data: map{allowed_grant_types: [str], allowed_scopes: [str], client_id: str, client_secret: str?, client_type: str, created_at: str(date-time), logo_uri: str(uri)?, name: str, org_id: str, policy_uri: str(uri)?, record_type: str, redirect_uris: [str(uri)], require_pkce: bool, tos_uri: str(uri)?, updated_at: str(date-time), user_id: str}}
@errors {404}

@endpoint PUT /oauth_clients/{id}
@required {id: str(uuid)}
@optional {allowed_grant_types: [str], allowed_scopes: [str], logo_uri: str(uri), name: str, policy_uri: str(uri), redirect_uris: [str(uri)], require_pkce: bool, tos_uri: str(uri)}
@returns(200) {data: map{allowed_grant_types: [str], allowed_scopes: [str], client_id: str, client_secret: str?, client_type: str, created_at: str(date-time), logo_uri: str(uri)?, name: str, org_id: str, policy_uri: str(uri)?, record_type: str, redirect_uris: [str(uri)], require_pkce: bool, tos_uri: str(uri)?, updated_at: str(date-time), user_id: str}}
@errors {404, 422}

@endgroup

@group oauth_grants
@endpoint GET /oauth_grants
@optional {page[size]: int=20, page[number]: int=1}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401}

@endpoint DELETE /oauth_grants/{id}
@required {id: str(uuid)}
@returns(200) {data: map{client_id: str, created_at: str(date-time), id: str(uuid), last_used_at: str(date-time)?, record_type: str, scopes: [str]}}
@errors {404}

@endpoint GET /oauth_grants/{id}
@required {id: str(uuid)}
@returns(200) {data: map{client_id: str, created_at: str(date-time), id: str(uuid), last_used_at: str(date-time)?, record_type: str, scopes: [str]}}
@errors {404}

@endgroup

@group operator_connect
@endpoint POST /operator_connect/actions/refresh
@returns(200) {message: str, success: bool}
@returns(202) {message: str, success: bool}
@errors {401}

@endgroup

@group organizations
@endpoint GET /organizations/users
@optional {page[number]: int=1, page[size]: int=250, filter[user_status]: str(enabled/disabled/blocked), filter[email]: str, include_groups: bool=false}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint GET /organizations/users/users_groups_report
@optional {Accept: str(application/json/text/csv)=application/json}
@returns(200) {data: [map]}
@errors {401, 403, 404}

@endpoint GET /organizations/users/{id}
@required {id: str}
@optional {include_groups: bool=false}
@returns(200) {data: map{created_at: str, email: str(email), groups: [map], id: str, last_sign_in_at: str?, organization_user_bypasses_sso: bool, record_type: str, user_status: str}}
@errors {400, 401, 403, 404}

@endpoint POST /organizations/users/{id}/actions/remove
@required {id: str}
@returns(200) {data: map{created_at: str, email: str(email), groups: [map], id: str, last_sign_in_at: str?, organization_user_bypasses_sso: bool, record_type: str, user_status: str}}
@errors {400, 401, 403, 404}

@endgroup

@group ota_updates
@endpoint GET /ota_updates
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint GET /ota_updates/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, id: str(uuid), record_type: str, settings: map{mobile_network_operators_preferences: [map]}, sim_card_id: str(uuid), status: str, type: str, updated_at: str}}
@errors {401}

@endgroup

@group outbound_voice_profiles
@endpoint GET /outbound_voice_profiles
@optional {page: map, filter: map, sort: str(enabled/-enabled/created_at/-created_at/name/-name/service_plan/-service_plan/traffic_type/-traffic_type/usage_payment_method/-usage_payment_method)=-created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /outbound_voice_profiles
@required {name: str}
@optional {billing_group_id: str(uuid)=null, call_recording: map{call_recording_caller_phone_numbers: [str], call_recording_channels: str, call_recording_format: str, call_recording_type: str}, calling_window: map{calls_per_cld: int, end_time: str(time), start_time: str(time)}, concurrent_call_limit: int, daily_spend_limit: str, daily_spend_limit_enabled: bool=false, enabled: bool=true, max_destination_rate: num, service_plan: str=global, tags: [str], traffic_type: str=conversational, usage_payment_method: str=rate-deck, whitelisted_destinations: [str]=US,CA}
@returns(200) {data: map{billing_group_id: str(uuid)?, call_recording: map{call_recording_caller_phone_numbers: [str], call_recording_channels: str, call_recording_format: str, call_recording_type: str}, calling_window: map{calls_per_cld: int, end_time: str, start_time: str}, concurrent_call_limit: int?, connections_count: int, created_at: str, daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, id: str, max_destination_rate: num, name: str, record_type: str, service_plan: str, tags: [str], traffic_type: str, updated_at: str, usage_payment_method: str, whitelisted_destinations: [str]}}
@errors {401, 404, 422}

@endpoint DELETE /outbound_voice_profiles/{id}
@required {id: str}
@returns(200) {data: map{billing_group_id: str(uuid)?, call_recording: map{call_recording_caller_phone_numbers: [str], call_recording_channels: str, call_recording_format: str, call_recording_type: str}, calling_window: map{calls_per_cld: int, end_time: str, start_time: str}, concurrent_call_limit: int?, connections_count: int, created_at: str, daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, id: str, max_destination_rate: num, name: str, record_type: str, service_plan: str, tags: [str], traffic_type: str, updated_at: str, usage_payment_method: str, whitelisted_destinations: [str]}}
@errors {401, 404, 422}

@endpoint GET /outbound_voice_profiles/{id}
@required {id: str}
@returns(200) {data: map{billing_group_id: str(uuid)?, call_recording: map{call_recording_caller_phone_numbers: [str], call_recording_channels: str, call_recording_format: str, call_recording_type: str}, calling_window: map{calls_per_cld: int, end_time: str, start_time: str}, concurrent_call_limit: int?, connections_count: int, created_at: str, daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, id: str, max_destination_rate: num, name: str, record_type: str, service_plan: str, tags: [str], traffic_type: str, updated_at: str, usage_payment_method: str, whitelisted_destinations: [str]}}
@errors {401, 404, 422}

@endpoint PATCH /outbound_voice_profiles/{id}
@required {id: str, name: str}
@optional {billing_group_id: str(uuid)=null, call_recording: map{call_recording_caller_phone_numbers: [str], call_recording_channels: str, call_recording_format: str, call_recording_type: str}, calling_window: map{calls_per_cld: int, end_time: str(time), start_time: str(time)}, concurrent_call_limit: int, daily_spend_limit: str, daily_spend_limit_enabled: bool=false, enabled: bool=true, max_destination_rate: num, service_plan: str=global, tags: [str], traffic_type: str=conversational, usage_payment_method: str=rate-deck, whitelisted_destinations: [str]=US,CA}
@returns(200) {data: map{billing_group_id: str(uuid)?, call_recording: map{call_recording_caller_phone_numbers: [str], call_recording_channels: str, call_recording_format: str, call_recording_type: str}, calling_window: map{calls_per_cld: int, end_time: str, start_time: str}, concurrent_call_limit: int?, connections_count: int, created_at: str, daily_spend_limit: str, daily_spend_limit_enabled: bool, enabled: bool, id: str, max_destination_rate: num, name: str, record_type: str, service_plan: str, tags: [str], traffic_type: str, updated_at: str, usage_payment_method: str, whitelisted_destinations: [str]}}
@errors {401, 404, 422}

@endgroup

@group payment
@endpoint GET /payment/auto_recharge_prefs
@returns(200) {data: map{enabled: bool, id: str, invoice_enabled: bool, preference: str, recharge_amount: str, record_type: str, threshold_amount: str}}
@errors {400, 401, 404}

@endpoint PATCH /payment/auto_recharge_prefs
@optional {enabled: bool, invoice_enabled: bool, preference: str(credit_paypal/ach), recharge_amount: str, threshold_amount: str}
@returns(200) {data: map{enabled: bool, id: str, invoice_enabled: bool, preference: str, recharge_amount: str, record_type: str, threshold_amount: str}}
@errors {401, 404, 422}

@endgroup

@group phone_number_blocks
@endpoint GET /phone_number_blocks/jobs
@optional {page: map, sort: str, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /phone_number_blocks/jobs/delete_phone_number_block
@required {phone_number_block_id: str}
@returns(202) {data: map{created_at: str, etc: str(date-time), failed_operations: [map], id: str(uuid), record_type: str, status: str, successful_operations: [map], type: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_number_blocks/jobs/{id}
@required {id: str}
@returns(200) {data: map{created_at: str, etc: str(date-time), failed_operations: [map], id: str(uuid), record_type: str, status: str, successful_operations: [map], type: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group phone_numbers
@endpoint GET /phone_numbers
@optional {page: map, sort: str(purchased_at/phone_number/connection_name/usage_payment_method), filter: map, handle_messaging_profile_error: str(true/false)=false}
@returns(200) {data: [map], errors: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /phone_numbers/actions/verify_ownership
@required {phone_numbers: [str]}
@returns(200) {data: map{found: [map], not_found: [str], record_type: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/csv_downloads
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /phone_numbers/csv_downloads
@optional {csv_format: str(V1/V2)=V1, filter: map}
@returns(200) {data: [map]}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/csv_downloads/{id}
@required {id: str}
@returns(200) {data: [map]}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/jobs
@optional {page: map, sort: str, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 422, 500}

@endpoint POST /phone_numbers/jobs/delete_phone_numbers
@required {phone_numbers: [str]}
@returns(202) {data: map{created_at: str, etc: str(date-time), failed_operations: [map], id: str(uuid), pending_operations: [map], phone_numbers: [map], record_type: str, status: str, successful_operations: [map], type: str, updated_at: str}}
@errors {400, 401, 403, 422, 500}

@endpoint POST /phone_numbers/jobs/update_emergency_settings
@required {emergency_enabled: bool, phone_numbers: [str]}
@optional {emergency_address_id: str}
@returns(202) {data: map{created_at: str, etc: str(date-time), failed_operations: [map], id: str(uuid), pending_operations: [map], phone_numbers: [map], record_type: str, status: str, successful_operations: [map], type: str, updated_at: str}}
@errors {400, 401, 403, 422, 500}

@endpoint POST /phone_numbers/jobs/update_phone_numbers
@required {phone_numbers: [str]}
@optional {filter: map, billing_group_id: str, connection_id: str, customer_reference: str, deletion_lock_enabled: bool, external_pin: str, hd_voice_enabled: bool, tags: [str], voice: map{call_forwarding: map, call_recording: map, caller_id_name_enabled: bool, cnam_listing: map, inbound_call_screening: str, media_features: map, tech_prefix_enabled: bool, translated_number: str, usage_payment_method: str}}
@returns(202) {data: map{created_at: str, etc: str(date-time), failed_operations: [map], id: str(uuid), pending_operations: [map], phone_numbers: [map], record_type: str, status: str, successful_operations: [map], type: str, updated_at: str}}
@errors {400, 401, 403, 422, 500}

@endpoint GET /phone_numbers/jobs/{id}
@required {id: str}
@returns(200) {data: map{created_at: str, etc: str(date-time), failed_operations: [map], id: str(uuid), pending_operations: [map], phone_numbers: [map], record_type: str, status: str, successful_operations: [map], type: str, updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/messaging
@optional {page: map, filter[messaging_profile_id]: str(uuid), filter[phone_number]: str, filter[phone_number][contains]: str, filter[type]: str(tollfree/longcode/shortcode), sort[phone_number]: str(asc/desc)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /phone_numbers/slim
@optional {page: map, include_connection: bool=false, include_tags: bool=false, sort: str(purchased_at/phone_number/connection_name/usage_payment_method), filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/voice
@optional {page: map, sort: str(purchased_at/phone_number/connection_name/usage_payment_method), filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint DELETE /phone_numbers/{id}
@required {id: str}
@returns(200) {data: map{billing_group_id: str, call_forwarding_enabled: bool, call_recording_enabled: bool, caller_id_name_enabled: bool, cnam_listing_enabled: bool, connection_id: str, connection_name: str, created_at: str, customer_reference: str, deletion_lock_enabled: bool, emergency_address_id: str, emergency_enabled: bool, external_pin: str, hd_voice_enabled: bool, id: str, messaging_profile_id: str, messaging_profile_name: str, phone_number: str, phone_number_type: str, purchased_at: str, record_type: str, status: str, t38_fax_gateway_enabled: bool, tags: [str], updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/{id}
@required {id: str}
@returns(200) {data: map{billing_group_id: str?, call_forwarding_enabled: bool, call_recording_enabled: bool, caller_id_name_enabled: bool, cnam_listing_enabled: bool, connection_id: str?, connection_name: str?, country_iso_alpha2: str, created_at: str(date-time), customer_reference: str?, deletion_lock_enabled: bool, emergency_address_id: str?, emergency_enabled: bool, emergency_status: str, external_pin: str?, hd_voice_enabled: bool, id: str, inbound_call_screening: str, messaging_profile_id: str?, messaging_profile_name: str?, phone_number: str, phone_number_type: str, purchased_at: str, record_type: str, source_type: any, status: str, t38_fax_gateway_enabled: bool, tags: [str], updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /phone_numbers/{id}
@required {id: str}
@optional {address_id: str, billing_group_id: str, connection_id: str, customer_reference: str, external_pin: str, hd_voice_enabled: bool, id: str, tags: [str]}
@returns(200) {data: map{billing_group_id: str?, call_forwarding_enabled: bool, call_recording_enabled: bool, caller_id_name_enabled: bool, cnam_listing_enabled: bool, connection_id: str?, connection_name: str?, country_iso_alpha2: str, created_at: str(date-time), customer_reference: str?, deletion_lock_enabled: bool, emergency_address_id: str?, emergency_enabled: bool, emergency_status: str, external_pin: str?, hd_voice_enabled: bool, id: str, inbound_call_screening: str, messaging_profile_id: str?, messaging_profile_name: str?, phone_number: str, phone_number_type: str, purchased_at: str, record_type: str, source_type: any, status: str, t38_fax_gateway_enabled: bool, tags: [str], updated_at: str}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /phone_numbers/{id}/actions/bundle_status_change
@required {id: str, bundle_id: str}
@returns(200) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, connection_id: str, customer_reference: str, emergency: map{emergency_address_id: str, emergency_enabled: bool, emergency_status: str}, id: str, inbound_call_screening: str, media_features: map{accept_any_rtp_packets_enabled: bool, rtp_auto_adjust_enabled: bool, t38_fax_gateway_enabled: bool}, phone_number: str, record_type: str, tech_prefix_enabled: bool, translated_number: str, usage_payment_method: str}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /phone_numbers/{id}/actions/enable_emergency
@required {id: str, emergency_address_id: str, emergency_enabled: bool}
@returns(200) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, connection_id: str, customer_reference: str, emergency: map{emergency_address_id: str, emergency_enabled: bool, emergency_status: str}, id: str, inbound_call_screening: str, media_features: map{accept_any_rtp_packets_enabled: bool, rtp_auto_adjust_enabled: bool, t38_fax_gateway_enabled: bool}, phone_number: str, record_type: str, tech_prefix_enabled: bool, translated_number: str, usage_payment_method: str}}
@returns(202) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, connection_id: str, customer_reference: str, emergency: map{emergency_address_id: str, emergency_enabled: bool, emergency_status: str}, id: str, inbound_call_screening: str, media_features: map{accept_any_rtp_packets_enabled: bool, rtp_auto_adjust_enabled: bool, t38_fax_gateway_enabled: bool}, phone_number: str, record_type: str, tech_prefix_enabled: bool, translated_number: str, usage_payment_method: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/{id}/messaging
@required {id: str}
@returns(200) {data: map{country_code: str, created_at: str(date-time), eligible_messaging_products: [str], features: map{mms: map?, sms: map?}, health: map{inbound_outbound_ratio: num(float), message_count: int, spam_ratio: num(float), success_ratio: num(float)}, id: str, messaging_product: str, messaging_profile_id: str?, organization_id: str, phone_number: str, record_type: str, tags: [str], traffic_type: str, type: str, updated_at: str(date-time)}}
@errors {4XX}

@endpoint PATCH /phone_numbers/{id}/messaging
@required {id: str}
@optional {messaging_product: str, messaging_profile_id: str, tags: [str]}
@returns(200) {data: map{country_code: str, created_at: str(date-time), eligible_messaging_products: [str], features: map{mms: map?, sms: map?}, health: map{inbound_outbound_ratio: num(float), message_count: int, spam_ratio: num(float), success_ratio: num(float)}, id: str, messaging_product: str, messaging_profile_id: str?, organization_id: str, phone_number: str, record_type: str, tags: [str], traffic_type: str, type: str, updated_at: str(date-time)}}
@errors {4XX}

@endpoint GET /phone_numbers/{id}/voice
@required {id: str}
@returns(200) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, connection_id: str, customer_reference: str, emergency: map{emergency_address_id: str, emergency_enabled: bool, emergency_status: str}, id: str, inbound_call_screening: str, media_features: map{accept_any_rtp_packets_enabled: bool, rtp_auto_adjust_enabled: bool, t38_fax_gateway_enabled: bool}, phone_number: str, record_type: str, tech_prefix_enabled: bool, translated_number: str, usage_payment_method: str}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /phone_numbers/{id}/voice
@required {id: str}
@optional {call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, caller_id_name_enabled: bool=false, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, inbound_call_screening: str(disabled/reject_calls/flag_calls)=disabled, media_features: map{accept_any_rtp_packets_enabled: bool, rtp_auto_adjust_enabled: bool, t38_fax_gateway_enabled: bool}, tech_prefix_enabled: bool=false, translated_number: str, usage_payment_method: str(pay-per-minute/channel)=pay-per-minute}
@returns(200) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, connection_id: str, customer_reference: str, emergency: map{emergency_address_id: str, emergency_enabled: bool, emergency_status: str}, id: str, inbound_call_screening: str, media_features: map{accept_any_rtp_packets_enabled: bool, rtp_auto_adjust_enabled: bool, t38_fax_gateway_enabled: bool}, phone_number: str, record_type: str, tech_prefix_enabled: bool, translated_number: str, usage_payment_method: str}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /phone_numbers/{phone_number_id}/voicemail
@returns(200) {data: map{enabled: bool, pin: str}}
@errors {400, 401, 404}

@endpoint PATCH /phone_numbers/{phone_number_id}/voicemail
@optional {enabled: bool, pin: str}
@returns(200) {data: map{enabled: bool, pin: str}}
@errors {401, 404, 422}

@endpoint POST /phone_numbers/{phone_number_id}/voicemail
@optional {enabled: bool, pin: str}
@returns(200) {data: map{enabled: bool, pin: str}}
@errors {401, 404, 422}

@endgroup

@group phone_numbers_regulatory_requirements
@endpoint GET /phone_numbers_regulatory_requirements
@optional {filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group portability_checks
@endpoint POST /portability_checks
@optional {phone_numbers: [str]}
@returns(201) {data: [map]}
@errors {401, 422}

@endgroup

@group porting
@endpoint GET /porting/events
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422, 500}

@endpoint GET /porting/events/{id}
@required {id: str(uuid)}
@returns(200) {data: map}
@errors {404, 500}

@endpoint POST /porting/events/{id}/republish
@required {id: str(uuid)}
@returns(204)
@errors {404, 500}

@endpoint GET /porting/loa_configurations
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422, 500}

@endpoint POST /porting/loa_configurations
@required {address: map{city!: str, country_code!: str, extended_address: str, state!: str, street_address!: str, zip_code!: str}, company_name: str, contact: map{email!: str, phone_number!: str}, logo: map{document_id!: str(uuid)}, name: str}
@returns(201) {data: map{address: map{city: str, country_code: str, extended_address: str, state: str, street_address: str, zip_code: str}, company_name: str, contact: map{email: str, phone_number: str}, created_at: str(date-time), id: str(uuid), logo: map{content_type: str, document_id: str(uuid)}, name: str, organization_id: str, record_type: str, updated_at: str(date-time)}}
@errors {422, 500}

@endpoint POST /porting/loa_configurations/preview
@required {address: map{city!: str, country_code!: str, extended_address: str, state!: str, street_address!: str, zip_code!: str}, company_name: str, contact: map{email!: str, phone_number!: str}, logo: map{document_id!: str(uuid)}, name: str}
@returns(200)
@errors {422, 500}

@endpoint DELETE /porting/loa_configurations/{id}
@required {id: str(uuid)}
@returns(204)
@errors {404, 500}

@endpoint GET /porting/loa_configurations/{id}
@required {id: str(uuid)}
@returns(200) {data: map{address: map{city: str, country_code: str, extended_address: str, state: str, street_address: str, zip_code: str}, company_name: str, contact: map{email: str, phone_number: str}, created_at: str(date-time), id: str(uuid), logo: map{content_type: str, document_id: str(uuid)}, name: str, organization_id: str, record_type: str, updated_at: str(date-time)}}
@errors {404, 500}

@endpoint PATCH /porting/loa_configurations/{id}
@required {id: str(uuid), address: map{city!: str, country_code!: str, extended_address: str, state!: str, street_address!: str, zip_code!: str}, company_name: str, contact: map{email!: str, phone_number!: str}, logo: map{document_id!: str(uuid)}, name: str}
@returns(200) {data: map{address: map{city: str, country_code: str, extended_address: str, state: str, street_address: str, zip_code: str}, company_name: str, contact: map{email: str, phone_number: str}, created_at: str(date-time), id: str(uuid), logo: map{content_type: str, document_id: str(uuid)}, name: str, organization_id: str, record_type: str, updated_at: str(date-time)}}
@errors {404, 422, 500}

@endpoint GET /porting/loa_configurations/{id}/preview
@required {id: str(uuid)}
@returns(200)
@errors {404, 500}

@endpoint GET /porting/reports
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422, 500}

@endpoint POST /porting/reports
@required {params: any, report_type: str}
@returns(201) {data: map{created_at: str(date-time), document_id: str(uuid), id: str(uuid), params: any, record_type: str, report_type: str, status: str, updated_at: str(date-time)}}
@errors {422, 500}

@endpoint GET /porting/reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), document_id: str(uuid), id: str(uuid), params: any, record_type: str, report_type: str, status: str, updated_at: str(date-time)}}
@errors {404, 500}

@endpoint GET /porting/uk_carriers
@returns(200) {data: [map]}
@errors {422, 500}

@endgroup

@group porting_orders
@endpoint GET /porting_orders
@optional {page: map, include_phone_numbers: bool=true, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /porting_orders
@required {phone_numbers: [str]}
@optional {customer_group_reference: str, customer_reference: str}
@returns(201) {data: [map]}
@errors {401, 422}

@endpoint GET /porting_orders/exception_types
@returns(200) {data: [map]}
@errors {401, 422}

@endpoint GET /porting_orders/phone_number_configurations
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /porting_orders/phone_number_configurations
@optional {phone_number_configurations: [map{porting_phone_number_id!: str(uuid), user_bundle_id!: str(uuid)}]}
@returns(201) {data: [map]}
@errors {401, 422}

@endpoint DELETE /porting_orders/{id}
@required {id: str(uuid)}
@returns(204)
@errors {401, 422}

@endpoint GET /porting_orders/{id}
@required {id: str(uuid)}
@optional {include_phone_numbers: bool=true}
@returns(200) {data: map{activation_settings: map{activation_status: any, fast_port_eligible: bool, foc_datetime_actual: str(date-time)?, foc_datetime_requested: str(date-time)?}, additional_steps: [str], created_at: str(date-time), customer_group_reference: str?, customer_reference: str?, description: str, documents: map{invoice: str(uuid)?, loa: str(uuid)?}, end_user: map{admin: map{account_number: str?, auth_person_name: str?, billing_phone_number: str?, business_identifier: str?, entity_name: str?, pin_passcode: str?, tax_identifier: str?}, location: map{administrative_area: str?, country_code: str?, extended_address: str?, locality: str?, postal_code: str?, street_address: str?}}, id: str(uuid), messaging: map{enable_messaging: bool, messaging_capable: bool, messaging_port_completed: bool, messaging_port_status: str}, misc: any, old_service_provider_ocn: str, parent_support_key: str?, phone_number_configuration: map{billing_group_id: str?, connection_id: str?, emergency_address_id: str?, messaging_profile_id: str?, tags: [str]}, phone_number_type: str, phone_numbers: [map], porting_phone_numbers_count: int, record_type: str, requirements: [map], requirements_met: bool, status: map{details: [map], value: str}, support_key: str?, updated_at: str(date-time), user_feedback: map{user_comment: str?, user_rating: int?}, user_id: str(uuid), webhook_url: str(uri)?}, meta: map{phone_numbers_url: str}}
@errors {401}

@endpoint PATCH /porting_orders/{id}
@required {id: str(uuid)}
@optional {activation_settings: map{foc_datetime_requested: str(date-time)}, customer_group_reference: str, customer_reference: str, documents: map{invoice: str(uuid), loa: str(uuid)}, end_user: map{admin: map, location: map}, messaging: map{enable_messaging: bool}, misc: any, phone_number_configuration: map{billing_group_id: str, connection_id: str, emergency_address_id: str, messaging_profile_id: str, tags: [str]}, requirement_group_id: str(uuid), requirements: [map{field_value!: str, requirement_type_id!: str}], user_feedback: map{user_comment: str, user_rating: int}, webhook_url: str(uri)}
@returns(200) {data: map{activation_settings: map{activation_status: any, fast_port_eligible: bool, foc_datetime_actual: str(date-time)?, foc_datetime_requested: str(date-time)?}, additional_steps: [str], created_at: str(date-time), customer_group_reference: str?, customer_reference: str?, description: str, documents: map{invoice: str(uuid)?, loa: str(uuid)?}, end_user: map{admin: map{account_number: str?, auth_person_name: str?, billing_phone_number: str?, business_identifier: str?, entity_name: str?, pin_passcode: str?, tax_identifier: str?}, location: map{administrative_area: str?, country_code: str?, extended_address: str?, locality: str?, postal_code: str?, street_address: str?}}, id: str(uuid), messaging: map{enable_messaging: bool, messaging_capable: bool, messaging_port_completed: bool, messaging_port_status: str}, misc: any, old_service_provider_ocn: str, parent_support_key: str?, phone_number_configuration: map{billing_group_id: str?, connection_id: str?, emergency_address_id: str?, messaging_profile_id: str?, tags: [str]}, phone_number_type: str, phone_numbers: [map], porting_phone_numbers_count: int, record_type: str, requirements: [map], requirements_met: bool, status: map{details: [map], value: str}, support_key: str?, updated_at: str(date-time), user_feedback: map{user_comment: str?, user_rating: int?}, user_id: str(uuid), webhook_url: str(uri)?}, meta: map{phone_numbers_url: str}}
@errors {401, 422}

@endpoint POST /porting_orders/{id}/actions/activate
@required {id: str(uuid)}
@returns(202) {data: map{activate_at: str(date-time), activation_type: str, activation_windows: [map], created_at: str(date-time), id: str(uuid), record_type: str, status: str, updated_at: str(date-time)}}
@errors {401, 422}

@endpoint POST /porting_orders/{id}/actions/cancel
@required {id: str(uuid)}
@returns(200) {data: map{activation_settings: map{activation_status: any, fast_port_eligible: bool, foc_datetime_actual: str(date-time)?, foc_datetime_requested: str(date-time)?}, additional_steps: [str], created_at: str(date-time), customer_group_reference: str?, customer_reference: str?, description: str, documents: map{invoice: str(uuid)?, loa: str(uuid)?}, end_user: map{admin: map{account_number: str?, auth_person_name: str?, billing_phone_number: str?, business_identifier: str?, entity_name: str?, pin_passcode: str?, tax_identifier: str?}, location: map{administrative_area: str?, country_code: str?, extended_address: str?, locality: str?, postal_code: str?, street_address: str?}}, id: str(uuid), messaging: map{enable_messaging: bool, messaging_capable: bool, messaging_port_completed: bool, messaging_port_status: str}, misc: any, old_service_provider_ocn: str, parent_support_key: str?, phone_number_configuration: map{billing_group_id: str?, connection_id: str?, emergency_address_id: str?, messaging_profile_id: str?, tags: [str]}, phone_number_type: str, phone_numbers: [map], porting_phone_numbers_count: int, record_type: str, requirements: [map], requirements_met: bool, status: map{details: [map], value: str}, support_key: str?, updated_at: str(date-time), user_feedback: map{user_comment: str?, user_rating: int?}, user_id: str(uuid), webhook_url: str(uri)?}, meta: map{phone_numbers_url: str}}
@errors {401, 422}

@endpoint POST /porting_orders/{id}/actions/confirm
@required {id: str(uuid)}
@returns(200) {data: map{activation_settings: map{activation_status: any, fast_port_eligible: bool, foc_datetime_actual: str(date-time)?, foc_datetime_requested: str(date-time)?}, additional_steps: [str], created_at: str(date-time), customer_group_reference: str?, customer_reference: str?, description: str, documents: map{invoice: str(uuid)?, loa: str(uuid)?}, end_user: map{admin: map{account_number: str?, auth_person_name: str?, billing_phone_number: str?, business_identifier: str?, entity_name: str?, pin_passcode: str?, tax_identifier: str?}, location: map{administrative_area: str?, country_code: str?, extended_address: str?, locality: str?, postal_code: str?, street_address: str?}}, id: str(uuid), messaging: map{enable_messaging: bool, messaging_capable: bool, messaging_port_completed: bool, messaging_port_status: str}, misc: any, old_service_provider_ocn: str, parent_support_key: str?, phone_number_configuration: map{billing_group_id: str?, connection_id: str?, emergency_address_id: str?, messaging_profile_id: str?, tags: [str]}, phone_number_type: str, phone_numbers: [map], porting_phone_numbers_count: int, record_type: str, requirements: [map], requirements_met: bool, status: map{details: [map], value: str}, support_key: str?, updated_at: str(date-time), user_feedback: map{user_comment: str?, user_rating: int?}, user_id: str(uuid), webhook_url: str(uri)?}, meta: map{phone_numbers_url: str}}
@errors {401, 422}

@endpoint POST /porting_orders/{id}/actions/share
@required {id: str(uuid)}
@optional {expires_in_seconds: int, permissions: str(porting_order.document.read/porting_order.document.update)}
@returns(201) {data: map{created_at: str(date-time), expires_at: str(date-time), expires_in_seconds: int, id: str(uuid), permissions: [str], porting_order_id: str(uuid), record_type: str, token: str}}
@errors {401, 404}

@endpoint GET /porting_orders/{id}/activation_jobs
@required {id: str(uuid)}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint GET /porting_orders/{id}/activation_jobs/{activationJobId}
@required {id: str(uuid), activationJobId: str(uuid)}
@returns(200) {data: map{activate_at: str(date-time), activation_type: str, activation_windows: [map], created_at: str(date-time), id: str(uuid), record_type: str, status: str, updated_at: str(date-time)}}
@errors {401, 422}

@endpoint PATCH /porting_orders/{id}/activation_jobs/{activationJobId}
@required {id: str(uuid), activationJobId: str(uuid)}
@optional {activate_at: str(date-time)}
@returns(200) {data: map{activate_at: str(date-time), activation_type: str, activation_windows: [map], created_at: str(date-time), id: str(uuid), record_type: str, status: str, updated_at: str(date-time)}}
@errors {404, 422}

@endpoint GET /porting_orders/{id}/additional_documents
@required {id: str(uuid)}
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404}

@endpoint POST /porting_orders/{id}/additional_documents
@required {id: str(uuid)}
@optional {additional_documents: [map{document_id: str(uuid), document_type: str}]}
@returns(201) {data: [map]}
@errors {401, 404, 422}

@endpoint DELETE /porting_orders/{id}/additional_documents/{additional_document_id}
@required {id: str(uuid), additional_document_id: str(uuid)}
@returns(204)
@errors {401, 404}

@endpoint GET /porting_orders/{id}/allowed_foc_windows
@required {id: str(uuid)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint GET /porting_orders/{id}/comments
@required {id: str(uuid)}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /porting_orders/{id}/comments
@required {id: str(uuid)}
@optional {body: str}
@returns(201) {data: map{body: str, created_at: str(date-time), id: str(uuid), porting_order_id: str(uuid), record_type: str, user_type: str}}
@errors {401, 422}

@endpoint GET /porting_orders/{id}/loa_template
@required {id: str(uuid)}
@optional {loa_configuration_id: str(uuid)}
@returns(200)
@errors {401}

@endpoint GET /porting_orders/{id}/requirements
@required {id: str(uuid)}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint GET /porting_orders/{id}/sub_request
@required {id: str(uuid)}
@returns(200) {data: map{port_request_id: str, sub_request_id: str}}
@errors {401, 404}

@endpoint GET /porting_orders/{id}/verification_codes
@required {id: str(uuid)}
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404}

@endpoint POST /porting_orders/{id}/verification_codes/send
@required {id: str(uuid)}
@optional {phone_numbers: [str], verification_method: str(sms/call)}
@returns(204)
@errors {401, 404, 422}

@endpoint POST /porting_orders/{id}/verification_codes/verify
@required {id: str(uuid)}
@optional {verification_codes: [map{code: str, phone_number: str}]}
@returns(200) {data: [map]}
@errors {401, 404, 422}

@endpoint GET /porting_orders/{porting_order_id}/action_requirements
@required {porting_order_id: str}
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 500}

@endpoint POST /porting_orders/{porting_order_id}/action_requirements/{id}/initiate
@required {porting_order_id: str, id: str, params: any}
@returns(200) {data: map{action_type: str, action_url: str?, cancel_reason: str?, created_at: str(date-time), id: str, porting_order_id: str, record_type: str, requirement_type_id: str, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /porting_orders/{porting_order_id}/associated_phone_numbers
@required {porting_order_id: str(uuid)}
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint POST /porting_orders/{porting_order_id}/associated_phone_numbers
@required {porting_order_id: str(uuid), action: str(keep/disconnect), phone_number_range: map{end_at: str, start_at: str}}
@returns(201) {data: map{action: str, country_code: str, created_at: str(date-time), id: str(uuid), phone_number_range: map{end_at: str, start_at: str}, phone_number_type: str, porting_order_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {404, 422}

@endpoint DELETE /porting_orders/{porting_order_id}/associated_phone_numbers/{id}
@required {porting_order_id: str(uuid), id: str(uuid)}
@returns(200) {data: map{action: str, country_code: str, created_at: str(date-time), id: str(uuid), phone_number_range: map{end_at: str, start_at: str}, phone_number_type: str, porting_order_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {404, 422}

@endpoint GET /porting_orders/{porting_order_id}/phone_number_blocks
@required {porting_order_id: str(uuid)}
@optional {filter: map, page: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint POST /porting_orders/{porting_order_id}/phone_number_blocks
@required {porting_order_id: str(uuid), activation_ranges: [map{end_at!: str, start_at!: str}], phone_number_range: map{end_at!: str, start_at!: str}}
@returns(201) {data: map{activation_ranges: [map], country_code: str, created_at: str(date-time), id: str(uuid), phone_number_range: map{end_at: str, start_at: str}, phone_number_type: str, record_type: str, updated_at: str(date-time)}}
@errors {404, 422}

@endpoint DELETE /porting_orders/{porting_order_id}/phone_number_blocks/{id}
@required {porting_order_id: str(uuid), id: str(uuid)}
@returns(200) {data: map{activation_ranges: [map], country_code: str, created_at: str(date-time), id: str(uuid), phone_number_range: map{end_at: str, start_at: str}, phone_number_type: str, record_type: str, updated_at: str(date-time)}}
@errors {404, 422}

@endpoint GET /porting_orders/{porting_order_id}/phone_number_extensions
@required {porting_order_id: str(uuid)}
@optional {page: map, filter: map, sort: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint POST /porting_orders/{porting_order_id}/phone_number_extensions
@required {porting_order_id: str(uuid), activation_ranges: [map{end_at!: int, start_at!: int}], extension_range: map{end_at!: int, start_at!: int}, porting_phone_number_id: str(uuid)}
@returns(201) {data: map{activation_ranges: [map], created_at: str(date-time), extension_range: map{end_at: int, start_at: int}, id: str(uuid), porting_phone_number_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {404, 422}

@endpoint DELETE /porting_orders/{porting_order_id}/phone_number_extensions/{id}
@required {porting_order_id: str(uuid), id: str(uuid)}
@returns(200) {data: map{activation_ranges: [map], created_at: str(date-time), extension_range: map{end_at: int, start_at: int}, id: str(uuid), porting_phone_number_id: str(uuid), record_type: str, updated_at: str(date-time)}}
@errors {404, 422}

@endgroup

@group porting_phone_numbers
@endpoint GET /porting_phone_numbers
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endgroup

@group portouts
@endpoint GET /portouts
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: num(integer), page_size: num(integer), total_pages: num(integer), total_results: num(integer)}}
@errors {401, 404, 422}

@endpoint GET /portouts/events
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422, 500}

@endpoint GET /portouts/events/{id}
@required {id: str(uuid)}
@returns(200) {data: map}
@errors {404, 500}

@endpoint POST /portouts/events/{id}/republish
@required {id: str(uuid)}
@returns(204)
@errors {404, 500}

@endpoint GET /portouts/rejections/{portout_id}
@required {portout_id: str}
@optional {filter: map}
@returns(200) {data: [map]}
@errors {404, 422, 500}

@endpoint GET /portouts/reports
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422, 500}

@endpoint POST /portouts/reports
@required {params: any, report_type: str}
@returns(201) {data: map{created_at: str(date-time), document_id: str(uuid), id: str(uuid), params: any, record_type: str, report_type: str, status: str, updated_at: str(date-time)}}
@errors {422, 500}

@endpoint GET /portouts/reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), document_id: str(uuid), id: str(uuid), params: any, record_type: str, report_type: str, status: str, updated_at: str(date-time)}}
@errors {404, 500}

@endpoint GET /portouts/{id}
@required {id: str(uuid)}
@returns(200) {data: map{already_ported: bool, authorized_name: str, carrier_name: str, city: str, created_at: str, current_carrier: str, end_user_name: str, foc_date: str, host_messaging: bool, id: str, inserted_at: str, lsr: [str(uri)], phone_numbers: [str], pon: str, reason: str?, record_type: str, rejection_code: int, requested_foc_date: str, service_address: str, spid: str, state: str, status: str, support_key: str, updated_at: str, user_id: str(uuid), vendor: str(uuid), zip: str}}
@errors {401, 404, 422}

@endpoint GET /portouts/{id}/comments
@required {id: str(uuid)}
@returns(200) {data: [map], meta: map{page_number: num(integer), page_size: num(integer), total_pages: num(integer), total_results: num(integer)}}
@errors {401, 404, 422}

@endpoint POST /portouts/{id}/comments
@required {id: str(uuid)}
@optional {body: str}
@returns(201) {data: map{body: str, created_at: str, id: str, portout_id: str, record_type: str, user_id: str}}
@errors {401, 404, 422}

@endpoint GET /portouts/{id}/supporting_documents
@required {id: str(uuid)}
@returns(201) {data: [map]}
@errors {401, 404}

@endpoint POST /portouts/{id}/supporting_documents
@required {id: str(uuid)}
@optional {documents: [map{document_id!: str(uuid), type!: str}]}
@returns(201) {data: [map]}
@errors {401, 404, 422}

@endpoint PATCH /portouts/{id}/{status}
@required {id: str(uuid), status: str(authorized/rejected-pending), reason: str}
@optional {host_messaging: bool=false}
@returns(200) {data: map{already_ported: bool, authorized_name: str, carrier_name: str, city: str, created_at: str, current_carrier: str, end_user_name: str, foc_date: str, host_messaging: bool, id: str, inserted_at: str, lsr: [str(uri)], phone_numbers: [str], pon: str, reason: str?, record_type: str, rejection_code: int, requested_foc_date: str, service_address: str, spid: str, state: str, status: str, support_key: str, updated_at: str, user_id: str(uuid), vendor: str(uuid), zip: str}}
@errors {401, 404, 422}

@endgroup

@group private_wireless_gateways
@endpoint GET /private_wireless_gateways
@optional {page[number]: int=1, page[size]: int=20, filter[name]: str, filter[ip_range]: str, filter[region_code]: str, filter[created_at]: str, filter[updated_at]: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /private_wireless_gateways
@required {name: str, network_id: str(uuid)}
@optional {region_code: str}
@returns(202) {data: map{assigned_resources: [map], created_at: str, id: str(uuid), ip_range: str, name: str, network_id: str(uuid), record_type: str, region_code: str, status: map{error_code: str?, error_description: str?, value: str}, updated_at: str}}
@errors {422}

@endpoint DELETE /private_wireless_gateways/{id}
@required {id: str(uuid)}
@returns(200) {data: map{assigned_resources: [map], created_at: str, id: str(uuid), ip_range: str, name: str, network_id: str(uuid), record_type: str, region_code: str, status: map{error_code: str?, error_description: str?, value: str}, updated_at: str}}
@errors {404}

@endpoint GET /private_wireless_gateways/{id}
@required {id: str(uuid)}
@returns(200) {data: map{assigned_resources: [map], created_at: str, id: str(uuid), ip_range: str, name: str, network_id: str(uuid), record_type: str, region_code: str, status: map{error_code: str?, error_description: str?, value: str}, updated_at: str}}
@errors {404}

@endgroup

@group public_internet_gateways
@endpoint GET /public_internet_gateways
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /public_internet_gateways
@returns(202) {data: any}
@errors {422}

@endpoint DELETE /public_internet_gateways/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /public_internet_gateways/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endgroup

@group queues
@endpoint GET /queues
@optional {page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /queues
@required {queue_name: str}
@optional {max_size: int=300}
@returns(200) {data: map{average_wait_time_secs: int, created_at: str, current_size: int, id: str, max_size: int, name: str, record_type: str, updated_at: str}}
@errors {401, 422}

@endpoint DELETE /queues/{queue_name}
@required {queue_name: str}
@returns(204)
@errors {401, 404}

@endpoint GET /queues/{queue_name}
@required {queue_name: str}
@returns(200) {data: map{average_wait_time_secs: int, created_at: str, current_size: int, id: str, max_size: int, name: str, record_type: str, updated_at: str}}
@errors {404}

@endpoint POST /queues/{queue_name}
@required {queue_name: str, max_size: int}
@returns(200) {data: map{average_wait_time_secs: int, created_at: str, current_size: int, id: str, max_size: int, name: str, record_type: str, updated_at: str}}
@errors {401, 404, 422}

@endpoint GET /queues/{queue_name}/calls
@required {queue_name: str}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {404}

@endpoint DELETE /queues/{queue_name}/calls/{call_control_id}
@required {queue_name: str, call_control_id: str}
@returns(204)
@errors {404}

@endpoint GET /queues/{queue_name}/calls/{call_control_id}
@required {queue_name: str, call_control_id: str}
@returns(200) {data: map{call_control_id: str, call_leg_id: str, call_session_id: str, connection_id: str, enqueued_at: str, from: str, is_alive: bool, queue_id: str, queue_position: int, record_type: str, to: str, wait_time_secs: int}}
@errors {404}

@endpoint PATCH /queues/{queue_name}/calls/{call_control_id}
@required {queue_name: str, call_control_id: str}
@optional {keep_after_hangup: bool}
@returns(204)
@errors {404}

@endgroup

@group recording_transcriptions
@endpoint GET /recording_transcriptions
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{cursors: map{after: str, before: str}, next: str, previous: str}}
@errors {401, 404}

@endpoint DELETE /recording_transcriptions/{recording_transcription_id}
@required {recording_transcription_id: str(uuid)}
@returns(200) {data: map{created_at: str, duration_millis: int(int32), id: str, record_type: str, recording_id: str, status: str, transcription_text: str, updated_at: str}}
@errors {401, 404}

@endpoint GET /recording_transcriptions/{recording_transcription_id}
@required {recording_transcription_id: str(uuid)}
@returns(200) {data: map{created_at: str, duration_millis: int(int32), id: str, record_type: str, recording_id: str, status: str, transcription_text: str, updated_at: str}}
@errors {401, 404}

@endgroup

@group recordings
@endpoint GET /recordings
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 403, 404, 500}

@endpoint POST /recordings/actions/delete
@required {ids: [str]}
@returns(200) {status: str}
@errors {401, 404}

@endpoint DELETE /recordings/{recording_id}
@required {recording_id: str}
@returns(200) {data: map{call_control_id: str, call_leg_id: str, call_session_id: str, channels: str, conference_id: str, connection_id: str, created_at: str, download_urls: map{mp3: str, wav: str}, duration_millis: int(int32), from: str, id: str, initiated_by: str, record_type: str, recording_ended_at: str, recording_started_at: str, source: str, status: str, to: str, updated_at: str}}
@errors {401, 404}

@endpoint GET /recordings/{recording_id}
@required {recording_id: str}
@returns(200) {data: map{call_control_id: str, call_leg_id: str, call_session_id: str, channels: str, conference_id: str, connection_id: str, created_at: str, download_urls: map{mp3: str, wav: str}, duration_millis: int(int32), from: str, id: str, initiated_by: str, record_type: str, recording_ended_at: str, recording_started_at: str, source: str, status: str, to: str, updated_at: str}}
@errors {401, 404}

@endgroup

@group regions
@endpoint GET /regions
@returns(200) {data: [map]}
@errors {422}

@endgroup

@group regulatory_requirements
@endpoint GET /regulatory_requirements
@optional {filter: map}
@returns(200) {data: [map]}
@errors {400, 401, 404, 422, 500}

@endgroup

@group reports
@endpoint GET /reports/cdr_usage_reports/sync
@required {aggregation_type: str(NO_AGGREGATION/CONNECTION/TAG/BILLING_GROUP), product_breakdown: str(NO_BREAKDOWN/DID_VS_TOLL_FREE/COUNTRY/DID_VS_TOLL_FREE_PER_COUNTRY)}
@optional {start_date: str(date-time), end_date: str(date-time), connections: [num]}
@returns(200) {data: map{aggregation_type: str, connections: [int(int64)], created_at: str(date-time), end_time: str(date-time), id: str(uuid), product_breakdown: str, record_type: str, report_url: str, result: map, start_time: str(date-time), status: str, updated_at: str(date-time)}}
@errors {400}

@endpoint GET /reports/mdr_usage_reports
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400}

@endpoint POST /reports/mdr_usage_reports
@returns(200) {data: map{aggregation_type: str, connections: [int(int64)], created_at: str(date-time), end_date: str(date-time), id: str(uuid), profiles: str, record_type: str, report_url: str, result: [map], start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {400}

@endpoint GET /reports/mdr_usage_reports/sync
@required {aggregation_type: str(NO_AGGREGATION/PROFILE/TAGS)}
@optional {start_date: str(date-time), end_date: str(date-time), profiles: [str]}
@returns(200) {data: map{aggregation_type: str, connections: [int(int64)], created_at: str(date-time), end_date: str(date-time), id: str(uuid), profiles: str, record_type: str, report_url: str, result: [map], start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {400}

@endpoint DELETE /reports/mdr_usage_reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{aggregation_type: str, connections: [int(int64)], created_at: str(date-time), end_date: str(date-time), id: str(uuid), profiles: str, record_type: str, report_url: str, result: [map], start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {400}

@endpoint GET /reports/mdr_usage_reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{aggregation_type: str, connections: [int(int64)], created_at: str(date-time), end_date: str(date-time), id: str(uuid), profiles: str, record_type: str, report_url: str, result: [map], start_date: str(date-time), status: str, updated_at: str(date-time)}}
@errors {400}

@endpoint GET /reports/mdrs
@optional {start_date: str, end_date: str, id: str, direction: str(INBOUND/OUTBOUND), profile: str, cld: str, cli: str, status: str(GW_TIMEOUT/DELIVERED/DLR_UNCONFIRMED/DLR_TIMEOUT/RECEIVED/GW_REJECT/FAILED), message_type: str(SMS/MMS)}
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400}

@endpoint GET /reports/wdrs
@optional {start_date: str, end_date: str, id: str, mcc: str, mnc: str, imsi: str, sim_group_name: str, sim_group_id: str, sim_card_id: str, phone_number: str, sort: [str]=created_at, page: map}
@returns(200) {data: [map], meta: map{page_number: int(int32), page_size: int(int32), total_pages: int(int32), total_results: int(int32)}}
@errors {400}

@endgroup

@group reputation
@endpoint GET /reputation/numbers
@optional {page[number]: int=1, page[size]: int=10, phone_number: str}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint DELETE /reputation/numbers/{phone_number}
@required {phone_number: str}
@returns(204)
@errors {401, 404}

@endpoint GET /reputation/numbers/{phone_number}
@required {phone_number: str}
@optional {fresh: bool=false}
@returns(200) {data: any}
@errors {401, 404}

@endgroup

@group requirement_groups
@endpoint GET /requirement_groups
@optional {filter: map}
@returns(200)
@errors {400, 401, 422, 500}

@endpoint POST /requirement_groups
@required {action: str(ordering/porting), country_code: str, phone_number_type: str(local/toll_free/mobile/national/shared_cost)}
@optional {customer_reference: str, regulatory_requirements: [map{field_value: str, requirement_id: str}]}
@returns(200) {action: str, country_code: str, created_at: str(date-time), customer_reference: str, id: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], status: str, updated_at: str(date-time)}
@errors {400, 401, 422, 500}

@endpoint DELETE /requirement_groups/{id}
@required {id: str}
@returns(200) {action: str, country_code: str, created_at: str(date-time), customer_reference: str, id: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], status: str, updated_at: str(date-time)}
@errors {400, 401, 404, 422, 500}

@endpoint GET /requirement_groups/{id}
@required {id: str}
@returns(200) {action: str, country_code: str, created_at: str(date-time), customer_reference: str, id: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], status: str, updated_at: str(date-time)}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /requirement_groups/{id}
@required {id: str}
@optional {customer_reference: str, regulatory_requirements: [map{field_value: str, requirement_id: str}]}
@returns(200) {action: str, country_code: str, created_at: str(date-time), customer_reference: str, id: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], status: str, updated_at: str(date-time)}
@errors {400, 401, 404, 422, 500}

@endpoint POST /requirement_groups/{id}/submit_for_approval
@required {id: str}
@returns(200) {action: str, country_code: str, created_at: str(date-time), customer_reference: str, id: str, phone_number_type: str, record_type: str, regulatory_requirements: [map], status: str, updated_at: str(date-time)}
@errors {400, 401, 404, 422, 500}

@endgroup

@group requirement_types
@endpoint GET /requirement_types
@optional {filter: map, sort: [str]}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint GET /requirement_types/{id}
@required {id: str(uuid)}
@returns(200) {data: map{acceptance_criteria: map{acceptable_characters: str, acceptable_values: [str], locality_limit: str, max_length: int, min_length: int, time_limit: str}, created_at: str, description: str, example: str, id: str(uuid), name: str, record_type: str, type: str, updated_at: str}}
@errors {422}

@endgroup

@group requirements
@endpoint GET /requirements
@optional {filter: map, sort: [str], page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint GET /requirements/{id}
@required {id: str(uuid)}
@returns(200) {data: map{action: str, country_code: str, created_at: str, id: str(uuid), locality: str, phone_number_type: str, record_type: str, requirements_types: [map], updated_at: str}}
@errors {422}

@endgroup

@group room_compositions
@endpoint GET /room_compositions
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /room_compositions
@optional {format: str=mp4, resolution: str=1280x720, session_id: str(uuid), video_layout: map, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(202) {data: map{completed_at: str(date-time), created_at: str(date-time), download_url: str, duration_secs: int, ended_at: str(date-time), format: str, id: str(uuid), record_type: str, resolution: str, room_id: str(uuid), session_id: str(uuid), size_mb: num(float), started_at: str(date-time), status: str, updated_at: str(date-time), user_id: str(uuid), video_layout: map, webhook_event_failover_url: str(uri), webhook_event_url: str(uri), webhook_timeout_secs: int}}
@errors {422}

@endpoint DELETE /room_compositions/{room_composition_id}
@required {room_composition_id: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /room_compositions/{room_composition_id}
@required {room_composition_id: str(uuid)}
@returns(200) {data: map{completed_at: str(date-time), created_at: str(date-time), download_url: str, duration_secs: int, ended_at: str(date-time), format: str, id: str(uuid), record_type: str, resolution: str, room_id: str(uuid), session_id: str(uuid), size_mb: num(float), started_at: str(date-time), status: str, updated_at: str(date-time), user_id: str(uuid), video_layout: map, webhook_event_failover_url: str(uri), webhook_event_url: str(uri), webhook_timeout_secs: int}}
@errors {404}

@endgroup

@group room_participants
@endpoint GET /room_participants
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /room_participants/{room_participant_id}
@required {room_participant_id: str(uuid)}
@returns(200) {data: map{context: str, id: str(uuid), joined_at: str(date-time), left_at: str(date-time), record_type: str, session_id: str(uuid), updated_at: str(date-time)}}
@errors {404}

@endgroup

@group room_recordings
@endpoint DELETE /room_recordings
@optional {filter: map, page: map}
@returns(201) {data: map{room_recordings: int}}
@errors {422}

@endpoint GET /room_recordings
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint DELETE /room_recordings/{room_recording_id}
@required {room_recording_id: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /room_recordings/{room_recording_id}
@required {room_recording_id: str(uuid)}
@returns(200) {data: map{codec: str, completed_at: str(date-time), created_at: str(date-time), download_url: str, duration_secs: int, ended_at: str(date-time), id: str(uuid), participant_id: str(uuid), record_type: str, room_id: str(uuid), session_id: str(uuid), size_mb: num(float), started_at: str(date-time), status: str, type: str, updated_at: str(date-time)}}
@errors {404}

@endgroup

@group room_sessions
@endpoint GET /room_sessions
@optional {include_participants: bool, filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /room_sessions/{room_session_id}
@required {room_session_id: str(uuid)}
@optional {include_participants: bool}
@returns(200) {data: map{active: bool, created_at: str(date-time), ended_at: str(date-time), id: str(uuid), participants: [map], record_type: str, room_id: str(uuid), updated_at: str(date-time)}}
@errors {404}

@endpoint POST /room_sessions/{room_session_id}/actions/end
@required {room_session_id: str(uuid)}
@returns(200) {data: map{result: str}}
@errors {4XX}

@endpoint POST /room_sessions/{room_session_id}/actions/kick
@required {room_session_id: str(uuid)}
@optional {exclude: [str(uuid)], participants: any}
@returns(200) {data: map{result: str}}
@errors {4XX}

@endpoint POST /room_sessions/{room_session_id}/actions/mute
@required {room_session_id: str(uuid)}
@optional {exclude: [str(uuid)], participants: any}
@returns(200) {data: map{result: str}}
@errors {4XX}

@endpoint POST /room_sessions/{room_session_id}/actions/unmute
@required {room_session_id: str(uuid)}
@optional {exclude: [str(uuid)], participants: any}
@returns(200) {data: map{result: str}}
@errors {4XX}

@endpoint GET /room_sessions/{room_session_id}/participants
@required {room_session_id: str(uuid)}
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endgroup

@group rooms
@endpoint GET /rooms
@optional {include_sessions: bool, filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /rooms
@optional {enable_recording: bool=false, max_participants: int=10, unique_name: str, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(201) {data: map{active_session_id: str(uuid), created_at: str(date-time), enable_recording: bool, id: str(uuid), max_participants: int, record_type: str, sessions: [map], unique_name: str, updated_at: str(date-time), webhook_event_failover_url: str(uri), webhook_event_url: str(uri), webhook_timeout_secs: int}}
@errors {422}

@endpoint DELETE /rooms/{room_id}
@required {room_id: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /rooms/{room_id}
@required {room_id: str(uuid)}
@optional {include_sessions: bool}
@returns(200) {data: map{active_session_id: str(uuid), created_at: str(date-time), enable_recording: bool, id: str(uuid), max_participants: int, record_type: str, sessions: [map], unique_name: str, updated_at: str(date-time), webhook_event_failover_url: str(uri), webhook_event_url: str(uri), webhook_timeout_secs: int}}
@errors {404}

@endpoint PATCH /rooms/{room_id}
@required {room_id: str(uuid)}
@optional {enable_recording: bool=false, max_participants: int=10, unique_name: str, webhook_event_failover_url: str(uri)=, webhook_event_url: str(uri), webhook_timeout_secs: int=null}
@returns(200) {data: map{active_session_id: str(uuid), created_at: str(date-time), enable_recording: bool, id: str(uuid), max_participants: int, record_type: str, sessions: [map], unique_name: str, updated_at: str(date-time), webhook_event_failover_url: str(uri), webhook_event_url: str(uri), webhook_timeout_secs: int}}
@errors {401, 404, 422}

@endpoint POST /rooms/{room_id}/actions/generate_join_client_token
@required {room_id: str(uuid)}
@optional {refresh_token_ttl_secs: int=3600, token_ttl_secs: int=600}
@returns(201) {data: map{refresh_token: str, refresh_token_expires_at: str(date-time), token: str, token_expires_at: str(date-time)}}
@errors {403}

@endpoint POST /rooms/{room_id}/actions/refresh_client_token
@required {room_id: str(uuid), refresh_token: str}
@optional {token_ttl_secs: int=600}
@returns(201) {data: map{token: str, token_expires_at: str(date-time)}}
@errors {403}

@endpoint GET /rooms/{room_id}/sessions
@required {room_id: str(uuid)}
@optional {include_participants: bool, filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endgroup

@group session_analysis
@endpoint GET /session_analysis/metadata
@returns(200) {meta: map{last_updated: str(date-time), total_record_types: int}, query_parameters: map, record_types: [map]}
@errors {401, 500}

@endpoint GET /session_analysis/metadata/{record_type}
@required {record_type: str}
@returns(200) {aliases: [str], child_relationships: [map], event: str, examples: map, meta: map{max_recommended_depth: int, total_children: int, total_parents: int, total_siblings: int}, parent_relationships: [map], product: str, record_type: str}
@errors {404, 500}

@endpoint GET /session_analysis/{record_type}/{event_id}
@required {record_type: str, event_id: str(uuid)}
@optional {include_children: bool=true, max_depth: int=2, expand: str(record/none)=record, date_time: str(date-time)}
@returns(200) {completed_at: str(date-time)?, cost: map{currency: str, total: str}, created_at: str(date-time), meta: map{event_count: int, products: [str]}, root: map{children: [map], cost: map{cumulative_cost: str, currency: str, event_cost: str}, event_name: str, id: str, links: map{records: str, self: str}, product: str, record: map, relationship: any}, session_id: str, status: str}
@errors {400, 403, 404, 500}

@endgroup

@group seti
@endpoint GET /seti/black_box_test_results
@optional {filter: map}
@returns(200) {data: [map]}
@errors {401}

@endgroup

@group short_codes
@endpoint GET /short_codes
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint GET /short_codes/{id}
@required {id: str(uuid)}
@returns(200) {data: map{country_code: str, created_at: str(date-time), id: str(uuid), messaging_profile_id: str?, record_type: str, short_code: str, tags: [str], updated_at: str(date-time)}}
@errors {4XX}

@endpoint PATCH /short_codes/{id}
@required {id: str(uuid), messaging_profile_id: str}
@optional {tags: [str]}
@returns(200) {data: map{country_code: str, created_at: str(date-time), id: str(uuid), messaging_profile_id: str?, record_type: str, short_code: str, tags: [str], updated_at: str(date-time)}}
@errors {4XX}

@endgroup

@group sim_card_actions
@endpoint GET /sim_card_actions
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint GET /sim_card_actions/{id}
@required {id: str(uuid)}
@returns(200) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map?, sim_card_id: str(uuid), status: map{reason: str, value: str}, updated_at: str}}
@errors {401}

@endgroup

@group sim_card_data_usage_notifications
@endpoint GET /sim_card_data_usage_notifications
@optional {page[number]: int=1, page[size]: int=20, filter[sim_card_id]: str(uuid)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /sim_card_data_usage_notifications
@required {sim_card_id: str(uuid), threshold: map{amount: str, unit: str}}
@returns(201) {data: map{created_at: str, id: str(uuid), record_type: str, sim_card_id: str(uuid), threshold: map{amount: str, unit: str}, updated_at: str}}
@errors {401}

@endpoint DELETE /sim_card_data_usage_notifications/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, id: str(uuid), record_type: str, sim_card_id: str(uuid), threshold: map{amount: str, unit: str}, updated_at: str}}
@errors {401}

@endpoint GET /sim_card_data_usage_notifications/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, id: str(uuid), record_type: str, sim_card_id: str(uuid), threshold: map{amount: str, unit: str}, updated_at: str}}
@errors {404}

@endpoint PATCH /sim_card_data_usage_notifications/{id}
@required {id: str(uuid)}
@optional {created_at: str, id: str(uuid), record_type: str, sim_card_id: str(uuid), threshold: map{amount: str, unit: str}, updated_at: str}
@returns(200) {data: map{created_at: str, id: str(uuid), record_type: str, sim_card_id: str(uuid), threshold: map{amount: str, unit: str}, updated_at: str}}
@errors {401}

@endgroup

@group sim_card_group_actions
@endpoint GET /sim_card_group_actions
@optional {page[number]: int=1, page[size]: int=20, filter[sim_card_group_id]: str(uuid), filter[status]: str(in-progress/completed/failed), filter[type]: str(set_private_wireless_gateway/remove_private_wireless_gateway/set_wireless_blocklist/remove_wireless_blocklist)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint GET /sim_card_group_actions/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, id: str(uuid), record_type: str, settings: map{private_wireless_gateway_id: str(uuid)}, sim_card_group_id: str(uuid), status: str, type: str, updated_at: str}}
@errors {401}

@endgroup

@group sim_card_groups
@endpoint GET /sim_card_groups
@optional {page[number]: int=1, page[size]: int=20, filter[name]: str, filter[private_wireless_gateway_id]: str(uuid), filter[wireless_blocklist_id]: str(uuid)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /sim_card_groups
@required {name: str}
@optional {data_limit: map{amount: str, unit: str}}
@returns(200) {data: map{consumed_data: map{amount: str, unit: str}, created_at: str, data_limit: map{amount: str, unit: str}, default: bool, id: str(uuid), name: str, private_wireless_gateway_id: str(uuid), record_type: str, updated_at: str, wireless_blocklist_id: str(uuid)}}
@errors {401}

@endpoint DELETE /sim_card_groups/{id}
@required {id: str(uuid)}
@returns(200) {data: map{consumed_data: map{amount: str, unit: str}, created_at: str, data_limit: map{amount: str, unit: str}, default: bool, id: str(uuid), name: str, private_wireless_gateway_id: str(uuid), record_type: str, updated_at: str, wireless_blocklist_id: str(uuid)}}
@errors {401}

@endpoint GET /sim_card_groups/{id}
@required {id: str(uuid)}
@optional {include_iccids: bool=false}
@returns(200) {data: map{consumed_data: map{amount: str, unit: str}, created_at: str, data_limit: map{amount: str, unit: str}, default: bool, id: str(uuid), name: str, private_wireless_gateway_id: str(uuid), record_type: str, updated_at: str, wireless_blocklist_id: str(uuid)}}
@errors {401}

@endpoint PATCH /sim_card_groups/{id}
@required {id: str(uuid)}
@optional {data_limit: map{amount: str, unit: str}, name: str}
@returns(200) {data: map{consumed_data: map{amount: str, unit: str}, created_at: str, data_limit: map{amount: str, unit: str}, default: bool, id: str(uuid), name: str, private_wireless_gateway_id: str(uuid), record_type: str, updated_at: str, wireless_blocklist_id: str(uuid)}}
@errors {401}

@endpoint POST /sim_card_groups/{id}/actions/remove_private_wireless_gateway
@required {id: str(uuid)}
@returns(202) {data: map{created_at: str, id: str(uuid), record_type: str, settings: map{private_wireless_gateway_id: str(uuid)}, sim_card_group_id: str(uuid), status: str, type: str, updated_at: str}}
@errors {401}

@endpoint POST /sim_card_groups/{id}/actions/remove_wireless_blocklist
@required {id: str(uuid)}
@returns(202) {data: map{created_at: str, id: str(uuid), record_type: str, settings: map{private_wireless_gateway_id: str(uuid)}, sim_card_group_id: str(uuid), status: str, type: str, updated_at: str}}
@errors {401}

@endpoint POST /sim_card_groups/{id}/actions/set_private_wireless_gateway
@required {id: str(uuid), private_wireless_gateway_id: str(uuid)}
@returns(202) {data: map{created_at: str, id: str(uuid), record_type: str, settings: map{private_wireless_gateway_id: str(uuid)}, sim_card_group_id: str(uuid), status: str, type: str, updated_at: str}}
@errors {401}

@endpoint POST /sim_card_groups/{id}/actions/set_wireless_blocklist
@required {id: str(uuid), wireless_blocklist_id: str(uuid)}
@returns(202) {data: map{created_at: str, id: str(uuid), record_type: str, settings: map{private_wireless_gateway_id: str(uuid)}, sim_card_group_id: str(uuid), status: str, type: str, updated_at: str}}
@errors {401}

@endgroup

@group sim_card_order_preview
@endpoint POST /sim_card_order_preview
@required {address_id: str, quantity: int}
@returns(202) {data: map{quantity: int, record_type: str, shipping_cost: map{amount: str, currency: str}, sim_cards_cost: map{amount: str, currency: str}, total_cost: map{amount: str, currency: str}}}
@errors {422}

@endgroup

@group sim_card_orders
@endpoint GET /sim_card_orders
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /sim_card_orders
@required {address_id: str, quantity: int}
@returns(200) {data: map{cost: map{amount: str, currency: str}, created_at: str, id: str(uuid), order_address: map{administrative_area: str, business_name: str, country_code: str, extended_address: str, first_name: str, id: str, last_name: str, locality: str, postal_code: str, street_address: str}, quantity: int, record_type: str, status: str, tracking_url: str(uri), updated_at: str}}
@errors {401}

@endpoint GET /sim_card_orders/{id}
@required {id: str(uuid)}
@returns(200) {data: map{cost: map{amount: str, currency: str}, created_at: str, id: str(uuid), order_address: map{administrative_area: str, business_name: str, country_code: str, extended_address: str, first_name: str, id: str, last_name: str, locality: str, postal_code: str, street_address: str}, quantity: int, record_type: str, status: str, tracking_url: str(uri), updated_at: str}}
@errors {404}

@endgroup

@group sim_cards
@endpoint GET /sim_cards
@optional {filter: map, page: map, include_sim_card_group: bool=false, filter[sim_card_group_id]: str(uuid), sort: str(current_billing_period_consumed_data.amount/-current_billing_period_consumed_data.amount)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /sim_cards/actions/bulk_disable_voice
@required {sim_card_group_id: str}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map, updated_at: str}}
@errors {422}

@endpoint POST /sim_cards/actions/bulk_enable_voice
@required {sim_card_group_id: str}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map, updated_at: str}}
@errors {422}

@endpoint POST /sim_cards/actions/bulk_set_public_ips
@required {sim_card_ids: [str(uuid)]}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map, updated_at: str}}
@errors {422}

@endpoint POST /sim_cards/actions/validate_registration_codes
@optional {registration_codes: [str]}
@returns(200) {data: [map]}
@errors {401}

@endpoint DELETE /sim_cards/{id}
@required {id: str(uuid)}
@optional {report_lost: bool=false}
@returns(200) {data: map{actions_in_progress: bool, authorized_imeis: [str]?, created_at: str, current_billing_period_consumed_data: map{amount: str, unit: str}, current_device_location: map{accuracy: int, accuracy_unit: str, latitude: str, longitude: str}, current_imei: str, current_mcc: str, current_mnc: str, data_limit: map{amount: str, unit: str}, eid: str?, esim_installation_status: str?, iccid: str, id: str(uuid), imsi: str, ipv4: str, ipv6: str, live_data_session: str, msisdn: str, pin_puk_codes: map{pin1: str, pin2: str, puk1: str, puk2: str}, record_type: str, resources_with_in_progress_actions: [map], sim_card_group_id: str(uuid), status: map{reason: str, value: str}, tags: [str], type: str, updated_at: str, version: str, voice_enabled: bool}}
@errors {401}

@endpoint GET /sim_cards/{id}
@required {id: str(uuid)}
@optional {include_sim_card_group: bool=false, include_pin_puk_codes: bool=false}
@returns(200) {data: map{actions_in_progress: bool, authorized_imeis: [str]?, created_at: str, current_billing_period_consumed_data: map{amount: str, unit: str}, current_device_location: map{accuracy: int, accuracy_unit: str, latitude: str, longitude: str}, current_imei: str, current_mcc: str, current_mnc: str, data_limit: map{amount: str, unit: str}, eid: str?, esim_installation_status: str?, iccid: str, id: str(uuid), imsi: str, ipv4: str, ipv6: str, live_data_session: str, msisdn: str, pin_puk_codes: map{pin1: str, pin2: str, puk1: str, puk2: str}, record_type: str, resources_with_in_progress_actions: [map], sim_card_group_id: str(uuid), status: map{reason: str, value: str}, tags: [str], type: str, updated_at: str, version: str, voice_enabled: bool}}
@errors {401}

@endpoint PATCH /sim_cards/{id}
@required {id: str(uuid)}
@optional {actions_in_progress: bool=false, authorized_imeis: [str], created_at: str, current_billing_period_consumed_data: map{amount: str, unit: str}, current_device_location: map{accuracy: int, accuracy_unit: str, latitude: str, longitude: str}, current_imei: str, current_mcc: str, current_mnc: str, data_limit: map{amount: str, unit: str}, eid: str, esim_installation_status: str(released/disabled), iccid: str, id: str(uuid), imsi: str, ipv4: str, ipv6: str, live_data_session: str(connected/disconnected/unknown), msisdn: str, pin_puk_codes: map{pin1: str, pin2: str, puk1: str, puk2: str}, record_type: str, resources_with_in_progress_actions: [map], sim_card_group_id: str(uuid), status: map{reason: str, value: str}, tags: [str], type: str(physical/esim), updated_at: str, version: str, voice_enabled: bool=false}
@returns(200) {data: map{actions_in_progress: bool, authorized_imeis: [str]?, created_at: str, current_billing_period_consumed_data: map{amount: str, unit: str}, current_device_location: map{accuracy: int, accuracy_unit: str, latitude: str, longitude: str}, current_imei: str, current_mcc: str, current_mnc: str, data_limit: map{amount: str, unit: str}, eid: str?, esim_installation_status: str?, iccid: str, id: str(uuid), imsi: str, ipv4: str, ipv6: str, live_data_session: str, msisdn: str, pin_puk_codes: map{pin1: str, pin2: str, puk1: str, puk2: str}, record_type: str, resources_with_in_progress_actions: [map], sim_card_group_id: str(uuid), status: map{reason: str, value: str}, tags: [str], type: str, updated_at: str, version: str, voice_enabled: bool}}
@errors {401}

@endpoint POST /sim_cards/{id}/actions/disable
@required {id: str(uuid)}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map?, sim_card_id: str(uuid), status: map{reason: str, value: str}, updated_at: str}}
@errors {401}

@endpoint POST /sim_cards/{id}/actions/enable
@required {id: str(uuid)}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map?, sim_card_id: str(uuid), status: map{reason: str, value: str}, updated_at: str}}
@errors {422}

@endpoint POST /sim_cards/{id}/actions/remove_public_ip
@required {id: str(uuid)}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map?, sim_card_id: str(uuid), status: map{reason: str, value: str}, updated_at: str}}
@errors {401}

@endpoint POST /sim_cards/{id}/actions/set_public_ip
@required {id: str(uuid)}
@optional {region_code: str}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map?, sim_card_id: str(uuid), status: map{reason: str, value: str}, updated_at: str}}
@errors {401}

@endpoint POST /sim_cards/{id}/actions/set_standby
@required {id: str(uuid)}
@returns(202) {data: map{action_type: str, created_at: str, id: str(uuid), record_type: str, settings: map?, sim_card_id: str(uuid), status: map{reason: str, value: str}, updated_at: str}}
@errors {401}

@endpoint GET /sim_cards/{id}/activation_code
@required {id: str(uuid)}
@returns(200) {data: map{activation_code: str, record_type: str}}
@errors {401}

@endpoint GET /sim_cards/{id}/device_details
@required {id: str(uuid)}
@returns(200) {data: map{brand_name: str, device_type: str, imei: str, model_name: str, operating_system: str, record_type: str}}
@errors {401}

@endpoint GET /sim_cards/{id}/public_ip
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, ip: str, record_type: str, region_code: str, sim_card_id: str(uuid), type: str, updated_at: str}}
@errors {401}

@endpoint GET /sim_cards/{id}/wireless_connectivity_logs
@required {id: str(uuid)}
@optional {page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endgroup

@group siprec_connectors
@endpoint POST /siprec_connectors
@required {host: str, name: str, port: int}
@optional {app_subdomain: str}
@returns(201) {data: map{app_subdomain: str, created_at: str, host: str, name: str, port: int, record_type: str, updated_at: str}}
@errors {422}

@endpoint DELETE /siprec_connectors/{connector_name}
@required {connector_name: str}
@returns(204)
@errors {404}

@endpoint GET /siprec_connectors/{connector_name}
@required {connector_name: str}
@returns(200) {data: map{app_subdomain: str, created_at: str, host: str, name: str, port: int, record_type: str, updated_at: str}}
@errors {404}

@endpoint PUT /siprec_connectors/{connector_name}
@required {connector_name: str, host: str, name: str, port: int}
@optional {app_subdomain: str}
@returns(200) {data: map{app_subdomain: str, created_at: str, host: str, name: str, port: int, record_type: str, updated_at: str}}
@errors {404, 422}

@endgroup

@group speech-to-text
@endpoint GET /speech-to-text/transcription
@required {transcription_engine: str(Azure/Deepgram/Google/Telnyx), input_format: str(mp3/wav)}
@optional {language: str, interim_results: bool, model: any, endpointing: int, redact: str, keyterm: str, keywords: str}
@returns(200)
@errors {101, 400, 401, 422}

@endgroup

@group storage
@endpoint DELETE /storage/buckets/{bucketName}/ssl_certificate
@required {bucketName: str}
@returns(200) {data: map{created_at: str(date-time), id: str, issued_by: map{common_name: str, organization: str, organization_unit: str}, issued_to: map{common_name: str, organization: str, organization_unit: str}, valid_from: str(date-time), valid_to: str(date-time)}}
@errors {401, 404, 422}

@endpoint GET /storage/buckets/{bucketName}/ssl_certificate
@required {bucketName: str}
@returns(200) {data: map{created_at: str(date-time), id: str, issued_by: map{common_name: str, organization: str, organization_unit: str}, issued_to: map{common_name: str, organization: str, organization_unit: str}, valid_from: str(date-time), valid_to: str(date-time)}}
@errors {401, 404, 422}

@endpoint PUT /storage/buckets/{bucketName}/ssl_certificate
@required {bucketName: str}
@returns(200) {data: map{created_at: str(date-time), id: str, issued_by: map{common_name: str, organization: str, organization_unit: str}, issued_to: map{common_name: str, organization: str, organization_unit: str}, valid_from: str(date-time), valid_to: str(date-time)}}
@errors {401, 404, 422}

@endpoint GET /storage/buckets/{bucketName}/usage/api
@required {bucketName: str, filter: map}
@returns(200) {data: [map]}
@errors {401, 404, 422}

@endpoint GET /storage/buckets/{bucketName}/usage/storage
@required {bucketName: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 404, 422}

@endpoint POST /storage/buckets/{bucketName}/{objectName}/presigned_url
@required {bucketName: str, objectName: str}
@optional {ttl: int}
@returns(200) {content: map{expires_at: str(date-time), presigned_url: str, token: str}}
@errors {401, 404, 422}

@endpoint GET /storage/migration_source_coverage
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint GET /storage/migration_sources
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /storage/migration_sources
@required {bucket_name: str, provider: str(aws/telnyx), provider_auth: map{access_key: str, secret_access_key: str}}
@optional {id: str, source_region: str}
@returns(200) {data: map{bucket_name: str, id: str, provider: str, provider_auth: map{access_key: str, secret_access_key: str}, source_region: str}}
@errors {401, 422}

@endpoint DELETE /storage/migration_sources/{id}
@required {id: str}
@returns(200) {data: map{bucket_name: str, id: str, provider: str, provider_auth: map{access_key: str, secret_access_key: str}, source_region: str}}
@errors {401, 404, 422}

@endpoint GET /storage/migration_sources/{id}
@required {id: str}
@returns(200) {data: map{bucket_name: str, id: str, provider: str, provider_auth: map{access_key: str, secret_access_key: str}, source_region: str}}
@errors {401, 404, 422}

@endpoint GET /storage/migrations
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint POST /storage/migrations
@required {source_id: str, target_bucket_name: str, target_region: str}
@optional {bytes_migrated: int, bytes_to_migrate: int, created_at: str(date-time), eta: str(date-time), id: str, last_copy: str(date-time), refresh: bool, speed: int, status: str(pending/checking/migrating/complete/error/stopped)}
@returns(200) {data: map{bytes_migrated: int, bytes_to_migrate: int, created_at: str(date-time), eta: str(date-time), id: str, last_copy: str(date-time), refresh: bool, source_id: str, speed: int, status: str, target_bucket_name: str, target_region: str}}
@errors {401, 422}

@endpoint GET /storage/migrations/{id}
@required {id: str}
@returns(200) {data: map{bytes_migrated: int, bytes_to_migrate: int, created_at: str(date-time), eta: str(date-time), id: str, last_copy: str(date-time), refresh: bool, source_id: str, speed: int, status: str, target_bucket_name: str, target_region: str}}
@errors {401, 404, 422}

@endpoint POST /storage/migrations/{id}/actions/stop
@required {id: str}
@returns(200) {data: map{bytes_migrated: int, bytes_to_migrate: int, created_at: str(date-time), eta: str(date-time), id: str, last_copy: str(date-time), refresh: bool, source_id: str, speed: int, status: str, target_bucket_name: str, target_region: str}}
@errors {401, 404, 422}

@endgroup

@group sub_number_orders
@endpoint GET /sub_number_orders
@optional {filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404, 422, 500}

@endpoint POST /sub_number_orders/{id}/requirement_group
@required {id: str(uuid), requirement_group_id: str(uuid)}
@returns(200) {data: map{country_code: str, created_at: str(date-time), customer_reference: str, id: str(uuid), is_block_sub_number_order: bool, order_request_id: str(uuid), phone_number_type: str, phone_numbers: [map], phone_numbers_count: int, record_type: str, regulatory_requirements: [map], requirements_met: bool, status: str, updated_at: str(date-time)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /sub_number_orders/{sub_number_order_id}
@required {sub_number_order_id: str}
@optional {filter: map}
@returns(200) {data: map{country_code: str, created_at: str(date-time), customer_reference: str, id: str(uuid), is_block_sub_number_order: bool, order_request_id: str(uuid), phone_number_type: str, phone_numbers_count: int, record_type: str, regulatory_requirements: [map], requirements_met: bool, status: str, updated_at: str(date-time), user_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /sub_number_orders/{sub_number_order_id}
@required {sub_number_order_id: str}
@optional {regulatory_requirements: [map{field_value: str, requirement_id: str(uuid)}]}
@returns(200) {data: map{country_code: str, created_at: str(date-time), customer_reference: str, id: str(uuid), is_block_sub_number_order: bool, order_request_id: str(uuid), phone_number_type: str, phone_numbers_count: int, record_type: str, regulatory_requirements: [map], requirements_met: bool, status: str, updated_at: str(date-time), user_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endpoint PATCH /sub_number_orders/{sub_number_order_id}/cancel
@required {sub_number_order_id: str}
@returns(200) {data: map{country_code: str, created_at: str(date-time), customer_reference: str, id: str(uuid), is_block_sub_number_order: bool, order_request_id: str(uuid), phone_number_type: str, phone_numbers_count: int, record_type: str, regulatory_requirements: [map], requirements_met: bool, status: str, updated_at: str(date-time), user_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endgroup

@group sub_number_orders_report
@endpoint POST /sub_number_orders_report
@optional {country_code: str, created_at_gt: str(date-time), created_at_lt: str(date-time), customer_reference: str, order_request_id: str(uuid), status: str(pending/success/failure)}
@returns(202) {data: map{created_at: str(date-time), filters: map{country_code: str, created_at_gt: str(date-time), created_at_lt: str(date-time), customer_reference: str, order_request_id: str(uuid), status: str}, id: str(uuid), order_type: str, status: str, updated_at: str(date-time), user_id: str(uuid)}}
@errors {400, 401, 422, 500}

@endpoint GET /sub_number_orders_report/{report_id}
@required {report_id: str(uuid)}
@returns(200) {data: map{created_at: str(date-time), filters: map{country_code: str, created_at_gt: str(date-time), created_at_lt: str(date-time), customer_reference: str, order_request_id: str(uuid), status: str}, id: str(uuid), order_type: str, status: str, updated_at: str(date-time), user_id: str(uuid)}}
@errors {400, 401, 404, 422, 500}

@endpoint GET /sub_number_orders_report/{report_id}/download
@required {report_id: str(uuid)}
@returns(200)
@errors {400, 401, 404, 422, 500}

@endgroup

@group telephony_credentials
@endpoint GET /telephony_credentials
@optional {page: map, filter: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint POST /telephony_credentials
@required {connection_id: str}
@optional {expires_at: str, name: str, tag: str}
@returns(201) {data: map{created_at: str, expired: bool, expires_at: str, id: str, name: str, record_type: str, resource_id: str, sip_password: str, sip_username: str, updated_at: str, user_id: str}}
@errors {422}

@endpoint DELETE /telephony_credentials/{id}
@required {id: str}
@returns(200) {data: map{created_at: str, expired: bool, expires_at: str, id: str, name: str, record_type: str, resource_id: str, sip_password: str, sip_username: str, updated_at: str, user_id: str}}
@errors {401, 404, 422}

@endpoint GET /telephony_credentials/{id}
@required {id: str}
@returns(200) {data: map{created_at: str, expired: bool, expires_at: str, id: str, name: str, record_type: str, resource_id: str, sip_password: str, sip_username: str, updated_at: str, user_id: str}}
@errors {400, 401, 404}

@endpoint PATCH /telephony_credentials/{id}
@required {id: str}
@optional {connection_id: str, expires_at: str, name: str, tag: str}
@returns(200) {data: map{created_at: str, expired: bool, expires_at: str, id: str, name: str, record_type: str, resource_id: str, sip_password: str, sip_username: str, updated_at: str, user_id: str}}
@errors {401, 404, 422}

@endpoint POST /telephony_credentials/{id}/token
@required {id: str}
@returns(201)
@errors {404}

@endgroup

@group terms_of_service
@endpoint POST /terms_of_service/number_reputation/agree
@returns(200)
@errors {400, 401, 422}

@endgroup

@group texml
@endpoint GET /texml/Accounts/{account_sid}/Calls
@required {account_sid: str}
@optional {Page: int, PageSize: int, PageToken: str, To: str, From: str, Status: str(canceled/completed/failed/busy/no-answer), StartTime: str, StartTime_gt: str, StartTime_lt: str, EndTime: str, EndTime_gt: str, EndTime_lt: str}
@returns(200) {calls: [map], end: int, first_page_uri: str, next_page_uri: str, page: int, page_size: int, start: int, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls
@required {account_sid: str, ApplicationSid: str, From: str, To: str}
@optional {AsyncAmd: bool=false, AsyncAmdStatusCallback: str, AsyncAmdStatusCallbackMethod: str(GET/POST)=POST, CallerId: str, CancelPlaybackOnDetectMessageEnd: bool=true, CancelPlaybackOnMachineDetection: bool=true, CustomHeaders: [map{name!: str, value!: str}], DetectionMode: str(Premium/Regular)=Regular, FallbackUrl: str, MachineDetection: str(Enable/Disable/DetectMessageEnd)=Disable, MachineDetectionSilenceTimeout: int=3500, MachineDetectionSpeechEndThreshold: int=800, MachineDetectionSpeechThreshold: int=3500, MachineDetectionTimeout: int=30000, PreferredCodecs: str, Record: bool, RecordingChannels: str(mono/dual), RecordingStatusCallback: str, RecordingStatusCallbackEvent: str, RecordingStatusCallbackMethod: str(GET/POST), RecordingTimeout: int=0, RecordingTrack: str(inbound/outbound/both), SendRecordingUrl: bool=true, SipAuthPassword: str, SipAuthUsername: str, SipRegion: str(US/Europe/Canada/Australia/Middle East)=US, StatusCallback: str, StatusCallbackEvent: str(initiated/ringing/answered/completed)=completed, StatusCallbackMethod: str(GET/POST)=POST, SuperviseCallSid: str, SupervisingRole: str(barge/whisper/monitor)=barge, Texml: str, TimeLimit: int=14400, Timeout: int=30, Trim: str(trim-silence/do-not-trim), Url: str, UrlMethod: str(GET/POST)=POST}
@returns(200) {from: str, status: str, to: str}
@errors {422}

@endpoint GET /texml/Accounts/{account_sid}/Calls/{call_sid}
@required {call_sid: str, account_sid: str}
@returns(200) {account_sid: str, answered_by: str, caller_name: str, date_created: str, date_updated: str, direction: str, duration: str, end_time: str, from: str, from_formatted: str, price: str, price_unit: str, sid: str, start_time: str, status: str, to: str, to_formatted: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}
@required {call_sid: str, account_sid: str}
@returns(200) {account_sid: str, answered_by: str, caller_name: str, date_created: str, date_updated: str, direction: str, duration: str, end_time: str, from: str, from_formatted: str, price: str, price_unit: str, sid: str, start_time: str, status: str, to: str, to_formatted: str, uri: str}
@errors {404, 422}

@endpoint GET /texml/Accounts/{account_sid}/Calls/{call_sid}/Recordings.json
@required {account_sid: str, call_sid: str}
@returns(200) {end: int, first_page_uri: str(uri), next_page_uri: str, page: int, page_size: int, previous_page_uri: str(uri), recordings: [map], start: int, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}/Recordings.json
@required {account_sid: str, call_sid: str}
@returns(200) {account_sid: str, call_sid: str, channels: int, conference_sid: str(uuid)?, date_created: str(date-time), date_updated: str(date-time), duration: str?, error_code: str?, price: str?, price_unit: str?, sid: str, source: str, start_time: str(date-time), track: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}/Recordings/{recording_sid}.json
@required {account_sid: str, call_sid: str, recording_sid: str(uuid)}
@returns(200) {account_sid: str, call_sid: str, channels: int, conference_sid: str(uuid)?, date_created: str(date-time), date_updated: str(date-time), duration: str?, error_code: str?, price: str?, price_unit: str?, sid: str, source: str, start_time: str(date-time), track: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}/Siprec.json
@required {account_sid: str, call_sid: str}
@returns(200) {account_sid: str, call_sid: str, date_created: str, date_updated: str, error_code: str, sid: str, start_time: str, status: str, track: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}/Siprec/{siprec_sid}.json
@required {account_sid: str, call_sid: str, siprec_sid: str}
@returns(200) {account_sid: str, call_sid: str, date_updated: str, error_code: str, sid: str, status: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}/Streams.json
@required {account_sid: str, call_sid: str}
@returns(200) {account_sid: str, call_sid: str, date_updated: str(date-time), name: str, sid: str, status: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Calls/{call_sid}/Streams/{streaming_sid}.json
@required {account_sid: str, call_sid: str, streaming_sid: str(uuid)}
@returns(200) {account_sid: str, call_sid: str, date_updated: str(date-time), sid: str, status: str, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Conferences
@required {account_sid: str}
@optional {Page: int, PageSize: int, PageToken: str, FriendlyName: str, Status: str(init/in-progress/completed), DateCreated: str, DateUpdated: str}
@returns(200) {conferences: [map], end: int, first_page_uri: str, next_page_uri: str, page: int, page_size: int, start: int, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Conferences/{conference_sid}
@required {account_sid: str, conference_sid: str}
@returns(200) {account_sid: str, api_version: str, call_sid_ending_conference: str, date_created: str, date_updated: str, friendly_name: str, reason_conference_ended: str, region: str, sid: str, status: str, subresource_uris: map, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Conferences/{conference_sid}
@required {account_sid: str, conference_sid: str}
@returns(200) {account_sid: str, api_version: str, call_sid_ending_conference: str, date_created: str, date_updated: str, friendly_name: str, reason_conference_ended: str, region: str, sid: str, status: str, subresource_uris: map, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Participants
@required {account_sid: str, conference_sid: str}
@returns(200) {end: int, first_page_uri: str, next_page_uri: str, page: int, page_size: int, participants: [map], start: int, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Participants
@required {account_sid: str, conference_sid: str}
@returns(200) {account_sid: str, call_sid: str, coaching: bool, coaching_call_sid: str, conference_sid: str(uuid), end_conference_on_exit: bool, hold: bool, muted: bool, status: str, uri: str}
@errors {404}

@endpoint DELETE /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Participants/{call_sid_or_participant_label}
@required {account_sid: str, conference_sid: str, call_sid_or_participant_label: str}
@returns(204)
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Participants/{call_sid_or_participant_label}
@required {account_sid: str, conference_sid: str, call_sid_or_participant_label: str}
@returns(200) {account_sid: str, api_version: str, call_sid: str, call_sid_legacy: str, coaching: bool, coaching_call_sid: str, coaching_call_sid_legacy: str, conference_sid: str(uuid), date_created: str, date_updated: str, end_conference_on_exit: bool, hold: bool, muted: bool, status: str, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Participants/{call_sid_or_participant_label}
@required {account_sid: str, conference_sid: str, call_sid_or_participant_label: str}
@returns(200) {account_sid: str, api_version: str, call_sid: str, call_sid_legacy: str, coaching: bool, coaching_call_sid: str, coaching_call_sid_legacy: str, conference_sid: str(uuid), date_created: str, date_updated: str, end_conference_on_exit: bool, hold: bool, muted: bool, status: str, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Recordings
@required {account_sid: str, conference_sid: str}
@returns(200) {end: int, first_page_uri: str, next_page_uri: str, page: int, page_size: int, participants: [map], recordings: [map], start: int, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Conferences/{conference_sid}/Recordings.json
@required {account_sid: str, conference_sid: str}
@returns(200) {end: int, first_page_uri: str(uri), next_page_uri: str, page: int, page_size: int, previous_page_uri: str(uri), recordings: [map], start: int, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Queues
@required {account_sid: str}
@optional {Page: int, PageSize: int, PageToken: str, DateCreated: str, DateUpdated: str}
@returns(200) {end: int, first_page_uri: str, next_page_uri: str, page: int, page_size: int, queues: [map], start: int, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Queues
@required {account_sid: str}
@returns(200) {account_sid: str, average_wait_time: int, current_size: int, date_created: str, date_updated: str, max_size: int, sid: str, subresource_uris: map, uri: str}
@errors {404}

@endpoint DELETE /texml/Accounts/{account_sid}/Queues/{queue_sid}
@required {account_sid: str, queue_sid: str}
@returns(204)
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Queues/{queue_sid}
@required {account_sid: str, queue_sid: str}
@returns(200) {account_sid: str, average_wait_time: int, current_size: int, date_created: str, date_updated: str, max_size: int, sid: str, subresource_uris: map, uri: str}
@errors {404}

@endpoint POST /texml/Accounts/{account_sid}/Queues/{queue_sid}
@required {account_sid: str, queue_sid: str}
@returns(200) {account_sid: str, average_wait_time: int, current_size: int, date_created: str, date_updated: str, max_size: int, sid: str, subresource_uris: map, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Recordings.json
@required {account_sid: str}
@optional {Page: int, PageSize: int, DateCreated: str(date-time)}
@returns(200) {end: int, first_page_uri: str(uri), next_page_uri: str, page: int, page_size: int, previous_page_uri: str(uri), recordings: [map], start: int, uri: str}
@errors {404}

@endpoint DELETE /texml/Accounts/{account_sid}/Recordings/{recording_sid}.json
@required {account_sid: str, recording_sid: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Recordings/{recording_sid}.json
@required {account_sid: str, recording_sid: str(uuid)}
@returns(200) {account_sid: str, call_sid: str, channels: int, conference_sid: str(uuid)?, date_created: str(date-time), date_updated: str(date-time), duration: str?, error_code: str?, media_url: str(uri), sid: str, source: str, start_time: str(date-time), status: str, subresources_uris: map{transcriptions: str(uri)?}, uri: str}
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Transcriptions.json
@required {account_sid: str}
@optional {PageToken: str, PageSize: int}
@returns(200) {end: int, first_page_uri: str(uri), next_page_uri: str, page: int, page_size: int, previous_page_uri: str(uri), start: int, transcriptions: [map], uri: str}
@errors {404}

@endpoint DELETE /texml/Accounts/{account_sid}/Transcriptions/{recording_transcription_sid}.json
@required {account_sid: str, recording_transcription_sid: str(uuid)}
@returns(204)
@errors {404}

@endpoint GET /texml/Accounts/{account_sid}/Transcriptions/{recording_transcription_sid}.json
@required {account_sid: str, recording_transcription_sid: str(uuid)}
@returns(200) {account_sid: str, api_version: str, call_sid: str, date_created: str(date-time), date_updated: str(date-time), duration: str?, recording_sid: str, sid: str, status: str, transcription_text: str, uri: str}
@errors {404}

@endpoint POST /texml/secrets
@required {name: str, value: str}
@returns(201) {data: map{name: str, value: str}}
@errors {422}

@endgroup

@group texml_applications
@endpoint GET /texml_applications
@optional {page: map, filter: map, sort: str(created_at/friendly_name/active)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 403}

@endpoint POST /texml_applications
@required {friendly_name: str, voice_url: str(uri)}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, call_cost_in_webhooks: bool=false, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, first_command_timeout: bool=false, first_command_timeout_secs: int=30, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, status_callback: str(uri)=null, status_callback_method: str(get/post)=post, tags: [str], voice_fallback_url: str(uri)=null, voice_method: str(get/post)=post}
@returns(201) {data: map{active: bool, anchorsite_override: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, friendly_name: str, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, status_callback: str(uri), status_callback_method: str, tags: [str], updated_at: str, voice_fallback_url: str(uri), voice_method: str, voice_url: str(uri)}}
@errors {401, 403, 404, 422}

@endpoint DELETE /texml_applications/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, friendly_name: str, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, status_callback: str(uri), status_callback_method: str, tags: [str], updated_at: str, voice_fallback_url: str(uri), voice_method: str, voice_url: str(uri)}}
@errors {400, 401, 403, 404}

@endpoint GET /texml_applications/{id}
@required {id: str}
@returns(200) {data: map{active: bool, anchorsite_override: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, friendly_name: str, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, status_callback: str(uri), status_callback_method: str, tags: [str], updated_at: str, voice_fallback_url: str(uri), voice_method: str, voice_url: str(uri)}}
@errors {400, 401, 403, 404}

@endpoint PATCH /texml_applications/{id}
@required {id: str, friendly_name: str, voice_url: str(uri)}
@optional {active: bool=true, anchorsite_override: str(Latency/Chicago, IL/Ashburn, VA/San Jose, CA/Sydney, Australia/Amsterdam, Netherlands/London, UK/Toronto, Canada/Vancouver, Canada/Frankfurt, Germany)=Latency, call_cost_in_webhooks: bool=false, dtmf_type: str(RFC 2833/Inband/SIP INFO)=RFC 2833, first_command_timeout: bool=false, first_command_timeout_secs: int=30, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, status_callback: str(uri)=null, status_callback_method: str(get/post)=post, tags: [str], voice_fallback_url: str(uri)=null, voice_method: str(get/post)=post}
@returns(200) {data: map{active: bool, anchorsite_override: str, call_cost_in_webhooks: bool, created_at: str, dtmf_type: str, first_command_timeout: bool, first_command_timeout_secs: int, friendly_name: str, id: str, inbound: map{channel_limit: int, shaken_stir_enabled: bool, sip_subdomain: str, sip_subdomain_receive_settings: str}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, record_type: str, status_callback: str(uri), status_callback_method: str, tags: [str], updated_at: str, voice_fallback_url: str(uri), voice_method: str, voice_url: str(uri)}}
@errors {400, 401, 403, 404, 422}

@endgroup

@group text-to-speech
@endpoint GET /text-to-speech/speech
@optional {voice: str, provider: str(aws/telnyx/azure/elevenlabs/minimax/murfai/rime/resemble)=telnyx, model_id: str, voice_id: str, disable_cache: bool=false, audio_format: str(pcm/wav/mp3), socket_id: str}
@returns(200)
@errors {101, 400, 401}

@endpoint POST /text-to-speech/speech
@optional {aws: map{language_code: str, lexicon_names: [str], output_format: str, sample_rate: str, text_type: str}, azure: map{api_key: str, deployment_id: str, effect: str, gender: str, language_code: str, output_format: str, region: str, text_type: str}, disable_cache: bool=false, elevenlabs: map{api_key: str, language_code: str, voice_settings: map}, language: str, minimax: map{language_boost: str, pitch: int, response_format: str, speed: num(float), vol: num(float)}, output_type: str(binary_output/base64_output)=binary_output, provider: str(aws/telnyx/azure/elevenlabs/minimax/rime/resemble), resemble: map{api_key: str, format: str, precision: str, sample_rate: str}, rime: map{response_format: str, sampling_rate: int, voice_speed: num(float)}, telnyx: map{emotion: str, response_format: str, sampling_rate: int, temperature: num(float), voice_speed: num(float), volume: num(float)}, text: str, text_type: str(text/ssml), voice: str, voice_settings: map}
@returns(200) {base64_audio: str}
@errors {400, 401, 422}

@endpoint GET /text-to-speech/voices
@optional {provider: str(aws/telnyx/azure/elevenlabs/minimax/rime/resemble), api_key: str}
@returns(200) {voices: [map]}
@errors {400, 401}

@endgroup

@group traffic_policy_profiles
@endpoint GET /traffic_policy_profiles
@optional {page[number]: int=1, page[size]: int=20, filter[type]: str(whitelist/blacklist/throttling), filter[service]: str, sort: str(service/-service/type/-type)}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /traffic_policy_profiles
@required {type: str(whitelist/blacklist)}
@optional {domains: [str], ip_ranges: [str], limit_bw_kbps: int(512/1024), services: [str]}
@returns(201) {data: map{created_at: str, domains: [str], id: str(uuid), ip_ranges: [str], limit_bw_kbps: int?, record_type: str, services: [str], type: str, updated_at: str}}
@errors {422}

@endpoint GET /traffic_policy_profiles/services
@optional {page[number]: int=1, page[size]: int=20, filter[group]: str, filter[name]: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint DELETE /traffic_policy_profiles/{id}
@required {id: str(uuid)}
@returns(200) {data: map{id: str(uuid)}}
@errors {404}

@endpoint GET /traffic_policy_profiles/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, domains: [str], id: str(uuid), ip_ranges: [str], limit_bw_kbps: int?, record_type: str, services: [str], type: str, updated_at: str}}
@errors {404}

@endpoint PATCH /traffic_policy_profiles/{id}
@required {id: str(uuid)}
@optional {domains: [str], ip_ranges: [str], limit_bw_kbps: int(512/1024), services: [str], type: str(whitelist/blacklist/throttling)}
@returns(200) {data: map{created_at: str, domains: [str], id: str(uuid), ip_ranges: [str], limit_bw_kbps: int?, record_type: str, services: [str], type: str, updated_at: str}}
@errors {404, 422}

@endgroup

@group usage_reports
@endpoint GET /usage_reports
@required {product: str, dimensions: [str], metrics: [str]}
@optional {start_date: str, end_date: str, date_range: str, filter: str, managed_accounts: bool, sort: [str], format: str(csv/json), authorization_bearer: str, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 500}

@endpoint GET /usage_reports/options
@optional {product: str, authorization_bearer: str}
@returns(200) {data: [map]}
@errors {400, 500}

@endgroup

@group user_addresses
@endpoint GET /user_addresses
@optional {page: map, filter: map, sort: str(created_at/first_name/last_name/business_name/street_address)=created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 404}

@endpoint POST /user_addresses
@required {business_name: str, country_code: str, first_name: str, last_name: str, locality: str, street_address: str}
@optional {administrative_area: str, borough: str, customer_reference: str, extended_address: str, neighborhood: str, phone_number: str, postal_code: str, skip_address_verification: bool=false}
@returns(200) {data: map{administrative_area: str, borough: str, business_name: str, country_code: str, created_at: str, customer_reference: str, extended_address: str, first_name: str, id: str(uuid), last_name: str, locality: str, neighborhood: str, phone_number: str, postal_code: str, record_type: str, street_address: str, updated_at: str}}
@errors {422}

@endpoint GET /user_addresses/{id}
@required {id: str}
@returns(200) {data: map{administrative_area: str, borough: str, business_name: str, country_code: str, created_at: str, customer_reference: str, extended_address: str, first_name: str, id: str(uuid), last_name: str, locality: str, neighborhood: str, phone_number: str, postal_code: str, record_type: str, street_address: str, updated_at: str}}
@errors {401, 404, 422}

@endgroup

@group user_tags
@endpoint GET /user_tags
@optional {filter: map}
@returns(200) {data: map{number_tags: [str], outbound_profile_tags: [str]}}
@errors {401}

@endgroup

@group mobile_phone_numbers
@endpoint GET /v2/mobile_phone_numbers
@optional {page[number]: int, page[size]: int}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint GET /v2/mobile_phone_numbers/{id}
@required {id: str}
@returns(200) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str?, forwards_to: str?}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, caller_id_name_enabled: bool, cnam_listing: map{cnam_listing_details: str?, cnam_listing_enabled: bool}, connection_id: str?, connection_name: str?, connection_type: str?, country_iso_alpha2: str, created_at: str(date-time), customer_reference: str?, id: str, inbound: map{interception_app_id: str?, interception_app_name: str?}, inbound_call_screening: str?, mobile_voice_enabled: bool, noise_suppression: str, outbound: map{interception_app_id: str?, interception_app_name: str?}, phone_number: str, record_type: str, sim_card_id: str(uuid), status: str, tags: [str], updated_at: str(date-time)}}
@errors {404}

@endpoint PATCH /v2/mobile_phone_numbers/{id}
@required {id: str}
@optional {call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str, forwards_to: str}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, caller_id_name_enabled: bool, cnam_listing: map{cnam_listing_details: str, cnam_listing_enabled: bool}, connection_id: str, customer_reference: str, inbound: map{interception_app_id: str}, inbound_call_screening: str(disabled/reject_calls/flag_calls), noise_suppression: bool, outbound: map{interception_app_id: str}, tags: [str]}
@returns(200) {data: map{call_forwarding: map{call_forwarding_enabled: bool, forwarding_type: str?, forwards_to: str?}, call_recording: map{inbound_call_recording_channels: str, inbound_call_recording_enabled: bool, inbound_call_recording_format: str}, caller_id_name_enabled: bool, cnam_listing: map{cnam_listing_details: str?, cnam_listing_enabled: bool}, connection_id: str?, connection_name: str?, connection_type: str?, country_iso_alpha2: str, created_at: str(date-time), customer_reference: str?, id: str, inbound: map{interception_app_id: str?, interception_app_name: str?}, inbound_call_screening: str?, mobile_voice_enabled: bool, noise_suppression: str, outbound: map{interception_app_id: str?, interception_app_name: str?}, phone_number: str, record_type: str, sim_card_id: str(uuid), status: str, tags: [str], updated_at: str(date-time)}}
@errors {422}

@endgroup

@group mobile_voice_connections
@endpoint GET /v2/mobile_voice_connections
@optional {page[number]: int, page[size]: int, filter[connection_name][contains]: str, sort: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /v2/mobile_voice_connections
@optional {active: bool=true, connection_name: str=Telnyx Mobile Voice IMS, inbound: map{channel_limit: int}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, tags: [str], webhook_api_version: str(1/2)=2, webhook_event_failover_url: str, webhook_event_url: str, webhook_timeout_secs: int}
@returns(201) {data: map{active: bool, connection_name: str, created_at: str(date-time), id: str, inbound: map{channel_limit: int?}, outbound: map{channel_limit: int?, outbound_voice_profile_id: str?}, record_type: str, tags: [str], updated_at: str(date-time), webhook_api_version: str?, webhook_event_failover_url: str?, webhook_event_url: str?, webhook_timeout_secs: int?}}
@errors {403, 422}

@endpoint DELETE /v2/mobile_voice_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, connection_name: str, created_at: str(date-time), id: str, inbound: map{channel_limit: int?}, outbound: map{channel_limit: int?, outbound_voice_profile_id: str?}, record_type: str, tags: [str], updated_at: str(date-time), webhook_api_version: str?, webhook_event_failover_url: str?, webhook_event_url: str?, webhook_timeout_secs: int?}}
@errors {404}

@endpoint GET /v2/mobile_voice_connections/{id}
@required {id: str}
@returns(200) {data: map{active: bool, connection_name: str, created_at: str(date-time), id: str, inbound: map{channel_limit: int?}, outbound: map{channel_limit: int?, outbound_voice_profile_id: str?}, record_type: str, tags: [str], updated_at: str(date-time), webhook_api_version: str?, webhook_event_failover_url: str?, webhook_event_url: str?, webhook_timeout_secs: int?}}
@errors {404}

@endpoint PATCH /v2/mobile_voice_connections/{id}
@required {id: str}
@optional {active: bool, connection_name: str, inbound: map{channel_limit: int}, outbound: map{channel_limit: int, outbound_voice_profile_id: str}, tags: [str], webhook_api_version: str(1/2), webhook_event_failover_url: str, webhook_event_url: str, webhook_timeout_secs: int}
@returns(200) {data: map{active: bool, connection_name: str, created_at: str(date-time), id: str, inbound: map{channel_limit: int?}, outbound: map{channel_limit: int?, outbound_voice_profile_id: str?}, record_type: str, tags: [str], updated_at: str(date-time), webhook_api_version: str?, webhook_event_failover_url: str?, webhook_event_url: str?, webhook_timeout_secs: int?}}
@errors {404, 422}

@endgroup

@group payment
@endpoint POST /v2/payment/stored_payment_transactions
@required {amount: str}
@returns(200) {data: map{amount_cents: int, amount_currency: str, auto_recharge: bool, created_at: str(date-time), id: str, processor_status: str, record_type: str, transaction_processing_type: str}}
@errors {401, 403, 422}

@endgroup

@group whatsapp
@endpoint GET /v2/whatsapp/business_accounts
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint DELETE /v2/whatsapp/business_accounts/{id}
@required {id: str}
@returns(204)
@errors {4XX}

@endpoint GET /v2/whatsapp/business_accounts/{id}
@required {id: str}
@returns(200) {data: map{account_review_status: str, business_verification_status: str, country: str, created_at: str(date-time), id: str(uuid), name: str, phone_numbers_count: int, record_type: str, status: str, waba_id: str}}
@errors {4XX}

@endpoint GET /v2/whatsapp/business_accounts/{id}/phone_numbers
@required {id: str}
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /v2/whatsapp/business_accounts/{id}/phone_numbers
@required {id: str, display_name: str, phone_number: str}
@optional {language: str=en_US, verification_method: str(sms/voice)=sms}
@returns(204)
@errors {4XX}

@endpoint GET /v2/whatsapp/business_accounts/{id}/settings
@required {id: str}
@returns(200) {data: map{id: str(uuid), name: str, record_type: str, timezone: str, updated_at: str(date-time), webhook_enabled: bool, webhook_events: [str], webhook_failover_url: str(url), webhook_url: str(url)}}
@errors {4XX}

@endpoint PATCH /v2/whatsapp/business_accounts/{id}/settings
@required {id: str}
@optional {name: str, timezone: str, webhook_enabled: bool, webhook_events: [str], webhook_failover_url: str(url), webhook_url: str(url)}
@returns(200) {data: map{id: str(uuid), name: str, record_type: str, timezone: str, updated_at: str(date-time), webhook_enabled: bool, webhook_events: [str], webhook_failover_url: str(url), webhook_url: str(url)}}
@errors {4XX}

@endpoint GET /v2/whatsapp/message_templates
@optional {page: map, filter[waba_id]: str, filter[category]: str(MARKETING/UTILITY/AUTHENTICATION), filter[status]: str, filter[search]: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint POST /v2/whatsapp/message_templates
@required {category: str(MARKETING/UTILITY/AUTHENTICATION), components: [any], language: str, name: str, waba_id: str}
@returns(201) {data: map{category: str, components: [map], created_at: str(date-time), id: str, language: str, name: str, record_type: str, rejection_reason: str, status: str, template_id: str, updated_at: str(date-time), whatsapp_business_account: map{id: str}}}
@errors {4XX}

@endpoint GET /v2/whatsapp/phone_numbers
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {4XX}

@endpoint DELETE /v2/whatsapp/phone_numbers/{phone_number}
@required {phone_number: str}
@returns(204)
@errors {4XX}

@endpoint GET /v2/whatsapp/phone_numbers/{phone_number}/calling_settings
@required {phone_number: str}
@returns(200) {data: map{enabled: bool, phone_number: str, record_type: str, updated_at: str(date-time)}}
@errors {4XX}

@endpoint PATCH /v2/whatsapp/phone_numbers/{phone_number}/calling_settings
@required {phone_number: str, enabled: bool}
@returns(200) {data: map{enabled: bool, phone_number: str, record_type: str, updated_at: str(date-time)}}
@errors {4XX}

@endpoint GET /v2/whatsapp/phone_numbers/{phone_number}/profile
@required {phone_number: str}
@returns(200) {data: map{about: str, address: str, category: str, created_at: str(date-time), description: str, display_name: str, email: str, id: str, phone_number_id: str, profile_photo_url: str, record_type: str, updated_at: str(date-time), website: str}}
@errors {4XX}

@endpoint PATCH /v2/whatsapp/phone_numbers/{phone_number}/profile
@required {phone_number: str}
@optional {about: str, address: str, category: str, description: str, display_name: str, email: str, website: str}
@returns(200) {data: map{about: str, address: str, category: str, created_at: str(date-time), description: str, display_name: str, email: str, id: str, phone_number_id: str, profile_photo_url: str, record_type: str, updated_at: str(date-time), website: str}}
@errors {4XX}

@endpoint DELETE /v2/whatsapp/phone_numbers/{phone_number}/profile/photo
@required {phone_number: str}
@returns(204)
@errors {4XX}

@endpoint POST /v2/whatsapp/phone_numbers/{phone_number}/profile/photo
@required {phone_number: str}
@returns(200) {data: map{about: str, address: str, category: str, created_at: str(date-time), description: str, display_name: str, email: str, id: str, phone_number_id: str, profile_photo_url: str, record_type: str, updated_at: str(date-time), website: str}}
@errors {4XX}

@endpoint POST /v2/whatsapp/phone_numbers/{phone_number}/resend_verification
@required {phone_number: str}
@optional {verification_method: str(sms/voice)=sms}
@returns(204)
@errors {4XX}

@endpoint POST /v2/whatsapp/phone_numbers/{phone_number}/verify
@required {phone_number: str, code: str}
@returns(204)
@errors {4XX}

@endgroup

@group whatsapp_message_templates
@endpoint DELETE /v2/whatsapp_message_templates/{id}
@required {id: str}
@returns(204)
@errors {4XX}

@endpoint GET /v2/whatsapp_message_templates/{id}
@required {id: str}
@returns(200) {data: map{category: str, components: [map], created_at: str(date-time), id: str, language: str, name: str, record_type: str, rejection_reason: str, status: str, template_id: str, updated_at: str(date-time), whatsapp_business_account: map{id: str}}}
@errors {4XX}

@endpoint PATCH /v2/whatsapp_message_templates/{id}
@required {id: str}
@optional {category: str(MARKETING/UTILITY/AUTHENTICATION), components: [any]}
@returns(200) {data: map{category: str, components: [map], created_at: str(date-time), id: str, language: str, name: str, record_type: str, rejection_reason: str, status: str, template_id: str, updated_at: str(date-time), whatsapp_business_account: map{id: str}}}
@errors {4XX}

@endgroup

@group x402
@endpoint POST /v2/x402/credit_account
@required {id: str}
@optional {PAYMENT-SIGNATURE: str, payment_signature: str}
@returns(200) {data: map{amount: str, created_at: str(date-time), currency: str, id: str, quote_id: str, record_type: str, status: str, tx_hash: str?}}
@returns(201) {data: map{amount: str, created_at: str(date-time), currency: str, id: str, quote_id: str, record_type: str, status: str, tx_hash: str?}}
@errors {400, 401, 403, 422, 500, 502, 503}

@endpoint POST /v2/x402/credit_account/quote
@required {amount_usd: str}
@returns(200) {data: map{amount_crypto: str, amount_usd: str, expires_at: str(date-time), id: str, network: str, payment_requirements: map{accepts: [map], resource: map{description: str, mimeType: str, url: str}, x402Version: int}, record_type: str}}
@errors {401, 403, 422, 502}

@endgroup

@group verifications
@endpoint GET /verifications/by_phone_number/{phone_number}
@required {phone_number: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400}

@endpoint POST /verifications/by_phone_number/{phone_number}/actions/verify
@required {phone_number: str, code: str, verify_profile_id: str(uuid)}
@returns(200) {data: map{phone_number: str, response_code: str}}
@errors {400}

@endpoint POST /verifications/call
@required {phone_number: str, verify_profile_id: str(uuid)}
@optional {custom_code: str=null, extension: str=null, timeout_secs: int}
@returns(200) {data: map{created_at: str, custom_code: str?, id: str(uuid), phone_number: str, record_type: str, status: str, timeout_secs: int, type: str, updated_at: str, verify_profile_id: str(uuid)}}
@errors {400}

@endpoint POST /verifications/flashcall
@required {phone_number: str, verify_profile_id: str(uuid)}
@optional {timeout_secs: int}
@returns(200) {data: map{created_at: str, custom_code: str?, id: str(uuid), phone_number: str, record_type: str, status: str, timeout_secs: int, type: str, updated_at: str, verify_profile_id: str(uuid)}}
@errors {400}

@endpoint POST /verifications/sms
@required {phone_number: str, verify_profile_id: str(uuid)}
@optional {custom_code: str=null, timeout_secs: int}
@returns(200) {data: map{created_at: str, custom_code: str?, id: str(uuid), phone_number: str, record_type: str, status: str, timeout_secs: int, type: str, updated_at: str, verify_profile_id: str(uuid)}}
@errors {400}

@endpoint GET /verifications/{verification_id}
@required {verification_id: str(uuid)}
@returns(200) {data: map{created_at: str, custom_code: str?, id: str(uuid), phone_number: str, record_type: str, status: str, timeout_secs: int, type: str, updated_at: str, verify_profile_id: str(uuid)}}
@errors {400}

@endpoint POST /verifications/{verification_id}/actions/verify
@required {verification_id: str(uuid)}
@optional {code: str, status: str(accepted/rejected)}
@returns(200) {data: map{phone_number: str, response_code: str}}
@errors {400}

@endgroup

@group verified_numbers
@endpoint GET /verified_numbers
@optional {page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400, 401, 422}

@endpoint POST /verified_numbers
@required {phone_number: str, verification_method: str(sms/call)}
@optional {extension: str=null}
@returns(200) {phone_number: str, verification_method: str}
@errors {400, 401, 422}

@endpoint DELETE /verified_numbers/{phone_number}
@required {phone_number: str}
@returns(200) {data: map{phone_number: str, record_type: str, verified_at: str}}
@errors {400, 401, 404}

@endpoint GET /verified_numbers/{phone_number}
@required {phone_number: str}
@returns(200) {data: map{phone_number: str, record_type: str, verified_at: str}}
@errors {400, 401, 404}

@endpoint POST /verified_numbers/{phone_number}/actions/verify
@required {phone_number: str, verification_code: str}
@returns(200) {data: map{phone_number: str, record_type: str, verified_at: str}}
@errors {400, 401, 404, 422}

@endgroup

@group verify_profiles
@endpoint GET /verify_profiles
@optional {filter: map, page: map}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {400}

@endpoint POST /verify_profiles
@required {name: str}
@optional {call: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, flashcall: map{app_name: str, default_verification_timeout_secs: int, whitelisted_destinations: [str]}, language: str, rcs: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), sms_fallback: bool, whitelisted_destinations: [str]}, sms: map{alpha_sender: str, app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, webhook_failover_url: str, webhook_url: str}
@returns(200) {data: map{call: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, created_at: str, flashcall: map{app_name: str, default_verification_timeout_secs: int}, id: str(uuid), language: str, name: str, rcs: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), sms_fallback: bool, whitelisted_destinations: [str]}, record_type: str, sms: map{alpha_sender: str?, app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, updated_at: str, webhook_failover_url: str, webhook_url: str}}
@errors {400}

@endpoint GET /verify_profiles/templates
@returns(200) {data: [map]}
@errors {400, 500}

@endpoint POST /verify_profiles/templates
@required {text: str}
@returns(200) {data: map{id: str(uuid), text: str}}
@errors {400}

@endpoint PATCH /verify_profiles/templates/{template_id}
@required {template_id: str(uuid), text: str}
@returns(200) {data: map{id: str(uuid), text: str}}
@errors {400}

@endpoint DELETE /verify_profiles/{verify_profile_id}
@required {verify_profile_id: str(uuid)}
@returns(200) {data: map{call: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, created_at: str, flashcall: map{app_name: str, default_verification_timeout_secs: int}, id: str(uuid), language: str, name: str, rcs: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), sms_fallback: bool, whitelisted_destinations: [str]}, record_type: str, sms: map{alpha_sender: str?, app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, updated_at: str, webhook_failover_url: str, webhook_url: str}}
@errors {400}

@endpoint GET /verify_profiles/{verify_profile_id}
@required {verify_profile_id: str(uuid)}
@returns(200) {data: map{call: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, created_at: str, flashcall: map{app_name: str, default_verification_timeout_secs: int}, id: str(uuid), language: str, name: str, rcs: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), sms_fallback: bool, whitelisted_destinations: [str]}, record_type: str, sms: map{alpha_sender: str?, app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, updated_at: str, webhook_failover_url: str, webhook_url: str}}
@errors {400}

@endpoint PATCH /verify_profiles/{verify_profile_id}
@required {verify_profile_id: str(uuid)}
@optional {call: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, flashcall: map{app_name: str, default_verification_timeout_secs: int, whitelisted_destinations: [str]}, language: str, name: str, rcs: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), sms_fallback: bool, whitelisted_destinations: [str]}, sms: map{alpha_sender: str, app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, webhook_failover_url: str, webhook_url: str}
@returns(200) {data: map{call: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, created_at: str, flashcall: map{app_name: str, default_verification_timeout_secs: int}, id: str(uuid), language: str, name: str, rcs: map{app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), sms_fallback: bool, whitelisted_destinations: [str]}, record_type: str, sms: map{alpha_sender: str?, app_name: str, code_length: int, default_verification_timeout_secs: int, messaging_template_id: str(uuid), whitelisted_destinations: [str]}, updated_at: str, webhook_failover_url: str, webhook_url: str}}
@errors {400}

@endgroup

@group virtual_cross_connects
@endpoint GET /virtual_cross_connects
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /virtual_cross_connects
@returns(200) {data: any}
@errors {422}

@endpoint DELETE /virtual_cross_connects/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /virtual_cross_connects/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint PATCH /virtual_cross_connects/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endgroup

@group virtual_cross_connects_coverage
@endpoint GET /virtual_cross_connects_coverage
@optional {filters: map, filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endgroup

@group voice_clones
@endpoint GET /voice_clones
@optional {page[number]: int=1, page[size]: int=20, filter[name]: str, filter[provider]: str(telnyx/minimax/Telnyx/Minimax), sort: str(name/-name/created_at/-created_at)=-created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /voice_clones
@required {gender: str(male/female/neutral), language: str, name: str, voice_design_id: str(uuid)}
@optional {provider: str(telnyx/minimax/Telnyx/Minimax)=telnyx}
@returns(201) {data: map{created_at: str(date-time), gender: str?, id: str(uuid), label: str?, language: str?, name: str, provider: str, provider_supported_models: [str], provider_voice_id: str?, record_type: str, source_voice_design_id: str(uuid)?, source_voice_design_version: int?, updated_at: str(date-time)}}
@errors {401, 404, 422, 502}

@endpoint POST /voice_clones/from_upload
@returns(201) {data: map{created_at: str(date-time), gender: str?, id: str(uuid), label: str?, language: str?, name: str, provider: str, provider_supported_models: [str], provider_voice_id: str?, record_type: str, source_voice_design_id: str(uuid)?, source_voice_design_version: int?, updated_at: str(date-time)}}
@errors {400, 401, 422, 502}

@endpoint DELETE /voice_clones/{id}
@required {id: str(uuid)}
@returns(204)
@errors {401, 404}

@endpoint PATCH /voice_clones/{id}
@required {id: str(uuid), name: str}
@optional {gender: str(male/female/neutral), language: str}
@returns(200) {data: map{created_at: str(date-time), gender: str?, id: str(uuid), label: str?, language: str?, name: str, provider: str, provider_supported_models: [str], provider_voice_id: str?, record_type: str, source_voice_design_id: str(uuid)?, source_voice_design_version: int?, updated_at: str(date-time)}}
@errors {401, 404, 422}

@endpoint GET /voice_clones/{id}/sample
@required {id: str(uuid)}
@returns(200)
@errors {401, 404}

@endgroup

@group voice_designs
@endpoint GET /voice_designs
@optional {page[number]: int=1, page[size]: int=20, filter[name]: str, sort: str(name/-name/created_at/-created_at)=-created_at}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint POST /voice_designs
@required {prompt: str, text: str}
@optional {language: str=Auto, max_new_tokens: int, name: str, provider: str(telnyx/minimax/Telnyx/Minimax)=telnyx, repetition_penalty: num(float), temperature: num(float), top_k: int, top_p: num(float), voice_design_id: str(uuid)}
@returns(201) {data: map{created_at: str(date-time), id: str(uuid), name: str, prompt: str, provider: str?, provider_supported_models: [str], provider_voice_id: str?, record_type: str, text: str, updated_at: str(date-time), version: int, version_created_at: str(date-time), voice_sample_size: int}}
@errors {401, 404, 409, 422, 502}

@endpoint DELETE /voice_designs/{id}
@required {id: str}
@returns(204)
@errors {401, 404}

@endpoint GET /voice_designs/{id}
@required {id: str}
@optional {version: int}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), name: str, prompt: str, provider: str?, provider_supported_models: [str], provider_voice_id: str?, record_type: str, text: str, updated_at: str(date-time), version: int, version_created_at: str(date-time), voice_sample_size: int}}
@errors {401, 404}

@endpoint PATCH /voice_designs/{id}
@required {id: str, name: str}
@returns(200) {data: map{created_at: str(date-time), id: str(uuid), name: str, provider: str?, provider_supported_models: [str], record_type: str, updated_at: str(date-time)}}
@errors {401, 404, 422}

@endpoint GET /voice_designs/{id}/sample
@required {id: str}
@optional {version: int}
@returns(200)
@errors {401, 404}

@endpoint DELETE /voice_designs/{id}/versions/{version}
@required {id: str, version: int}
@returns(204)
@errors {400, 401, 404}

@endgroup

@group webhook_deliveries
@endpoint GET /webhook_deliveries
@optional {page: map, filter: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401, 422}

@endpoint GET /webhook_deliveries/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {401, 404}

@endgroup

@group wireguard_interfaces
@endpoint GET /wireguard_interfaces
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /wireguard_interfaces
@returns(202) {data: any}
@errors {422}

@endpoint DELETE /wireguard_interfaces/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /wireguard_interfaces/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endgroup

@group wireguard_peers
@endpoint GET /wireguard_peers
@optional {filter: map, page: map}
@returns(200) {data: [any], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {422}

@endpoint POST /wireguard_peers
@returns(202) {data: any}
@errors {422}

@endpoint DELETE /wireguard_peers/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint GET /wireguard_peers/{id}
@required {id: str(uuid)}
@returns(200) {data: any}
@errors {422}

@endpoint PATCH /wireguard_peers/{id}
@required {id: str(uuid)}
@optional {public_key: str}
@returns(200) {data: any}
@errors {422}

@endpoint GET /wireguard_peers/{id}/config
@required {id: str(uuid)}
@returns(200)
@errors {422}

@endgroup

@group wireless
@endpoint GET /wireless/detail_records_reports
@optional {page[number]: int=1, page[size]: int=20}
@returns(200) {data: [map]}
@errors {401}

@endpoint POST /wireless/detail_records_reports
@optional {end_time: str, start_time: str}
@returns(201) {data: map{created_at: str, end_time: str, id: str(uuid), record_type: str, report_url: str, start_time: str, status: str, updated_at: str}}
@errors {422}

@endpoint DELETE /wireless/detail_records_reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, end_time: str, id: str(uuid), record_type: str, report_url: str, start_time: str, status: str, updated_at: str}}
@errors {404}

@endpoint GET /wireless/detail_records_reports/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, end_time: str, id: str(uuid), record_type: str, report_url: str, start_time: str, status: str, updated_at: str}}
@errors {404}

@endpoint GET /wireless/regions
@required {product: str}
@returns(200) {data: [map]}
@errors {404}

@endgroup

@group wireless_blocklist_values
@endpoint GET /wireless_blocklist_values
@required {type: str(country/mcc/plmn)}
@returns(200) {data: any, meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {404}

@endgroup

@group wireless_blocklists
@endpoint GET /wireless_blocklists
@optional {page[number]: int=1, page[size]: int=20, filter[name]: str, filter[type]: str, filter[values]: str}
@returns(200) {data: [map], meta: map{page_number: int, page_size: int, total_pages: int, total_results: int}}
@errors {401}

@endpoint PATCH /wireless_blocklists
@optional {name: str, type: str(country/mcc/plmn), values: [any]}
@returns(202) {data: map{created_at: str, id: str(uuid), name: str, record_type: str, type: str, updated_at: str, values: [any]}}
@errors {422}

@endpoint POST /wireless_blocklists
@required {name: str, type: str(country/mcc/plmn), values: [any]}
@returns(202) {data: map{created_at: str, id: str(uuid), name: str, record_type: str, type: str, updated_at: str, values: [any]}}
@errors {422}

@endpoint DELETE /wireless_blocklists/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, id: str(uuid), name: str, record_type: str, type: str, updated_at: str, values: [any]}}
@errors {404}

@endpoint GET /wireless_blocklists/{id}
@required {id: str(uuid)}
@returns(200) {data: map{created_at: str, id: str(uuid), name: str, record_type: str, type: str, updated_at: str, values: [any]}}
@errors {404}

@endgroup

@end
