From 54bc8a12fba4a7a825756e973095e76560256c94 Mon Sep 17 00:00:00 2001
From: Tamas Juhasz <Tamas.Juhasz@infobip.com>
Date: Mon, 20 Jan 2025 20:01:02 +0100
Subject: [PATCH] 3.1.0 release

---
 CHANGELOG.md                                  |   204 +-
 README.md                                     |   523 +-
 email.md                                      |    70 +
 examples/email_live_test.go                   |    48 +
 examples/sms_live_test.go                     |     2 +-
 moments.md                                    |   132 +
 pkg/infobip/api/call_routing_api.go           |   942 +
 pkg/infobip/api/calls_api.go                  | 20206 ++++++++++++++++
 pkg/infobip/api/click_to_call_api.go          |   229 +
 pkg/infobip/api/client.go                     |    24 +
 pkg/infobip/api/email_api.go                  |  6272 +++++
 pkg/infobip/api/flow_api.go                   |   607 +
 pkg/infobip/api/forms_api.go                  |   771 +
 pkg/infobip/api/messages_api.go               |   195 +-
 pkg/infobip/api/number_masking_api.go         |  1688 ++
 pkg/infobip/api/sms_api.go                    |     8 +-
 pkg/infobip/api/tfa_api.go                    |    58 +-
 pkg/infobip/api/voice_api.go                  |  3785 +++
 pkg/infobip/configuration.go                  |     3 +-
 pkg/infobip/infobip.go                        |     2 +-
 .../models/email/add_domain_request.go        |   302 +
 pkg/infobip/models/email/add_suppression.go   |   177 +
 .../models/email/add_suppression_request.go   |   122 +
 .../models/email/all_domains_response.go      |   165 +
 .../models/email/api_add_suppression_type.go  |   110 +
 pkg/infobip/models/email/api_domain_access.go |   110 +
 pkg/infobip/models/email/api_error.go         |   234 +
 .../models/email/api_error_resource.go        |   166 +
 .../models/email/api_error_violation.go       |   166 +
 pkg/infobip/models/email/api_exception.go     |   128 +
 pkg/infobip/models/email/api_page_details.go  |   150 +
 pkg/infobip/models/email/api_report.go        |   496 +
 .../models/email/api_reports_response.go      |   128 +
 pkg/infobip/models/email/api_request_error.go |   128 +
 .../models/email/api_request_error_details.go |   203 +
 .../models/email/api_suppression_type.go      |   112 +
 pkg/infobip/models/email/bulk_info.go         |   166 +
 .../models/email/bulk_reschedule_request.go   |   122 +
 .../models/email/bulk_reschedule_response.go  |   166 +
 .../models/email/bulk_schedule_response.go    |   164 +
 pkg/infobip/models/email/bulk_status.go       |   118 +
 pkg/infobip/models/email/bulk_status_info.go  |   164 +
 .../models/email/bulk_status_response.go      |   164 +
 .../email/bulk_update_status_request.go       |   121 +
 .../email/bulk_update_status_response.go      |   164 +
 .../models/email/delete_suppression.go        |   177 +
 .../email/delete_suppression_request.go       |   122 +
 pkg/infobip/models/email/delivery_report.go   |   533 +
 .../models/email/dlr_report_response.go       |   128 +
 .../models/email/dns_record_response.go       |   240 +
 pkg/infobip/models/email/domain_info.go       |   373 +
 .../models/email/domain_info_page_response.go |   149 +
 pkg/infobip/models/email/domain_ip_pool.go    |   205 +
 .../email/domain_ip_pool_assign_request.go    |   150 +
 .../email/domain_ip_pool_update_request.go    |   122 +
 pkg/infobip/models/email/domain_response.go   |   387 +
 pkg/infobip/models/{sms => email}/error.go    |    22 +-
 pkg/infobip/models/email/geo_location.go      |   166 +
 .../models/email/ip_detail_response.go        |   177 +
 .../models/email/ip_domain_response.go        |   177 +
 .../models/email/ip_pool_assign_ip_request.go |   122 +
 .../models/email/ip_pool_create_request.go    |   122 +
 .../models/email/ip_pool_detail_response.go   |   177 +
 pkg/infobip/models/email/ip_pool_response.go  |   150 +
 pkg/infobip/models/email/ip_response.go       |   150 +
 pkg/infobip/models/email/log.go               |   570 +
 pkg/infobip/models/email/log_response.go      |   129 +
 pkg/infobip/models/email/paging.go            |   236 +
 pkg/infobip/models/email/price.go             |   166 +
 pkg/infobip/models/email/recipient_info.go    |   203 +
 pkg/infobip/models/email/response_details.go  |   202 +
 .../email/return_path_address_request.go      |   122 +
 pkg/infobip/models/email/send_response.go     |   166 +
 .../models/email/single_message_status.go     |   277 +
 pkg/infobip/models/{sms => email}/status.go   |    12 +-
 pkg/infobip/models/email/suppression_info.go  |   234 +
 .../email/suppression_info_page_response.go   |   149 +
 pkg/infobip/models/email/track_report.go      |   460 +
 pkg/infobip/models/email/track_response.go    |   460 +
 .../models/email/tracking_event_request.go    |   203 +
 pkg/infobip/models/email/tracking_response.go |   203 +
 .../models/email/validation_request.go        |   122 +
 .../models/email/validation_response.go       |   460 +
 pkg/infobip/models/messagesapi/api_error.go   |     2 +
 .../models/messagesapi/api_error_resource.go  |     2 +
 .../models/messagesapi/api_error_violation.go |     2 +
 .../models/messagesapi/base_failover.go       |     3 +-
 .../carousel_template_open_url_button.go      |     3 +-
 .../carousel_template_phone_number_button.go  |     3 +-
 .../carousel_template_quick_reply_button.go   |     3 +-
 .../models/messagesapi/channel_destination.go |     2 +
 .../messagesapi/channels_destination.go       |     2 +
 .../default_message_request_options.go        |     2 +
 .../models/messagesapi/delivery_error.go      |     2 +
 .../models/messagesapi/delivery_report.go     |     2 +
 .../models/messagesapi/delivery_result.go     |     2 +
 .../models/messagesapi/delivery_status.go     |     2 +
 .../models/messagesapi/event_options.go       |     2 +
 .../models/messagesapi/event_request.go       |     2 +
 pkg/infobip/models/messagesapi/failover.go    |     2 +
 .../inbound_typing_started_event.go           |     5 +-
 .../inbound_typing_stopped_event.go           |     5 +-
 .../models/messagesapi/incoming_message.go    |     2 +
 .../models/messagesapi/india_dlt_options.go   |    39 +
 pkg/infobip/models/messagesapi/message.go     |     2 +
 .../message_add_calendar_event_button.go      |   273 +
 .../message_authentication_request_body.go    |     3 +-
 .../models/messagesapi/message_body.go        |    87 +
 .../models/messagesapi/message_body_type.go   |     6 +
 .../models/messagesapi/message_button.go      |    64 +-
 .../models/messagesapi/message_button_type.go |     8 +-
 .../messagesapi/message_card_options.go       |   212 +
 .../message_card_options_alignment_enum.go    |   110 +
 .../message_card_options_height_enum.go       |   112 +
 .../message_card_options_orientation_enum.go  |   110 +
 .../messagesapi/message_carousel_body.go      |     3 +-
 .../messagesapi/message_carousel_card.go      |     2 +
 .../messagesapi/message_carousel_card_body.go |    38 +
 .../messagesapi/message_confirmation_body.go  |     2 +
 .../messagesapi/message_contact_body.go       |   152 +
 .../models/messagesapi/message_content.go     |    40 +-
 .../messagesapi/message_delivery_reporting.go |     2 +
 .../models/messagesapi/message_destination.go |     3 +-
 .../messagesapi/message_document_body.go      |     3 +-
 .../models/messagesapi/message_footer.go      |   122 +
 .../models/messagesapi/message_image_body.go  |     3 +-
 .../models/messagesapi/message_list_body.go   |     3 +-
 .../models/messagesapi/message_list_item.go   |    39 +
 .../messagesapi/message_list_section.go       |     2 +
 .../messagesapi/message_location_body.go      |   226 +
 .../messagesapi/message_open_url_button.go    |     3 +-
 .../models/messagesapi/message_options.go     |     2 +
 .../messagesapi/message_reply_button.go       |     3 +-
 .../message_request_location_button.go        |   170 +
 .../models/messagesapi/message_response.go    |   159 +
 ...details.go => message_response_details.go} |    78 +-
 .../messagesapi/message_rich_link_body.go     |    41 +-
 .../models/messagesapi/message_status.go      |     2 +
 .../messagesapi/message_sticker_body.go       |   124 +
 .../models/messagesapi/message_text_body.go   |     3 +-
 .../models/messagesapi/message_text_header.go |     3 +-
 .../models/messagesapi/message_video_body.go  |     3 +-
 pkg/infobip/models/messagesapi/mo_event.go    |     5 +-
 .../messagesapi/mo_event_audio_content.go     |     3 +-
 ...o_event_authentication_response_content.go |     3 +-
 .../mo_event_button_reply_content.go          |     3 +-
 .../messagesapi/mo_event_document_content.go  |     3 +-
 .../messagesapi/mo_event_file_content.go      |     3 +-
 .../messagesapi/mo_event_image_content.go     |     3 +-
 .../mo_event_list_reply_content.go            |     3 +-
 .../messagesapi/mo_event_location_content.go  |     3 +-
 .../messagesapi/mo_event_subject_content.go   |     3 +-
 .../messagesapi/mo_event_text_content.go      |     3 +-
 .../messagesapi/mo_event_video_content.go     |     3 +-
 .../models/messagesapi/ott_webhooks.go        |     2 +
 .../outbound_typing_started_event.go          |     3 +-
 .../outbound_typing_stopped_event.go          |     3 +-
 pkg/infobip/models/messagesapi/platform.go    |     2 +
 .../models/messagesapi/regional_options.go    |     2 +
 pkg/infobip/models/messagesapi/request.go     |     2 +
 .../messagesapi/request_messages_inner.go     |     3 +-
 .../request_scheduling_settings.go            |     2 +
 ...ssage_response_message_response_details.go |   157 -
 pkg/infobip/models/messagesapi/seen_report.go |     2 +
 pkg/infobip/models/messagesapi/seen_result.go |     2 +
 .../messagesapi/seen_status_reporting.go      |     2 +
 .../models/messagesapi/sending_speed_limit.go |     2 +
 .../models/messagesapi/south_korea_options.go |    39 +
 pkg/infobip/models/messagesapi/template.go    |     2 +
 .../messagesapi/template_carousel_body.go     |     3 +-
 .../messagesapi/template_carousel_card.go     |     2 +
 .../template_carousel_card_image_header.go    |     3 +-
 .../template_carousel_card_video_header.go    |     3 +-
 .../messagesapi/template_catalog_button.go    |     3 +-
 .../messagesapi/template_copy_code_button.go  |     3 +-
 .../messagesapi/template_document_header.go   |     3 +-
 .../models/messagesapi/template_failover.go   |     2 +
 .../messagesapi/template_flow_button.go       |     3 +-
 .../messagesapi/template_image_header.go      |     3 +-
 .../messagesapi/template_location_header.go   |     3 +-
 .../models/messagesapi/template_message.go    |     2 +
 .../messagesapi/template_message_content.go   |     2 +
 .../template_multi_product_button.go          |     3 +-
 .../template_multi_product_button_section.go  |     2 +
 .../messagesapi/template_open_url_button.go   |     3 +-
 .../template_phone_number_button.go           |     3 +-
 .../template_quick_reply_button.go            |     3 +-
 .../models/messagesapi/template_text_body.go  |     9 +-
 .../messagesapi/template_text_header.go       |     9 +-
 .../messagesapi/template_video_header.go      |     3 +-
 .../models/messagesapi/to_destination.go      |     2 +
 .../models/messagesapi/turkey_iys_options.go  |     2 +
 pkg/infobip/models/messagesapi/url_options.go |     2 +
 .../messagesapi/validation_bad_response.go    |   215 +
 .../messagesapi/validation_ok_response.go     |   187 +
 .../models/messagesapi/validity_period.go     |     2 +
 pkg/infobip/models/moments/api_exception.go   |   128 +
 .../models/moments/api_request_error.go       |   128 +
 .../moments/api_request_error_details.go      |   203 +
 .../flow_add_flow_participant_result.go       |   184 +
 .../flow_add_flow_participant_status.go       |   112 +
 .../flow_add_flow_participants_request.go     |   196 +
 .../flow_add_flow_participants_response.go    |   122 +
 .../models/moments/flow_common_ott_contact.go |   203 +
 .../moments/flow_common_push_contact.go       |   240 +
 .../models/moments/flow_email_contact.go      |   129 +
 .../moments/flow_error_status_reason.go       |   120 +
 .../models/moments/flow_exception_response.go |   164 +
 pkg/infobip/models/moments/flow_gender.go     |   110 +
 .../models/moments/flow_integrations.go       |   128 +
 pkg/infobip/models/moments/flow_origin.go     |   136 +
 .../models/moments/flow_participant.go        |   194 +
 .../flow_participants_report_response.go      |   215 +
 pkg/infobip/models/moments/flow_person.go     |   900 +
 .../models/moments/flow_person_contacts.go    |   573 +
 .../moments/flow_person_unique_field.go       |   186 +
 .../moments/flow_person_unique_field_type.go  |   116 +
 .../models/moments/flow_phone_contact.go      |   129 +
 .../models/moments/flow_push_contact.go       |   277 +
 pkg/infobip/models/moments/flow_salesforce.go |   166 +
 pkg/infobip/models/moments/flow_type.go       |   110 +
 .../moments/forms_action_after_submission.go  |   148 +
 .../forms_action_after_submission_type.go     |   110 +
 .../models/moments/forms_component_type.go    |   146 +
 pkg/infobip/models/moments/forms_element.go   |   553 +
 .../models/moments/forms_element_option.go    |   184 +
 pkg/infobip/models/moments/forms_response.go  |   233 +
 .../models/moments/forms_response_content.go  |   370 +
 pkg/infobip/models/moments/forms_status.go    |   112 +
 .../models/moments/forms_status_response.go   |   121 +
 pkg/infobip/models/moments/forms_type.go      |   120 +
 .../models/moments/forms_validation_rules.go  |   344 +
 pkg/infobip/models/sms/api_error.go           |     2 +
 pkg/infobip/models/sms/api_error_resource.go  |     2 +
 pkg/infobip/models/sms/api_error_violation.go |     2 +
 pkg/infobip/models/sms/api_exception.go       |     2 +
 pkg/infobip/models/sms/api_request_error.go   |     2 +
 .../models/sms/api_request_error_details.go   |     2 +
 .../models/sms/application_configuration.go   |     2 +
 pkg/infobip/models/sms/application_request.go |     2 +
 .../models/sms/application_response.go        |     2 +
 pkg/infobip/models/sms/binary_content.go      |     2 +
 pkg/infobip/models/sms/bulk_request.go        |     2 +
 pkg/infobip/models/sms/bulk_response.go       |     2 +
 .../models/sms/bulk_status_response.go        |     2 +
 .../sms/create_email_message_request.go       |     2 +
 ...e_request.go => create_message_request.go} |   116 +-
 pkg/infobip/models/sms/delivery_report.go     |     2 +
 pkg/infobip/models/sms/delivery_reports.go    |     2 +
 pkg/infobip/models/sms/delivery_time.go       |     2 +
 .../models/sms/delivery_time_window.go        |     2 +
 pkg/infobip/models/sms/destination.go         |     2 +
 pkg/infobip/models/sms/email_message.go       |     2 +
 pkg/infobip/models/sms/email_status.go        |     2 +
 pkg/infobip/models/sms/inbound_message.go     |     2 +
 .../models/sms/inbound_message_result.go      |     2 +
 pkg/infobip/models/sms/india_dlt_options.go   |    39 +
 .../sms/{language_v3.go => language.go}       |    70 +-
 .../models/sms/language_configuration.go      |    14 +-
 pkg/infobip/models/sms/log.go                 |    14 +-
 pkg/infobip/models/sms/logs_response.go       |     2 +
 pkg/infobip/models/sms/message.go             |    14 +-
 .../{log_content.go => message_content.go}    |    49 +-
 pkg/infobip/models/sms/message_count.go       |     2 +
 .../models/sms/message_delivery_reporting.go  |     2 +
 pkg/infobip/models/sms/message_error.go       |     2 +
 pkg/infobip/models/sms/message_options.go     |     2 +
 pkg/infobip/models/sms/message_price.go       |     2 +
 .../models/sms/message_request_options.go     |     2 +
 .../models/sms/message_response_details.go    |     2 +
 pkg/infobip/models/sms/message_status.go      |     2 +
 pkg/infobip/models/sms/mo_report.go           |     2 +
 pkg/infobip/models/sms/platform.go            |     2 +
 pkg/infobip/models/sms/preview.go             |     2 +
 .../{language_v1.go => preview_language.go}   |    54 +-
 pkg/infobip/models/sms/preview_request.go     |     2 +
 pkg/infobip/models/sms/preview_response.go    |     2 +
 pkg/infobip/models/sms/price.go               |    74 +-
 pkg/infobip/models/sms/regional_options.go    |     2 +
 pkg/infobip/models/sms/report_response.go     |     2 +
 pkg/infobip/models/sms/request_envelope.go    |     2 +
 .../models/sms/request_scheduling_settings.go |     2 +
 pkg/infobip/models/sms/resend_pin_request.go  |     2 +
 pkg/infobip/models/sms/response.go            |     2 +
 pkg/infobip/models/sms/response_details.go    |     2 +
 pkg/infobip/models/sms/sending_speed_limit.go |     2 +
 pkg/infobip/models/sms/south_korea_options.go |     2 +
 .../sms/start_authentication_request.go       |     2 +
 .../sms/start_authentication_response.go      |     2 +
 .../sms/start_email_authentication_request.go |     2 +
 .../start_email_authentication_response.go    |     2 +
 ...r_voice_message.go => template_message.go} |   142 +-
 .../models/sms/text_message_content.go        |    14 +-
 pkg/infobip/models/sms/tfa_message.go         |     2 +
 pkg/infobip/models/sms/tracking.go            |     2 +
 pkg/infobip/models/sms/turkey_iys_options.go  |     2 +
 .../sms/update_email_message_request.go       |     2 +
 ...e_request.go => update_message_request.go} |   118 +-
 .../models/sms/update_status_request.go       |     2 +
 pkg/infobip/models/sms/url_options.go         |     2 +
 pkg/infobip/models/sms/validity_period.go     |     2 +
 pkg/infobip/models/sms/verification.go        |     2 +
 .../models/sms/verification_response.go       |     2 +
 pkg/infobip/models/sms/verify_pin_request.go  |     2 +
 pkg/infobip/models/sms/verify_pin_response.go |     2 +
 pkg/infobip/models/sms/webhooks.go            |     4 +-
 .../models/voice/action_call_request.go       |   373 +
 .../models/voice/action_conference_request.go |   206 +
 pkg/infobip/models/voice/action_response.go   |   128 +
 pkg/infobip/models/voice/action_status.go     |   114 +
 .../models/voice/add_existing_call_request.go |   169 +
 .../models/voice/add_new_call_request.go      |   198 +
 .../models/voice/advanced_voice_message.go    |   969 +
 .../voice/advanced_voice_message_request.go   |   159 +
 .../models/voice/announcement_callee.go       |   166 +
 .../models/voice/announcement_caller.go       |   166 +
 pkg/infobip/models/voice/announcements.go     |   164 +
 .../models/voice/anonymization_type.go        |   114 +
 pkg/infobip/models/voice/answer_request.go    |   165 +
 pkg/infobip/models/voice/api_exception.go     |   128 +
 pkg/infobip/models/voice/api_request_error.go |   128 +
 .../models/voice/api_request_error_details.go |   203 +
 .../voice/application_transfer_request.go     |   236 +
 .../models/voice/audio_callback_response.go   |   194 +
 pkg/infobip/models/voice/audio_codec.go       |   112 +
 .../models/voice/audio_media_properties.go    |   203 +
 .../models/voice/basic_security_config.go     |   152 +
 pkg/infobip/models/voice/billing_package.go   |   195 +
 .../models/voice/billing_package_type.go      |   110 +
 pkg/infobip/models/voice/bulk_call.go         |   385 +
 pkg/infobip/models/voice/bulk_call_request.go |   158 +
 pkg/infobip/models/voice/bulk_endpoint.go     |   111 +
 .../models/voice/bulk_endpoint_type.go        |   108 +
 pkg/infobip/models/voice/bulk_item.go         |   482 +
 .../models/voice/bulk_phone_endpoint.go       |   126 +
 pkg/infobip/models/voice/bulk_request.go      |   122 +
 pkg/infobip/models/voice/bulk_response.go     |   166 +
 pkg/infobip/models/voice/bulk_status.go       |   202 +
 .../models/voice/bulk_status_request.go       |   121 +
 .../models/voice/bulk_status_response.go      |   158 +
 pkg/infobip/models/voice/call.go              |   745 +
 pkg/infobip/models/voice/call_api.go          |   186 +
 pkg/infobip/models/voice/call_api_options.go  |   232 +
 pkg/infobip/models/voice/call_bulk_request.go |   223 +
 .../models/voice/call_bulk_response.go        |   166 +
 pkg/infobip/models/voice/call_direction.go    |   110 +
 pkg/infobip/models/voice/call_endpoint.go     |   198 +
 .../models/voice/call_endpoint_type.go        |   114 +
 pkg/infobip/models/voice/call_log.go          |   929 +
 pkg/infobip/models/voice/call_log_page.go     |   165 +
 pkg/infobip/models/voice/call_page.go         |   165 +
 pkg/infobip/models/voice/call_rate.go         |   165 +
 .../models/voice/call_recording_page.go       |   165 +
 .../models/voice/call_recording_request.go    |   193 +
 pkg/infobip/models/voice/call_request.go      |   474 +
 .../models/voice/call_routing_criteria.go     |   169 +
 .../voice/call_routing_criteria_type.go       |   112 +
 .../voice/call_routing_custom_data_entry.go   |   159 +
 .../models/voice/call_routing_destination.go  |   140 +
 .../voice/call_routing_destination_type.go    |   112 +
 .../models/voice/call_routing_endpoint.go     |   198 +
 .../call_routing_endpoint_destination.go      |   305 +
 ...l_routing_endpoint_destination_response.go |   196 +
 .../voice/call_routing_endpoint_type.go       |   114 +
 .../voice/call_routing_phone_criteria.go      |   133 +
 .../voice/call_routing_phone_endpoint.go      |   133 +
 .../models/voice/call_routing_recording.go    |   231 +
 .../call_routing_recording_composition.go     |   122 +
 .../voice/call_routing_recording_type.go      |   110 +
 .../voice/call_routing_route_request.go       |   187 +
 .../voice/call_routing_route_response.go      |   215 +
 .../voice/call_routing_route_response_page.go |   165 +
 .../voice/call_routing_search_criteria.go     |   165 +
 .../models/voice/call_routing_sip_criteria.go |   207 +
 .../models/voice/call_routing_sip_endpoint.go |   198 +
 .../models/voice/call_routing_sip_header.go   |   159 +
 .../voice/call_routing_url_destination.go     |   232 +
 ...ll_routing_url_destination_http_request.go |   318 +
 .../call_routing_url_destination_response.go  |   111 +
 .../call_routing_url_security_config_type.go  |   110 +
 .../voice/call_routing_viber_endpoint.go      |   170 +
 .../voice/call_routing_web_rtc_criteria.go    |   170 +
 .../voice/call_routing_web_rtc_endpoint.go    |   133 +
 pkg/infobip/models/voice/call_say_request.go  |   332 +
 pkg/infobip/models/voice/call_state.go        |   126 +
 pkg/infobip/models/voice/call_transfer.go     |   224 +
 pkg/infobip/models/voice/callback_response.go |   169 +
 .../calls_configuration_create_request.go     |   166 +
 .../models/voice/calls_configuration_page.go  |   165 +
 .../voice/calls_configuration_response.go     |   166 +
 .../calls_configuration_update_request.go     |   129 +
 pkg/infobip/models/voice/calls_recording.go   |   170 +
 pkg/infobip/models/voice/capture.go           |   286 +
 .../voice/capture_dtmf_callback_response.go   |   371 +
 pkg/infobip/models/voice/case_object.go       |   122 +
 .../models/voice/cisco_webex_provider.go      |   126 +
 .../models/voice/click_to_call_message.go     |   730 +
 .../voice/click_to_call_message_request.go    |   159 +
 pkg/infobip/models/voice/collect.go           |   195 +
 pkg/infobip/models/voice/collect_options.go   |   239 +
 pkg/infobip/models/voice/conference.go        |   276 +
 .../models/voice/conference_and_call.go       |   164 +
 ...onference_broadcast_webrtc_text_request.go |   129 +
 .../models/voice/conference_composition.go    |   133 +
 .../models/voice/conference_log_page.go       |   165 +
 .../models/voice/conference_log_response.go   |   422 +
 pkg/infobip/models/voice/conference_page.go   |   165 +
 .../models/voice/conference_play_request.go   |   158 +
 .../models/voice/conference_recording.go      |   387 +
 .../models/voice/conference_recording_log.go  |   166 +
 .../models/voice/conference_recording_page.go |   165 +
 .../voice/conference_recording_request.go     |   231 +
 .../models/voice/conference_request.go        |   272 +
 pkg/infobip/models/voice/connect_request.go   |   158 +
 .../voice/connect_with_new_call_request.go    |   241 +
 pkg/infobip/models/voice/country.go           |   166 +
 pkg/infobip/models/voice/country_list.go      |   129 +
 .../create_provider_sip_trunk_response.go     |   384 +
 .../create_registered_sip_trunk_response.go   |   689 +
 .../models/voice/create_sip_trunk_response.go |   169 +
 .../voice/create_static_sip_trunk_response.go |   728 +
 pkg/infobip/models/voice/creation_method.go   |   112 +
 pkg/infobip/models/voice/delivery_day.go      |   120 +
 pkg/infobip/models/voice/delivery_time.go     |   150 +
 .../models/voice/delivery_time_window.go      |   201 +
 pkg/infobip/models/voice/destination.go       |   159 +
 pkg/infobip/models/voice/detection_result.go  |   112 +
 pkg/infobip/models/voice/dial.go              |   195 +
 .../models/voice/dial_callback_response.go    |   285 +
 pkg/infobip/models/voice/dial_options.go      |   166 +
 .../models/voice/dial_to_conversations.go     |   121 +
 .../voice/dial_to_conversations_data.go       |   121 +
 .../voice/dial_to_conversations_options.go    |   158 +
 pkg/infobip/models/voice/dial_to_many.go      |   194 +
 .../models/voice/dial_to_many_options.go      |   240 +
 pkg/infobip/models/voice/dial_to_web_rtc.go   |   122 +
 .../dialog_broadcast_webrtc_text_request.go   |   129 +
 .../models/voice/dialog_call_request.go       |   305 +
 pkg/infobip/models/voice/dialog_log_page.go   |   165 +
 .../models/voice/dialog_log_response.go       |   532 +
 pkg/infobip/models/voice/dialog_page.go       |   165 +
 .../models/voice/dialog_play_request.go       |   165 +
 .../voice/dialog_propagation_options.go       |   210 +
 .../voice/dialog_recording_composition.go     |   133 +
 .../models/voice/dialog_recording_log.go      |   166 +
 .../models/voice/dialog_recording_page.go     |   165 +
 .../models/voice/dialog_recording_request.go  |   231 +
 .../models/voice/dialog_recording_response.go |   350 +
 pkg/infobip/models/voice/dialog_request.go    |   271 +
 pkg/infobip/models/voice/dialog_response.go   |   421 +
 .../models/voice/dialog_say_request.go        |   259 +
 pkg/infobip/models/voice/dialog_state.go      |   116 +
 .../dialog_with_existing_call_request.go      |   205 +
 .../models/voice/dtmf_capture_request.go      |   297 +
 pkg/infobip/models/voice/dtmf_options.go      |   166 +
 pkg/infobip/models/voice/dtmf_send_request.go |   159 +
 pkg/infobip/models/voice/dtmf_termination.go  |   133 +
 pkg/infobip/models/voice/dtmf_type.go         |   110 +
 pkg/infobip/models/voice/error_code.go        |   132 +
 pkg/infobip/models/voice/error_code_info.go   |   203 +
 .../extended_sip_trunk_status_response.go     |   237 +
 pkg/infobip/models/voice/fax_type.go          |   112 +
 pkg/infobip/models/voice/file.go              |   370 +
 pkg/infobip/models/voice/file_format.go       |   112 +
 pkg/infobip/models/voice/file_page.go         |   165 +
 pkg/infobip/models/voice/file_play_content.go |   125 +
 pkg/infobip/models/voice/for_each.go          |   215 +
 .../models/voice/freshworks_provider.go       |   154 +
 pkg/infobip/models/voice/gender.go            |   110 +
 .../models/voice/genesys_cloud_provider.go    |   199 +
 .../models/voice/genesys_cloud_region.go      |   136 +
 .../models/voice/get_voices_response.go       |   129 +
 pkg/infobip/models/voice/go_to.go             |   158 +
 pkg/infobip/models/voice/go_to_options.go     |   166 +
 pkg/infobip/models/voice/hangup.go            |   108 +
 pkg/infobip/models/voice/hangup_request.go    |   128 +
 pkg/infobip/models/voice/hangup_source.go     |   112 +
 pkg/infobip/models/voice/hmac_algorithm.go    |   118 +
 .../models/voice/hmac_security_config.go      |   151 +
 pkg/infobip/models/voice/http_method.go       |   116 +
 pkg/infobip/models/voice/if_then_else.go      |   233 +
 .../models/voice/ip_core_general_status.go    |   118 +
 pkg/infobip/models/voice/ivr_data.go          |   314 +
 pkg/infobip/models/voice/ivr_message.go       |   702 +
 pkg/infobip/models/voice/language.go          |   226 +
 .../models/voice/launch_scenario_request.go   |   159 +
 pkg/infobip/models/voice/logs_report.go       |   533 +
 pkg/infobip/models/voice/logs_response.go     |   129 +
 pkg/infobip/models/voice/machine_detection.go |   108 +
 .../voice/machine_detection_properties.go     |   165 +
 .../models/voice/machine_detection_request.go |   159 +
 pkg/infobip/models/voice/media_properties.go  |   164 +
 pkg/infobip/models/voice/media_stream.go      |   128 +
 .../voice/media_stream_audio_properties.go    |   159 +
 .../models/voice/media_stream_config_page.go  |   165 +
 .../voice/media_stream_config_request.go      |   186 +
 .../voice/media_stream_config_response.go     |   203 +
 pkg/infobip/models/voice/multi_channel.go     |   121 +
 pkg/infobip/models/voice/multi_message.go     |   306 +
 pkg/infobip/models/voice/multi_request.go     |   122 +
 .../voice/number_masking_callback_request.go  |   277 +
 .../voice/number_masking_credentials_body.go  |   150 +
 .../number_masking_credentials_response.go    |   166 +
 .../voice/number_masking_recording_status.go  |   112 +
 .../models/voice/number_masking_setup_body.go |   298 +
 .../voice/number_masking_setup_response.go    |   425 +
 .../voice/number_masking_status_request.go    |   831 +
 .../voice/number_masking_upload_body.go       |   166 +
 .../voice/number_masking_upload_response.go   |   129 +
 .../voice/number_presentation_format.go       |   112 +
 pkg/infobip/models/voice/numbers.go           |   166 +
 .../models/voice/on_demand_composition.go     |   169 +
 pkg/infobip/models/voice/page_info.go         |   206 +
 pkg/infobip/models/voice/participant.go       |   304 +
 .../models/voice/participant_session.go       |   203 +
 pkg/infobip/models/voice/participant_state.go |   112 +
 pkg/infobip/models/voice/pause.go             |   159 +
 pkg/infobip/models/voice/phone_endpoint.go    |   126 +
 pkg/infobip/models/voice/platform.go          |   166 +
 pkg/infobip/models/voice/play.go              |   159 +
 pkg/infobip/models/voice/play_content.go      |   198 +
 pkg/infobip/models/voice/play_content_type.go |   114 +
 .../models/voice/play_from_recording.go       |   159 +
 pkg/infobip/models/voice/play_request.go      |   305 +
 .../models/voice/pre_answer_request.go        |   170 +
 pkg/infobip/models/voice/price.go             |   166 +
 pkg/infobip/models/voice/provider.go          |   169 +
 .../voice/provider_sip_trunk_request.go       |   311 +
 .../voice/provider_sip_trunk_response.go      |   636 +
 .../models/voice/provider_trunk_type.go       |   112 +
 pkg/infobip/models/voice/record.go            |   195 +
 pkg/infobip/models/voice/record_options.go    |   240 +
 .../voice/recorded_audio_files_response.go    |   129 +
 pkg/infobip/models/voice/recorded_ivr_file.go |   351 +
 pkg/infobip/models/voice/recording.go         |   451 +
 pkg/infobip/models/voice/recording_file.go    |   480 +
 .../models/voice/recording_file_location.go   |   110 +
 .../models/voice/recording_location.go        |   140 +
 .../models/voice/recording_play_content.go    |   125 +
 pkg/infobip/models/voice/recording_request.go |   310 +
 .../models/voice/recording_start_request.go   |   128 +
 pkg/infobip/models/voice/recording_status.go  |   112 +
 pkg/infobip/models/voice/recording_type.go    |   110 +
 pkg/infobip/models/voice/region.go            |   203 +
 pkg/infobip/models/voice/region_list.go       |   129 +
 .../voice/registered_sip_trunk_request.go     |   518 +
 .../voice/registered_sip_trunk_response.go    |   674 +
 .../registered_sip_trunk_update_request.go    |   514 +
 pkg/infobip/models/voice/repeat_until.go      |   150 +
 pkg/infobip/models/voice/repeat_while.go      |   150 +
 pkg/infobip/models/{sms => voice}/report.go   |   333 +-
 .../report_response.go}                       |    57 +-
 .../models/voice/reschedule_request.go        |   122 +
 pkg/infobip/models/voice/retry.go             |   178 +
 pkg/infobip/models/voice/retry_options.go     |   203 +
 .../models/voice/ringback_generation.go       |   133 +
 pkg/infobip/models/voice/say.go               |   195 +
 pkg/infobip/models/voice/say_options.go       |   202 +
 pkg/infobip/models/voice/say_request.go       |   259 +
 pkg/infobip/models/voice/sbc_hosts.go         |   164 +
 .../models/voice/scheduling_options.go        |   165 +
 pkg/infobip/models/voice/script_inner.go      |   871 +
 pkg/infobip/models/voice/search_response.go   |   351 +
 pkg/infobip/models/voice/security_config.go   |   140 +
 .../models/voice/selection_strategy.go        |   110 +
 pkg/infobip/models/voice/send_sms.go          |   158 +
 pkg/infobip/models/voice/send_sms_data.go     |   187 +
 pkg/infobip/models/voice/send_to_reports.go   |   112 +
 pkg/infobip/models/voice/sending_speed.go     |   166 +
 pkg/infobip/models/voice/set_variable.go      |   150 +
 .../models/voice/sftp_upload_status.go        |   112 +
 .../models/voice/single_message_status.go     |   277 +
 pkg/infobip/models/voice/single_request.go    |   297 +
 pkg/infobip/models/voice/sip_endpoint.go      |   191 +
 pkg/infobip/models/voice/sip_options.go       |   133 +
 .../models/voice/sip_trunk_action_status.go   |   118 +
 .../voice/sip_trunk_action_status_response.go |   165 +
 .../models/voice/sip_trunk_admin_status.go    |   112 +
 .../models/voice/sip_trunk_location.go        |   126 +
 pkg/infobip/models/voice/sip_trunk_page.go    |   165 +
 .../sip_trunk_registration_credentials.go     |   166 +
 .../voice/sip_trunk_registration_status.go    |   110 +
 pkg/infobip/models/voice/sip_trunk_request.go |   169 +
 .../models/voice/sip_trunk_response.go        |   169 +
 .../models/voice/sip_trunk_service_address.go |   386 +
 .../voice/sip_trunk_service_address_page.go   |   165 +
 .../sip_trunk_service_address_request.go      |   308 +
 .../models/voice/sip_trunk_status_request.go  |   121 +
 .../models/voice/sip_trunk_status_response.go |   128 +
 pkg/infobip/models/voice/sip_trunk_type.go    |   112 +
 .../models/voice/speech_capture_request.go    |   214 +
 pkg/infobip/models/voice/speech_options.go    |   196 +
 .../models/voice/standard_voice_response.go   |   166 +
 .../voice/start_media_stream_request.go       |   121 +
 .../voice/start_transcription_request.go      |   128 +
 .../models/voice/static_sip_trunk_request.go  |   627 +
 .../models/voice/static_sip_trunk_response.go |   714 +
 .../voice/static_sip_trunk_update_request.go  |   627 +
 pkg/infobip/models/voice/status.go            |   118 +
 pkg/infobip/models/voice/stop_play_request.go |   129 +
 pkg/infobip/models/voice/switch_case.go       |   186 +
 .../models/voice/synthesis_voice_response.go  |   314 +
 .../models/voice/tag_identifier_type.go       |   110 +
 pkg/infobip/models/voice/termination.go       |   111 +
 pkg/infobip/models/voice/termination_type.go  |   108 +
 pkg/infobip/models/voice/text_play_content.go |   224 +
 pkg/infobip/models/voice/time_unit.go         |   114 +
 pkg/infobip/models/voice/transcription.go     |   162 +
 .../models/voice/transcription_language.go    |   392 +
 pkg/infobip/models/voice/update_request.go    |   166 +
 .../models/voice/update_scenario_request.go   |   187 +
 .../models/voice/update_scenario_response.go  |   351 +
 pkg/infobip/models/voice/url_play_content.go  |   161 +
 pkg/infobip/models/voice/viber_endpoint.go    |   126 +
 .../models/voice/video_media_properties.go    |   166 +
 pkg/infobip/models/voice/voice.go             |   166 +
 pkg/infobip/models/voice/voice_data.go        |   424 +
 pkg/infobip/models/voice/voice_error.go       |   314 +
 pkg/infobip/models/voice/voice_name.go        |   934 +
 pkg/infobip/models/voice/voice_options.go     |   166 +
 pkg/infobip/models/voice/voice_preferences.go |   164 +
 .../models/voice/voice_response_details.go    |   202 +
 pkg/infobip/models/voice/web_rtc_endpoint.go  |   163 +
 pkg/infobip/models/voice/while_do.go          |   150 +
 pkg/infobip/time.go                           |    28 +-
 pkg/infobip/utils.go                          |     1 -
 tests/api_test.go                             |    43 +
 tests/call_routing_api_test.go                |   531 +
 tests/calls_api_test.go                       |  5072 ++++
 tests/date_serialization_test.go              |    33 +-
 tests/email_api_test.go                       |  1380 ++
 tests/flow_api_test.go                        |   205 +
 tests/forms_api_test.go                       |   252 +
 tests/number_masking_api_test.go              |   303 +
 tests/sms_api_test.go                         |    20 +-
 tests/voice_api_test.go                       |  1061 +
 two-factor-authentication.md                  |   139 +-
 637 files changed, 136278 insertions(+), 1346 deletions(-)
 create mode 100644 email.md
 create mode 100644 examples/email_live_test.go
 create mode 100644 moments.md
 create mode 100644 pkg/infobip/api/call_routing_api.go
 create mode 100644 pkg/infobip/api/calls_api.go
 create mode 100644 pkg/infobip/api/click_to_call_api.go
 create mode 100644 pkg/infobip/api/email_api.go
 create mode 100644 pkg/infobip/api/flow_api.go
 create mode 100644 pkg/infobip/api/forms_api.go
 create mode 100644 pkg/infobip/api/number_masking_api.go
 create mode 100644 pkg/infobip/api/voice_api.go
 create mode 100644 pkg/infobip/models/email/add_domain_request.go
 create mode 100644 pkg/infobip/models/email/add_suppression.go
 create mode 100644 pkg/infobip/models/email/add_suppression_request.go
 create mode 100644 pkg/infobip/models/email/all_domains_response.go
 create mode 100644 pkg/infobip/models/email/api_add_suppression_type.go
 create mode 100644 pkg/infobip/models/email/api_domain_access.go
 create mode 100644 pkg/infobip/models/email/api_error.go
 create mode 100644 pkg/infobip/models/email/api_error_resource.go
 create mode 100644 pkg/infobip/models/email/api_error_violation.go
 create mode 100644 pkg/infobip/models/email/api_exception.go
 create mode 100644 pkg/infobip/models/email/api_page_details.go
 create mode 100644 pkg/infobip/models/email/api_report.go
 create mode 100644 pkg/infobip/models/email/api_reports_response.go
 create mode 100644 pkg/infobip/models/email/api_request_error.go
 create mode 100644 pkg/infobip/models/email/api_request_error_details.go
 create mode 100644 pkg/infobip/models/email/api_suppression_type.go
 create mode 100644 pkg/infobip/models/email/bulk_info.go
 create mode 100644 pkg/infobip/models/email/bulk_reschedule_request.go
 create mode 100644 pkg/infobip/models/email/bulk_reschedule_response.go
 create mode 100644 pkg/infobip/models/email/bulk_schedule_response.go
 create mode 100644 pkg/infobip/models/email/bulk_status.go
 create mode 100644 pkg/infobip/models/email/bulk_status_info.go
 create mode 100644 pkg/infobip/models/email/bulk_status_response.go
 create mode 100644 pkg/infobip/models/email/bulk_update_status_request.go
 create mode 100644 pkg/infobip/models/email/bulk_update_status_response.go
 create mode 100644 pkg/infobip/models/email/delete_suppression.go
 create mode 100644 pkg/infobip/models/email/delete_suppression_request.go
 create mode 100644 pkg/infobip/models/email/delivery_report.go
 create mode 100644 pkg/infobip/models/email/dlr_report_response.go
 create mode 100644 pkg/infobip/models/email/dns_record_response.go
 create mode 100644 pkg/infobip/models/email/domain_info.go
 create mode 100644 pkg/infobip/models/email/domain_info_page_response.go
 create mode 100644 pkg/infobip/models/email/domain_ip_pool.go
 create mode 100644 pkg/infobip/models/email/domain_ip_pool_assign_request.go
 create mode 100644 pkg/infobip/models/email/domain_ip_pool_update_request.go
 create mode 100644 pkg/infobip/models/email/domain_response.go
 rename pkg/infobip/models/{sms => email}/error.go (95%)
 create mode 100644 pkg/infobip/models/email/geo_location.go
 create mode 100644 pkg/infobip/models/email/ip_detail_response.go
 create mode 100644 pkg/infobip/models/email/ip_domain_response.go
 create mode 100644 pkg/infobip/models/email/ip_pool_assign_ip_request.go
 create mode 100644 pkg/infobip/models/email/ip_pool_create_request.go
 create mode 100644 pkg/infobip/models/email/ip_pool_detail_response.go
 create mode 100644 pkg/infobip/models/email/ip_pool_response.go
 create mode 100644 pkg/infobip/models/email/ip_response.go
 create mode 100644 pkg/infobip/models/email/log.go
 create mode 100644 pkg/infobip/models/email/log_response.go
 create mode 100644 pkg/infobip/models/email/paging.go
 create mode 100644 pkg/infobip/models/email/price.go
 create mode 100644 pkg/infobip/models/email/recipient_info.go
 create mode 100644 pkg/infobip/models/email/response_details.go
 create mode 100644 pkg/infobip/models/email/return_path_address_request.go
 create mode 100644 pkg/infobip/models/email/send_response.go
 create mode 100644 pkg/infobip/models/email/single_message_status.go
 rename pkg/infobip/models/{sms => email}/status.go (93%)
 create mode 100644 pkg/infobip/models/email/suppression_info.go
 create mode 100644 pkg/infobip/models/email/suppression_info_page_response.go
 create mode 100644 pkg/infobip/models/email/track_report.go
 create mode 100644 pkg/infobip/models/email/track_response.go
 create mode 100644 pkg/infobip/models/email/tracking_event_request.go
 create mode 100644 pkg/infobip/models/email/tracking_response.go
 create mode 100644 pkg/infobip/models/email/validation_request.go
 create mode 100644 pkg/infobip/models/email/validation_response.go
 create mode 100644 pkg/infobip/models/messagesapi/message_add_calendar_event_button.go
 create mode 100644 pkg/infobip/models/messagesapi/message_card_options.go
 create mode 100644 pkg/infobip/models/messagesapi/message_card_options_alignment_enum.go
 create mode 100644 pkg/infobip/models/messagesapi/message_card_options_height_enum.go
 create mode 100644 pkg/infobip/models/messagesapi/message_card_options_orientation_enum.go
 create mode 100644 pkg/infobip/models/messagesapi/message_contact_body.go
 create mode 100644 pkg/infobip/models/messagesapi/message_footer.go
 create mode 100644 pkg/infobip/models/messagesapi/message_location_body.go
 create mode 100644 pkg/infobip/models/messagesapi/message_request_location_button.go
 create mode 100644 pkg/infobip/models/messagesapi/message_response.go
 rename pkg/infobip/models/messagesapi/{message_response_message_response_details.go => message_response_details.go} (58%)
 create mode 100644 pkg/infobip/models/messagesapi/message_sticker_body.go
 delete mode 100644 pkg/infobip/models/messagesapi/response_envelope_message_response_message_response_details.go
 create mode 100644 pkg/infobip/models/messagesapi/validation_bad_response.go
 create mode 100644 pkg/infobip/models/messagesapi/validation_ok_response.go
 create mode 100644 pkg/infobip/models/moments/api_exception.go
 create mode 100644 pkg/infobip/models/moments/api_request_error.go
 create mode 100644 pkg/infobip/models/moments/api_request_error_details.go
 create mode 100644 pkg/infobip/models/moments/flow_add_flow_participant_result.go
 create mode 100644 pkg/infobip/models/moments/flow_add_flow_participant_status.go
 create mode 100644 pkg/infobip/models/moments/flow_add_flow_participants_request.go
 create mode 100644 pkg/infobip/models/moments/flow_add_flow_participants_response.go
 create mode 100644 pkg/infobip/models/moments/flow_common_ott_contact.go
 create mode 100644 pkg/infobip/models/moments/flow_common_push_contact.go
 create mode 100644 pkg/infobip/models/moments/flow_email_contact.go
 create mode 100644 pkg/infobip/models/moments/flow_error_status_reason.go
 create mode 100644 pkg/infobip/models/moments/flow_exception_response.go
 create mode 100644 pkg/infobip/models/moments/flow_gender.go
 create mode 100644 pkg/infobip/models/moments/flow_integrations.go
 create mode 100644 pkg/infobip/models/moments/flow_origin.go
 create mode 100644 pkg/infobip/models/moments/flow_participant.go
 create mode 100644 pkg/infobip/models/moments/flow_participants_report_response.go
 create mode 100644 pkg/infobip/models/moments/flow_person.go
 create mode 100644 pkg/infobip/models/moments/flow_person_contacts.go
 create mode 100644 pkg/infobip/models/moments/flow_person_unique_field.go
 create mode 100644 pkg/infobip/models/moments/flow_person_unique_field_type.go
 create mode 100644 pkg/infobip/models/moments/flow_phone_contact.go
 create mode 100644 pkg/infobip/models/moments/flow_push_contact.go
 create mode 100644 pkg/infobip/models/moments/flow_salesforce.go
 create mode 100644 pkg/infobip/models/moments/flow_type.go
 create mode 100644 pkg/infobip/models/moments/forms_action_after_submission.go
 create mode 100644 pkg/infobip/models/moments/forms_action_after_submission_type.go
 create mode 100644 pkg/infobip/models/moments/forms_component_type.go
 create mode 100644 pkg/infobip/models/moments/forms_element.go
 create mode 100644 pkg/infobip/models/moments/forms_element_option.go
 create mode 100644 pkg/infobip/models/moments/forms_response.go
 create mode 100644 pkg/infobip/models/moments/forms_response_content.go
 create mode 100644 pkg/infobip/models/moments/forms_status.go
 create mode 100644 pkg/infobip/models/moments/forms_status_response.go
 create mode 100644 pkg/infobip/models/moments/forms_type.go
 create mode 100644 pkg/infobip/models/moments/forms_validation_rules.go
 rename pkg/infobip/models/sms/{create_sms_or_voice_message_request.go => create_message_request.go} (67%)
 rename pkg/infobip/models/sms/{language_v3.go => language.go} (71%)
 rename pkg/infobip/models/sms/{log_content.go => message_content.go} (65%)
 rename pkg/infobip/models/sms/{language_v1.go => preview_language.go} (60%)
 rename pkg/infobip/models/sms/{sms_or_voice_message.go => template_message.go} (74%)
 rename pkg/infobip/models/sms/{update_sms_or_voice_message_request.go => update_message_request.go} (68%)
 create mode 100644 pkg/infobip/models/voice/action_call_request.go
 create mode 100644 pkg/infobip/models/voice/action_conference_request.go
 create mode 100644 pkg/infobip/models/voice/action_response.go
 create mode 100644 pkg/infobip/models/voice/action_status.go
 create mode 100644 pkg/infobip/models/voice/add_existing_call_request.go
 create mode 100644 pkg/infobip/models/voice/add_new_call_request.go
 create mode 100644 pkg/infobip/models/voice/advanced_voice_message.go
 create mode 100644 pkg/infobip/models/voice/advanced_voice_message_request.go
 create mode 100644 pkg/infobip/models/voice/announcement_callee.go
 create mode 100644 pkg/infobip/models/voice/announcement_caller.go
 create mode 100644 pkg/infobip/models/voice/announcements.go
 create mode 100644 pkg/infobip/models/voice/anonymization_type.go
 create mode 100644 pkg/infobip/models/voice/answer_request.go
 create mode 100644 pkg/infobip/models/voice/api_exception.go
 create mode 100644 pkg/infobip/models/voice/api_request_error.go
 create mode 100644 pkg/infobip/models/voice/api_request_error_details.go
 create mode 100644 pkg/infobip/models/voice/application_transfer_request.go
 create mode 100644 pkg/infobip/models/voice/audio_callback_response.go
 create mode 100644 pkg/infobip/models/voice/audio_codec.go
 create mode 100644 pkg/infobip/models/voice/audio_media_properties.go
 create mode 100644 pkg/infobip/models/voice/basic_security_config.go
 create mode 100644 pkg/infobip/models/voice/billing_package.go
 create mode 100644 pkg/infobip/models/voice/billing_package_type.go
 create mode 100644 pkg/infobip/models/voice/bulk_call.go
 create mode 100644 pkg/infobip/models/voice/bulk_call_request.go
 create mode 100644 pkg/infobip/models/voice/bulk_endpoint.go
 create mode 100644 pkg/infobip/models/voice/bulk_endpoint_type.go
 create mode 100644 pkg/infobip/models/voice/bulk_item.go
 create mode 100644 pkg/infobip/models/voice/bulk_phone_endpoint.go
 create mode 100644 pkg/infobip/models/voice/bulk_request.go
 create mode 100644 pkg/infobip/models/voice/bulk_response.go
 create mode 100644 pkg/infobip/models/voice/bulk_status.go
 create mode 100644 pkg/infobip/models/voice/bulk_status_request.go
 create mode 100644 pkg/infobip/models/voice/bulk_status_response.go
 create mode 100644 pkg/infobip/models/voice/call.go
 create mode 100644 pkg/infobip/models/voice/call_api.go
 create mode 100644 pkg/infobip/models/voice/call_api_options.go
 create mode 100644 pkg/infobip/models/voice/call_bulk_request.go
 create mode 100644 pkg/infobip/models/voice/call_bulk_response.go
 create mode 100644 pkg/infobip/models/voice/call_direction.go
 create mode 100644 pkg/infobip/models/voice/call_endpoint.go
 create mode 100644 pkg/infobip/models/voice/call_endpoint_type.go
 create mode 100644 pkg/infobip/models/voice/call_log.go
 create mode 100644 pkg/infobip/models/voice/call_log_page.go
 create mode 100644 pkg/infobip/models/voice/call_page.go
 create mode 100644 pkg/infobip/models/voice/call_rate.go
 create mode 100644 pkg/infobip/models/voice/call_recording_page.go
 create mode 100644 pkg/infobip/models/voice/call_recording_request.go
 create mode 100644 pkg/infobip/models/voice/call_request.go
 create mode 100644 pkg/infobip/models/voice/call_routing_criteria.go
 create mode 100644 pkg/infobip/models/voice/call_routing_criteria_type.go
 create mode 100644 pkg/infobip/models/voice/call_routing_custom_data_entry.go
 create mode 100644 pkg/infobip/models/voice/call_routing_destination.go
 create mode 100644 pkg/infobip/models/voice/call_routing_destination_type.go
 create mode 100644 pkg/infobip/models/voice/call_routing_endpoint.go
 create mode 100644 pkg/infobip/models/voice/call_routing_endpoint_destination.go
 create mode 100644 pkg/infobip/models/voice/call_routing_endpoint_destination_response.go
 create mode 100644 pkg/infobip/models/voice/call_routing_endpoint_type.go
 create mode 100644 pkg/infobip/models/voice/call_routing_phone_criteria.go
 create mode 100644 pkg/infobip/models/voice/call_routing_phone_endpoint.go
 create mode 100644 pkg/infobip/models/voice/call_routing_recording.go
 create mode 100644 pkg/infobip/models/voice/call_routing_recording_composition.go
 create mode 100644 pkg/infobip/models/voice/call_routing_recording_type.go
 create mode 100644 pkg/infobip/models/voice/call_routing_route_request.go
 create mode 100644 pkg/infobip/models/voice/call_routing_route_response.go
 create mode 100644 pkg/infobip/models/voice/call_routing_route_response_page.go
 create mode 100644 pkg/infobip/models/voice/call_routing_search_criteria.go
 create mode 100644 pkg/infobip/models/voice/call_routing_sip_criteria.go
 create mode 100644 pkg/infobip/models/voice/call_routing_sip_endpoint.go
 create mode 100644 pkg/infobip/models/voice/call_routing_sip_header.go
 create mode 100644 pkg/infobip/models/voice/call_routing_url_destination.go
 create mode 100644 pkg/infobip/models/voice/call_routing_url_destination_http_request.go
 create mode 100644 pkg/infobip/models/voice/call_routing_url_destination_response.go
 create mode 100644 pkg/infobip/models/voice/call_routing_url_security_config_type.go
 create mode 100644 pkg/infobip/models/voice/call_routing_viber_endpoint.go
 create mode 100644 pkg/infobip/models/voice/call_routing_web_rtc_criteria.go
 create mode 100644 pkg/infobip/models/voice/call_routing_web_rtc_endpoint.go
 create mode 100644 pkg/infobip/models/voice/call_say_request.go
 create mode 100644 pkg/infobip/models/voice/call_state.go
 create mode 100644 pkg/infobip/models/voice/call_transfer.go
 create mode 100644 pkg/infobip/models/voice/callback_response.go
 create mode 100644 pkg/infobip/models/voice/calls_configuration_create_request.go
 create mode 100644 pkg/infobip/models/voice/calls_configuration_page.go
 create mode 100644 pkg/infobip/models/voice/calls_configuration_response.go
 create mode 100644 pkg/infobip/models/voice/calls_configuration_update_request.go
 create mode 100644 pkg/infobip/models/voice/calls_recording.go
 create mode 100644 pkg/infobip/models/voice/capture.go
 create mode 100644 pkg/infobip/models/voice/capture_dtmf_callback_response.go
 create mode 100644 pkg/infobip/models/voice/case_object.go
 create mode 100644 pkg/infobip/models/voice/cisco_webex_provider.go
 create mode 100644 pkg/infobip/models/voice/click_to_call_message.go
 create mode 100644 pkg/infobip/models/voice/click_to_call_message_request.go
 create mode 100644 pkg/infobip/models/voice/collect.go
 create mode 100644 pkg/infobip/models/voice/collect_options.go
 create mode 100644 pkg/infobip/models/voice/conference.go
 create mode 100644 pkg/infobip/models/voice/conference_and_call.go
 create mode 100644 pkg/infobip/models/voice/conference_broadcast_webrtc_text_request.go
 create mode 100644 pkg/infobip/models/voice/conference_composition.go
 create mode 100644 pkg/infobip/models/voice/conference_log_page.go
 create mode 100644 pkg/infobip/models/voice/conference_log_response.go
 create mode 100644 pkg/infobip/models/voice/conference_page.go
 create mode 100644 pkg/infobip/models/voice/conference_play_request.go
 create mode 100644 pkg/infobip/models/voice/conference_recording.go
 create mode 100644 pkg/infobip/models/voice/conference_recording_log.go
 create mode 100644 pkg/infobip/models/voice/conference_recording_page.go
 create mode 100644 pkg/infobip/models/voice/conference_recording_request.go
 create mode 100644 pkg/infobip/models/voice/conference_request.go
 create mode 100644 pkg/infobip/models/voice/connect_request.go
 create mode 100644 pkg/infobip/models/voice/connect_with_new_call_request.go
 create mode 100644 pkg/infobip/models/voice/country.go
 create mode 100644 pkg/infobip/models/voice/country_list.go
 create mode 100644 pkg/infobip/models/voice/create_provider_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/create_registered_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/create_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/create_static_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/creation_method.go
 create mode 100644 pkg/infobip/models/voice/delivery_day.go
 create mode 100644 pkg/infobip/models/voice/delivery_time.go
 create mode 100644 pkg/infobip/models/voice/delivery_time_window.go
 create mode 100644 pkg/infobip/models/voice/destination.go
 create mode 100644 pkg/infobip/models/voice/detection_result.go
 create mode 100644 pkg/infobip/models/voice/dial.go
 create mode 100644 pkg/infobip/models/voice/dial_callback_response.go
 create mode 100644 pkg/infobip/models/voice/dial_options.go
 create mode 100644 pkg/infobip/models/voice/dial_to_conversations.go
 create mode 100644 pkg/infobip/models/voice/dial_to_conversations_data.go
 create mode 100644 pkg/infobip/models/voice/dial_to_conversations_options.go
 create mode 100644 pkg/infobip/models/voice/dial_to_many.go
 create mode 100644 pkg/infobip/models/voice/dial_to_many_options.go
 create mode 100644 pkg/infobip/models/voice/dial_to_web_rtc.go
 create mode 100644 pkg/infobip/models/voice/dialog_broadcast_webrtc_text_request.go
 create mode 100644 pkg/infobip/models/voice/dialog_call_request.go
 create mode 100644 pkg/infobip/models/voice/dialog_log_page.go
 create mode 100644 pkg/infobip/models/voice/dialog_log_response.go
 create mode 100644 pkg/infobip/models/voice/dialog_page.go
 create mode 100644 pkg/infobip/models/voice/dialog_play_request.go
 create mode 100644 pkg/infobip/models/voice/dialog_propagation_options.go
 create mode 100644 pkg/infobip/models/voice/dialog_recording_composition.go
 create mode 100644 pkg/infobip/models/voice/dialog_recording_log.go
 create mode 100644 pkg/infobip/models/voice/dialog_recording_page.go
 create mode 100644 pkg/infobip/models/voice/dialog_recording_request.go
 create mode 100644 pkg/infobip/models/voice/dialog_recording_response.go
 create mode 100644 pkg/infobip/models/voice/dialog_request.go
 create mode 100644 pkg/infobip/models/voice/dialog_response.go
 create mode 100644 pkg/infobip/models/voice/dialog_say_request.go
 create mode 100644 pkg/infobip/models/voice/dialog_state.go
 create mode 100644 pkg/infobip/models/voice/dialog_with_existing_call_request.go
 create mode 100644 pkg/infobip/models/voice/dtmf_capture_request.go
 create mode 100644 pkg/infobip/models/voice/dtmf_options.go
 create mode 100644 pkg/infobip/models/voice/dtmf_send_request.go
 create mode 100644 pkg/infobip/models/voice/dtmf_termination.go
 create mode 100644 pkg/infobip/models/voice/dtmf_type.go
 create mode 100644 pkg/infobip/models/voice/error_code.go
 create mode 100644 pkg/infobip/models/voice/error_code_info.go
 create mode 100644 pkg/infobip/models/voice/extended_sip_trunk_status_response.go
 create mode 100644 pkg/infobip/models/voice/fax_type.go
 create mode 100644 pkg/infobip/models/voice/file.go
 create mode 100644 pkg/infobip/models/voice/file_format.go
 create mode 100644 pkg/infobip/models/voice/file_page.go
 create mode 100644 pkg/infobip/models/voice/file_play_content.go
 create mode 100644 pkg/infobip/models/voice/for_each.go
 create mode 100644 pkg/infobip/models/voice/freshworks_provider.go
 create mode 100644 pkg/infobip/models/voice/gender.go
 create mode 100644 pkg/infobip/models/voice/genesys_cloud_provider.go
 create mode 100644 pkg/infobip/models/voice/genesys_cloud_region.go
 create mode 100644 pkg/infobip/models/voice/get_voices_response.go
 create mode 100644 pkg/infobip/models/voice/go_to.go
 create mode 100644 pkg/infobip/models/voice/go_to_options.go
 create mode 100644 pkg/infobip/models/voice/hangup.go
 create mode 100644 pkg/infobip/models/voice/hangup_request.go
 create mode 100644 pkg/infobip/models/voice/hangup_source.go
 create mode 100644 pkg/infobip/models/voice/hmac_algorithm.go
 create mode 100644 pkg/infobip/models/voice/hmac_security_config.go
 create mode 100644 pkg/infobip/models/voice/http_method.go
 create mode 100644 pkg/infobip/models/voice/if_then_else.go
 create mode 100644 pkg/infobip/models/voice/ip_core_general_status.go
 create mode 100644 pkg/infobip/models/voice/ivr_data.go
 create mode 100644 pkg/infobip/models/voice/ivr_message.go
 create mode 100644 pkg/infobip/models/voice/language.go
 create mode 100644 pkg/infobip/models/voice/launch_scenario_request.go
 create mode 100644 pkg/infobip/models/voice/logs_report.go
 create mode 100644 pkg/infobip/models/voice/logs_response.go
 create mode 100644 pkg/infobip/models/voice/machine_detection.go
 create mode 100644 pkg/infobip/models/voice/machine_detection_properties.go
 create mode 100644 pkg/infobip/models/voice/machine_detection_request.go
 create mode 100644 pkg/infobip/models/voice/media_properties.go
 create mode 100644 pkg/infobip/models/voice/media_stream.go
 create mode 100644 pkg/infobip/models/voice/media_stream_audio_properties.go
 create mode 100644 pkg/infobip/models/voice/media_stream_config_page.go
 create mode 100644 pkg/infobip/models/voice/media_stream_config_request.go
 create mode 100644 pkg/infobip/models/voice/media_stream_config_response.go
 create mode 100644 pkg/infobip/models/voice/multi_channel.go
 create mode 100644 pkg/infobip/models/voice/multi_message.go
 create mode 100644 pkg/infobip/models/voice/multi_request.go
 create mode 100644 pkg/infobip/models/voice/number_masking_callback_request.go
 create mode 100644 pkg/infobip/models/voice/number_masking_credentials_body.go
 create mode 100644 pkg/infobip/models/voice/number_masking_credentials_response.go
 create mode 100644 pkg/infobip/models/voice/number_masking_recording_status.go
 create mode 100644 pkg/infobip/models/voice/number_masking_setup_body.go
 create mode 100644 pkg/infobip/models/voice/number_masking_setup_response.go
 create mode 100644 pkg/infobip/models/voice/number_masking_status_request.go
 create mode 100644 pkg/infobip/models/voice/number_masking_upload_body.go
 create mode 100644 pkg/infobip/models/voice/number_masking_upload_response.go
 create mode 100644 pkg/infobip/models/voice/number_presentation_format.go
 create mode 100644 pkg/infobip/models/voice/numbers.go
 create mode 100644 pkg/infobip/models/voice/on_demand_composition.go
 create mode 100644 pkg/infobip/models/voice/page_info.go
 create mode 100644 pkg/infobip/models/voice/participant.go
 create mode 100644 pkg/infobip/models/voice/participant_session.go
 create mode 100644 pkg/infobip/models/voice/participant_state.go
 create mode 100644 pkg/infobip/models/voice/pause.go
 create mode 100644 pkg/infobip/models/voice/phone_endpoint.go
 create mode 100644 pkg/infobip/models/voice/platform.go
 create mode 100644 pkg/infobip/models/voice/play.go
 create mode 100644 pkg/infobip/models/voice/play_content.go
 create mode 100644 pkg/infobip/models/voice/play_content_type.go
 create mode 100644 pkg/infobip/models/voice/play_from_recording.go
 create mode 100644 pkg/infobip/models/voice/play_request.go
 create mode 100644 pkg/infobip/models/voice/pre_answer_request.go
 create mode 100644 pkg/infobip/models/voice/price.go
 create mode 100644 pkg/infobip/models/voice/provider.go
 create mode 100644 pkg/infobip/models/voice/provider_sip_trunk_request.go
 create mode 100644 pkg/infobip/models/voice/provider_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/provider_trunk_type.go
 create mode 100644 pkg/infobip/models/voice/record.go
 create mode 100644 pkg/infobip/models/voice/record_options.go
 create mode 100644 pkg/infobip/models/voice/recorded_audio_files_response.go
 create mode 100644 pkg/infobip/models/voice/recorded_ivr_file.go
 create mode 100644 pkg/infobip/models/voice/recording.go
 create mode 100644 pkg/infobip/models/voice/recording_file.go
 create mode 100644 pkg/infobip/models/voice/recording_file_location.go
 create mode 100644 pkg/infobip/models/voice/recording_location.go
 create mode 100644 pkg/infobip/models/voice/recording_play_content.go
 create mode 100644 pkg/infobip/models/voice/recording_request.go
 create mode 100644 pkg/infobip/models/voice/recording_start_request.go
 create mode 100644 pkg/infobip/models/voice/recording_status.go
 create mode 100644 pkg/infobip/models/voice/recording_type.go
 create mode 100644 pkg/infobip/models/voice/region.go
 create mode 100644 pkg/infobip/models/voice/region_list.go
 create mode 100644 pkg/infobip/models/voice/registered_sip_trunk_request.go
 create mode 100644 pkg/infobip/models/voice/registered_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/registered_sip_trunk_update_request.go
 create mode 100644 pkg/infobip/models/voice/repeat_until.go
 create mode 100644 pkg/infobip/models/voice/repeat_while.go
 rename pkg/infobip/models/{sms => voice}/report.go (60%)
 rename pkg/infobip/models/{sms/delivery_result.go => voice/report_response.go} (57%)
 create mode 100644 pkg/infobip/models/voice/reschedule_request.go
 create mode 100644 pkg/infobip/models/voice/retry.go
 create mode 100644 pkg/infobip/models/voice/retry_options.go
 create mode 100644 pkg/infobip/models/voice/ringback_generation.go
 create mode 100644 pkg/infobip/models/voice/say.go
 create mode 100644 pkg/infobip/models/voice/say_options.go
 create mode 100644 pkg/infobip/models/voice/say_request.go
 create mode 100644 pkg/infobip/models/voice/sbc_hosts.go
 create mode 100644 pkg/infobip/models/voice/scheduling_options.go
 create mode 100644 pkg/infobip/models/voice/script_inner.go
 create mode 100644 pkg/infobip/models/voice/search_response.go
 create mode 100644 pkg/infobip/models/voice/security_config.go
 create mode 100644 pkg/infobip/models/voice/selection_strategy.go
 create mode 100644 pkg/infobip/models/voice/send_sms.go
 create mode 100644 pkg/infobip/models/voice/send_sms_data.go
 create mode 100644 pkg/infobip/models/voice/send_to_reports.go
 create mode 100644 pkg/infobip/models/voice/sending_speed.go
 create mode 100644 pkg/infobip/models/voice/set_variable.go
 create mode 100644 pkg/infobip/models/voice/sftp_upload_status.go
 create mode 100644 pkg/infobip/models/voice/single_message_status.go
 create mode 100644 pkg/infobip/models/voice/single_request.go
 create mode 100644 pkg/infobip/models/voice/sip_endpoint.go
 create mode 100644 pkg/infobip/models/voice/sip_options.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_action_status.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_action_status_response.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_admin_status.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_location.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_page.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_registration_credentials.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_registration_status.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_request.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_service_address.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_service_address_page.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_service_address_request.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_status_request.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_status_response.go
 create mode 100644 pkg/infobip/models/voice/sip_trunk_type.go
 create mode 100644 pkg/infobip/models/voice/speech_capture_request.go
 create mode 100644 pkg/infobip/models/voice/speech_options.go
 create mode 100644 pkg/infobip/models/voice/standard_voice_response.go
 create mode 100644 pkg/infobip/models/voice/start_media_stream_request.go
 create mode 100644 pkg/infobip/models/voice/start_transcription_request.go
 create mode 100644 pkg/infobip/models/voice/static_sip_trunk_request.go
 create mode 100644 pkg/infobip/models/voice/static_sip_trunk_response.go
 create mode 100644 pkg/infobip/models/voice/static_sip_trunk_update_request.go
 create mode 100644 pkg/infobip/models/voice/status.go
 create mode 100644 pkg/infobip/models/voice/stop_play_request.go
 create mode 100644 pkg/infobip/models/voice/switch_case.go
 create mode 100644 pkg/infobip/models/voice/synthesis_voice_response.go
 create mode 100644 pkg/infobip/models/voice/tag_identifier_type.go
 create mode 100644 pkg/infobip/models/voice/termination.go
 create mode 100644 pkg/infobip/models/voice/termination_type.go
 create mode 100644 pkg/infobip/models/voice/text_play_content.go
 create mode 100644 pkg/infobip/models/voice/time_unit.go
 create mode 100644 pkg/infobip/models/voice/transcription.go
 create mode 100644 pkg/infobip/models/voice/transcription_language.go
 create mode 100644 pkg/infobip/models/voice/update_request.go
 create mode 100644 pkg/infobip/models/voice/update_scenario_request.go
 create mode 100644 pkg/infobip/models/voice/update_scenario_response.go
 create mode 100644 pkg/infobip/models/voice/url_play_content.go
 create mode 100644 pkg/infobip/models/voice/viber_endpoint.go
 create mode 100644 pkg/infobip/models/voice/video_media_properties.go
 create mode 100644 pkg/infobip/models/voice/voice.go
 create mode 100644 pkg/infobip/models/voice/voice_data.go
 create mode 100644 pkg/infobip/models/voice/voice_error.go
 create mode 100644 pkg/infobip/models/voice/voice_name.go
 create mode 100644 pkg/infobip/models/voice/voice_options.go
 create mode 100644 pkg/infobip/models/voice/voice_preferences.go
 create mode 100644 pkg/infobip/models/voice/voice_response_details.go
 create mode 100644 pkg/infobip/models/voice/web_rtc_endpoint.go
 create mode 100644 pkg/infobip/models/voice/while_do.go
 create mode 100644 tests/call_routing_api_test.go
 create mode 100644 tests/calls_api_test.go
 create mode 100644 tests/email_api_test.go
 create mode 100644 tests/flow_api_test.go
 create mode 100644 tests/forms_api_test.go
 create mode 100644 tests/number_masking_api_test.go
 create mode 100644 tests/voice_api_test.go

diff --git a/CHANGELOG.md b/CHANGELOG.md
index bb7e6b8..78a66ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,60 +1,144 @@
-# Change Log of `infobip-api-go-client`
-
-All notable changes to the library will be documented in this file.
-
-The format of the file is based on [Keep a Changelog](http://keepachangelog.com/)
-and this library adheres to [Semantic Versioning](http://semver.org/) as mentioned in [README.md][readme] file.
-
-## [[3.0.0](https://github.com/infobip/infobip-api-go-client/releases/tag/3.0.0)] - 2024-10-24
-
-🎉 **NEW Major Version of `infobip-api-go-client`.**
-
-⚠ IMPORTANT NOTE: This release contains breaking changes! From this point onward `Go` 1.13 is no longer supported. The minimum supported version is `Go` 1.18.
-
-In this release, we updated and modernized the infobip library. It is auto-generated and different from the previous version.
-
-### Added
-* Most recent [Infobip SMS API](https://www.infobip.com/docs/api/channels/sms) feature set.
-* Support for [Infobip Messages API](https://www.infobip.com/docs/api/platform/messages-api).
-* Added mock tests to verify the correctness of request payloads and response handling.
-
-### Changed
-* To improve maintainability and organization, we have separated the models for each Infobip product into their own directories. This means that each product —such as `SMS`, `Messages API`, or other services— will now have its own dedicated folder for models, making it easier to manage dependencies and clearly see which models are tied to each specific product. Users will now find a more structured, modular design, allowing easier integration and upgrades in the future.
-
-## [[2.1.0](https://github.com/infobip/infobip-api-go-client/releases/tag/2.1.0)] - 2023-04-12
-
-### Added
-- Support for [Confirm Conversion API](https://www.infobip.com/docs/api/channels/sms/sms-messaging/outbound-sms/log-end-tag)
-
-### Changed
-- SMS models:
-    - Additional fields related to [CPaaS X](https://www.infobip.com/docs/cpaas-x): `EntityId` and `ApplicationId`.
-    - `UrlOptions` and `IncludeSMSCountInResponse` fields in `SmsAdvancedTextualRequest` model.
-    - `ValidationErrors` field in `SmsApiRequestErrorDetails` model.
-    - New regional options for sending promotional SMS to phone numbers registered in Turkey.
-    - New model `UrlOptions` for setting up URL shortening and tracking feature.
-- TFA models:
-    - New languages support for sending text to speech messages: `hr`, `sl` and `ro`.
-
-
-## [ [2.0.0](https://github.com/infobip/infobip-api-go-client/releases/tag/2.0.0) ] - 2021-06-30
-
-🎉 **NEW Major Version of `infobip-api-go-client`.**
-
-⚠ **IMPORTANT NOTE:** This release is the first major release of a given library.
-The changes listed below refer to the diff between the previous `pre-release` `0.x.x` based version.
-
-In this release, we updated and modernized the infobip library. It is auto-generated and completely different from the previous version.
-
-### Added
-- Support for [Infobip Two-factor Authentication API](https://www.infobip.com/docs/api#channels/sms/send-2fa-pin-code-over-sms)
-- `CONTRIBUTING.md` which contains guidelines for creating GitHub issues
-
-### Changed
-- Targeting minimum Go version 1.13
-- Models, structure, examples, etc. for [Infobip SMS API](https://www.infobip.com/docs/api#channels/sms)
-- Library dependencies
-- `README.md` which contains necessary data and examples for quickstart as well as some other important pieces of information on versioning, licensing, etc.
-
-[readme]: README.mustache
-
+# Change Log of `infobip-api-go-client`
+
+All notable changes to the library will be documented in this file.
+
+The format of the file is based on [Keep a Changelog](http://keepachangelog.com/)
+and this library adheres to [Semantic Versioning](http://semver.org/) as mentioned in [README.md][readme] file.
+
+## [ [3.1.0](https://github.com/infobip/infobip-api-go-client/releases/tag/3.1.0)] - 2025-01-20
+
+⚠️ IMPORTANT NOTE: This release contains compile time breaking changes.
+All changes, including breaking changes, are addressed and explained in the list bellow.
+If you find out that something was not addressed properly, please submit an issue.
+
+### Added
+* Most recent [Infobip SMS API](https://www.infobip.com/docs/api/channels/sms) feature set.
+* Most recent [Infobip Messages API](https://www.infobip.com/docs/api/platform/messages-api) feature set.
+* Support for [Infobip Email API](https://www.infobip.com/docs/api/channels/email)
+* Support for [Infobip Voice API](https://www.infobip.com/docs/api/channels/voice)
+* Support for [Infobip Moments](https://www.infobip.com/docs/api/customer-engagement/moments)
+* Added mock tests to verify the correctness of request payloads and response handling.
+
+### Changed
+
+#### Renamed Classes
+* Sms:
+  * **LanguageV1** renamed to **PreviewLanguage**
+  * **LanguageV3** renamed to **Language**
+  * **LogContent** renamed to **MessageContent**
+* Messages API:
+  * **MessageResponseMessageResponseDetails** renamed to **MessageResponseDetails**
+  * **ResponseEnvelopeMessageResponseMessageResponseDetails** renamed to **MessageResponse**
+* Tfa:
+  * **CreateSmsOrVoiceMessageRequest** renamed to **CreateMessageRequest**
+  * **UpdateSmsOrVoiceMessageRequest** renamed to **UpdateMessageRequest**
+  * **SmsOrVoiceMessageRequest** renamed to **TfaTemplateMessage**
+
+#### Documentation
+* Updated descriptions for models.
+* Fixed examples in the documentation (README.md, two-factor-authentication.md).
+
+#### Fixes
+* Fixed default function for creating instances with default discriminator values in the following components:
+  - `carousel_template_phone_number_button`
+  - `carousel_template_open_url_button`
+  - `carousel_template_quick_reply_button`
+  - `inbound_typing_starting_event`
+  - `inbound_typing_stopped_event`
+  - `message_authentication_request_body`
+  - `message_carousel_body`
+  - `message_document_body`
+  - `message_image_body`
+  - `message_list_body`
+  - `message_open_url_button`
+  - `message_reply_button`
+  - `message_rick_link_body`
+  - `message_text_body`
+  - `message_text_header`
+  - `message_video_body`
+  - `mo_event_audio_content`
+  - `mo_event_authentication_response_content`
+  - `mo_event_button_reply_content`
+  - `mo_event_document_content`
+  - `mo_event_file_content`
+  - `mo_event_image_content`
+  - `mo_event_list_reply_content`
+  - `mo_event_location_content`
+  - `mo_event_subject_content`
+  - `mo_event_text_content`
+  - `mo_event_video_content`
+  - `mo_event`
+  - `outbound_typing_started_event`
+  - `outbound_typing_stopped_event`
+  - `template_carousel_body`
+  - `template_carousel_card_image_header`
+  - `template_carousel_card_video_header`
+  - `template_catalog_button`
+  - `template_copy_code_button`
+  - `template_document_header`
+  - `template_flow_button`
+  - `template_image_header`
+  - `template_location_header`
+  - `template_multi_product_button`
+  - `template_open_url_button`
+  - `template_phone_number_button`
+  - `template_quick_reply_button`
+  - `template_text_body`
+  - `template_text_header`
+  - `template_video_header`
+
+### Removed
+* `delivery_result`, `price`, `status`, `error` unused classes, replaced by the existing `delivery_reports`, `message_price`, `message_status`, `message_error` class.
+
+## [[3.0.0](https://github.com/infobip/infobip-api-go-client/releases/tag/3.0.0)] - 2024-10-24
+
+🎉 **NEW Major Version of `infobip-api-go-client`.**
+
+⚠️ IMPORTANT NOTE: This release contains breaking changes! From this point onward `Go` 1.13 is no longer supported. The minimum supported version is `Go` 1.18.
+
+In this release, we updated and modernized the infobip-api-go-client library. It is auto-generated and different from the previous version.
+
+### Added
+* Most recent [Infobip SMS API](https://www.infobip.com/docs/api/channels/sms) feature set.
+* Support for [Infobip Messages API](https://www.infobip.com/docs/api/platform/messages-api).
+* Added mock tests to verify the correctness of request payloads and response handling.
+
+### Changed
+* To improve maintainability and organization, we have separated the models for each Infobip product into their own directories. This means that each product —such as `SMS`, `Messages API`, or other services— will now have its own dedicated folder for models, making it easier to manage dependencies and clearly see which models are tied to each specific product. Users will now find a more structured, modular design, allowing easier integration and upgrades in the future.
+
+## [[2.1.0](https://github.com/infobip/infobip-api-go-client/releases/tag/2.1.0)] - 2023-04-12
+
+### Added
+- Support for [Confirm Conversion API](https://www.infobip.com/docs/api/channels/sms/sms-messaging/outbound-sms/log-end-tag)
+
+### Changed
+- SMS models:
+    - Additional fields related to [CPaaS X](https://www.infobip.com/docs/cpaas-x): `EntityId` and `ApplicationId`.
+    - `UrlOptions` and `IncludeSMSCountInResponse` fields in `SmsAdvancedTextualRequest` model.
+    - `ValidationErrors` field in `SmsApiRequestErrorDetails` model.
+    - New regional options for sending promotional SMS to phone numbers registered in Turkey.
+    - New model `UrlOptions` for setting up URL shortening and tracking feature.
+- TFA models:
+    - New languages support for sending text to speech messages: `hr`, `sl` and `ro`.
+
+
+## [ [2.0.0](https://github.com/infobip/infobip-api-go-client/releases/tag/2.0.0) ] - 2021-06-30
+
+🎉 **NEW Major Version of `infobip-api-go-client`.**
+
+⚠ **IMPORTANT NOTE:** This release is the first major release of a given library.
+The changes listed below refer to the diff between the previous `pre-release` `0.x.x` based version.
+
+In this release, we updated and modernized the infobip-api-go-client library. It is auto-generated and completely different from the previous version.
+
+### Added
+- Support for [Infobip Two-factor Authentication API](https://www.infobip.com/docs/api#channels/sms/send-2fa-pin-code-over-sms)
+- `CONTRIBUTING.md` which contains guidelines for creating GitHub issues
+
+### Changed
+- Targeting minimum Go version 1.13
+- Models, structure, examples, etc. for [Infobip SMS API](https://www.infobip.com/docs/api#channels/sms)
+- Library dependencies
+- `README.md` which contains necessary data and examples for quickstart as well as some other important pieces of information on versioning, licensing, etc.
+
+[readme]: README.mustache
diff --git a/README.md b/README.md
index 4060286..6fb093b 100644
--- a/README.md
+++ b/README.md
@@ -1,257 +1,266 @@
-# Infobip API Go Client
-
-<img src="https://cdn-web.infobip.com/uploads/2023/01/Infobip-logo.svg" height="93px" alt="Infobip" />
-
-[![Go Reference](https://pkg.go.dev/badge/github.com/infobip/infobip-api-go-client.svg)](https://pkg.go.dev/github.com/infobip/infobip-api-go-client)
-[![MIT License](https://badgen.net/github/license/infobip/infobip-api-go-client)](https://opensource.org/licenses/MIT)
-
-This is a Go module for Infobip API and you can use it as a dependency when you want to consume [Infobip APIs][apidocs] in your application.
-To use this, you'll need an Infobip account. You can create a free trial account [here][signup].
-
-`infobip-api-go-client` is built on top of [OpenAPI Specification](https://swagger.io/specification/), powered by [OpenAPI Generator](https://openapi-generator.tech/).
-
-#### Table of contents:
-* [Documentation](#documentation)
-* [General Info](#general-info)
-* [Installation](#installation)
-* [Quickstart](#quickstart)
-* [Ask for help](#ask-for-help)
-
-## Documentation
-
-Detailed documentation about Infobip API can be found [here][apidocs].
-The current version of this library includes this subset of Infobip products:
-* [SMS](https://www.infobip.com/docs/api/channels/sms)
-* [Messages API](https://www.infobip.com/docs/api/platform/messages-api)
-
-## General Info
-For `infobip-api-go-client` versioning we use [Semantic Versioning][semver] scheme.
-
-Published under [MIT License][license].
-
-Minimum `Go` version supported by this library is `1.18`.
-
-## Installation
-Pull the library by using the following command:
-```shell
-go get github.com/infobip/infobip-api-go-client/v3
-```
-
-To use our library you have to import it in your project files:
-```shell
-import "github.com/infobip/infobip-api-go-client/v3"
-```
-
-Afterwards, to update your `go.mod` and `go.sum` files, simply run the following:
-```shell
-go mod tidy
-```
-
-## Quickstart
-
-#### Initialize the Client
-
-In order to initialize the client first you need to set some basics like configuration and authentication.
-
-We support multiple authentication methods, e.g. you can use [API Key](https://www.infobip.com/docs/essentials/api-authentication#api-key-header) or any of the other supported approaches.
-Once you have an [Infobip account](https://www.infobip.com/signup), you can manage your API keys through the Infobip [API key management](https://portal.infobip.com/settings/accounts/api-keys) page.
-
-To see your base URL, log in to the [Infobip API Resource][apidocs] hub with your Infobip credentials or visit your [Infobip account](https://portal.infobip.com/homepage/).
-
-Let's first set the configuration field.
-```go
-configuration := infobip.NewConfiguration()
-configuration.Host = "<YOUR_BASE_URL>"
-```
-
-Now you can initialize the API client.
-```go
-infobipClient := api.NewAPIClient(configuration)
-```
-
-For details, check the [client](https://github.com/infobip/infobip-api-go-client/blob/master/v3/pkg/infobip/client.go) source code.
-
-#### Authentication
-After that is done, we should set the authentication method.
-
-```go
-auth := context.WithValue(
-		context.Background(),
-		infobip.ContextAPIKeys,
-		map[string]infobip.APIKey{
-			"APIKeyHeader": {Key: "<YOUR_API_KEY>", Prefix: "<YOUR_API_PREFIX>"},
-		},
-	)
-```
-
-To understand how to generate above mentioned tokens, check [this](https://www.infobip.com/docs/essentials/api-authentication) page.
-
-That is it, now you are set to use the API.
-
-#### Send an SMS
-Here's a basic example of sending the SMS message.
-
-```go
-    import (
-    	"context"
-    	"fmt"
-
-    	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
-    	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/api"
-    	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/sms"
-    )
-
-    ...
-
-    destinations := []sms.Destination{
-		{To: "421907372599"},
-	}
-
-	content := sms.LogContent{
-		TextMessageContent: sms.NewTextMessageContent("Congratulations on sending your first message with GO library."),
-	}
-
-	givenMessage := sms.NewMessage(destinations, content)
-	givenMessage.SetSender("421902028966")
-
-	request := sms.NewRequestEnvelope([]sms.Message{
-		*givenMessage,
-	})
-
-	// Send the SMS message
-	apiResponse, httpResponse, err := infobipClient.
-		SmsAPI.
-		SendSmsMessages(auth).
-		RequestEnvelope(*request).
-		Execute()
-```
-
-// If, for any reason, you don't want to use some of the response fields, feel free to replace them with an underscore wildcard, eg.
-//  apiResponse, _, _ := ...
-```
-
-In order to be able to access our generated `Exception` models, you will have to do a little bit of type casting.
-Methods provided within `ServiceException` object are `GetMessageId()` and `GetText()` referring to the nature of the exception.
-Withing the `http.Response` response field (in example labeled as `httpResponse`) you can find pretty much everything that is referring to the HTTP status, e.g. `Status`, `StatusCode`, `Body`, `Header`, etc.
-
-```go
-if err != nil {
-    apiErr, isApiErr := err.(*api.GenericOpenAPIError)
-    if isApiErr {
-        ibErr, isIbErr := apiErr.Model().(sms.ApiException)
-        if isIbErr {
-            errMessageId := ibErr.RequestError.ServiceException.GetMessageId()
-            errText := ibErr.RequestError.ServiceException.GetText()
-            // HANDLE THE IB ERROR EXCEPTION
-        } else {
-            // HANDLE THE API ERROR EXCEPTION
-        }
-    } else {
-        // HANDLE THE EXCEPTION
-    }
-    return
-}
-```
-
-Additionally, you can retrieve a the `bulkId` and `messageId` from the successful response (`SmsResponse` object) to use for fetching a delivery report for a given message or a bulk.
-Bulk ID is received only when you send a message to more than one destination address or send multiple messages in a single request.
-
-```go
-bulkId := *apiResponse.BulkId
-messageId := *apiResponse.Messages[0].MessageId
-```
-
-#### Receive sent SMS report
-
-For each SMS that you send out, we can send you a message delivery report in real time. All you need to do is specify your endpoint when sending SMS in `notifyUrl` field of `SmsTextualMessage`, or subscribe for reports by contacting our support team.
-e.g. `https://{yourDomain}/delivery-reports`
-
-Example of webhook implementation:
-
-```go
-func deliveryReports(w http.ResponseWriter, req *http.Request) {
-    reqBody, _ := io.ReadAll(req.Body)
-    var report sms.DeliveryResult
-    err := json.Unmarshal(reqBody, &report)
-    if err != nil {
-        fmt.Println("Error:", err)
-        return
-    }
-
-    if report.HasResults() {
-        results := report.GetResults()
-        for _, result := range results {
-            status := result.GetStatus()
-            fmt.Println(fmt.Sprintf("%s - %s", result.GetMessageId(), status.GetName()))
-        }
-    }
-}
-
-func main() {
-    http.HandleFunc("/delivery-reports", deliveryReports)
-}
-```
-
-If you prefer to use your own serializer, please pay attention to the supported [date format](https://www.infobip.com/docs/essentials/integration-best-practices#date-formats).
-In this library, we are wrapping around the `time.Time` model with our own `infobip.Time` in order to enforce the time format to be serialized properly.
-
-#### Unicode & SMS preview
-Infobip API supports Unicode characters and automatically detects encoding. Unicode and non-standard GSM characters use additional space, avoid unpleasant surprises and check how different message configurations will affect your message text, number of characters and message parts.
-
-```go
-text := "Let's see how many characters will remain unused in this message."
-request := sms.NewPreviewRequest(text)
-
-apiResponse, httpResponse, err := infobipClient.
-    SendSmsApi.
-    PreviewSmsMessage(auth).
-    SmsPreviewRequest(*request).
-    Execute()
-```
-
-#### Receive incoming SMS
-If you want to receive SMS messages from your subscribers we can have them delivered to you in real time. When you buy and configure a number capable of receiving SMS, specify your endpoint as explained [here](https://www.infobip.com/docs/api#channels/sms/receive-inbound-sms-messages).
-e.g. `https://{yourDomain}/incoming-sms`.
-
-Example of webhook implementation:
-
-```go
-func incomingSms(w http.ResponseWriter, req *http.Request) {
-    reqBody, _ := io.ReadAll(req.Body)
-    var result sms.InboundMessageResult
-    err := json.Unmarshal(reqBody, &result)
-    if err != nil {
-        fmt.Println("Error:", err)
-        return
-    }
-
-    if result.HasResults() {
-        msgs := result.GetResults()
-        for _, msg := range msgs {
-            fmt.Println(fmt.Sprintf("%s - %s", msg.GetFrom(), msg.GetCleanText()))
-        }
-    }
-}
-
-func main() {
-    http.HandleFunc("/incoming-sms", incomingSms)
-}
-```
-
-#### Two-Factor Authentication (2FA)
-For 2FA quick start guide please check [these examples](two-factor-authentication.md).
-
-#### Messages API
-For Messages API quick start guide, view [these examples](messages-api.md).
-
-## Ask for help
-
-Feel free to open issues on the repository for any issue or feature request. As per pull requests, for details check the `CONTRIBUTING` [file][contributing] related to it - in short, we will not merge any pull requests, this code is auto-generated.
-
-If it is, however, something that requires our imminent attention feel free to contact us @ [support@infobip.com](mailto:support@infobip.com).
-
-[apidocs]: https://www.infobip.com/docs/api
-[signup]: https://www.infobip.com/signup
-[semver]: https://semver.org
-[license]: LICENSE
-[contributing]: CONTRIBUTING.md
+# Infobip API Go Client
+
+<img src="https://cdn-web.infobip.com/uploads/2023/01/Infobip-logo.svg" height="93px" alt="Infobip" />
+
+[![Go Reference](https://pkg.go.dev/badge/github.com/infobip/infobip-api-go-client.svg)](https://pkg.go.dev/github.com/infobip/infobip-api-go-client)
+[![MIT License](https://badgen.net/github/license/infobip/infobip-api-go-client)](https://opensource.org/licenses/MIT)
+
+This is a Go module for Infobip API and you can use it as a dependency when you want to consume [Infobip APIs][apidocs] in your application.
+To use this, you'll need an Infobip account. You can create a free trial account [here][signup].
+
+`infobip-api-go-client` is built on top of [OpenAPI Specification](https://swagger.io/specification/), powered by [OpenAPI Generator](https://openapi-generator.tech/).
+
+#### Table of contents:
+* [Documentation](#documentation)
+* [General Info](#general-info)
+* [Installation](#installation)
+* [Quickstart](#quickstart)
+* [Ask for help](#ask-for-help)
+
+## Documentation
+
+Detailed documentation about Infobip API can be found [here][apidocs].
+The current version of this library includes this subset of Infobip products:
+* [SMS](https://www.infobip.com/docs/api/channels/sms)
+* [Messages API](https://www.infobip.com/docs/api/platform/messages-api)
+* [Email](https://www.infobip.com/docs/api/channels/email)
+* [Voice](https://www.infobip.com/docs/api/channels/voice)
+* [Moments](https://www.infobip.com/docs/api/customer-engagement/moments)
+
+## General Info
+For `infobip-api-go-client` versioning we use [Semantic Versioning][semver] scheme.
+
+Published under [MIT License][license].
+
+Minimum `Go` version supported by this library is `1.18`.
+
+## Installation
+Pull the library by using the following command:
+```shell
+go get github.com/infobip/infobip-api-go-client/v3
+```
+
+To use our library you have to import it in your project files:
+```shell
+import "github.com/infobip/infobip-api-go-client/v3"
+```
+
+Afterwards, to update your `go.mod` and `go.sum` files, simply run the following:
+```shell
+go mod tidy
+```
+
+## Quickstart
+
+#### Initialize the Client
+
+In order to initialize the client first you need to set some basics like configuration and authentication.
+
+We support multiple authentication methods, e.g. you can use [API Key](https://www.infobip.com/docs/essentials/api-authentication#api-key-header) or any of the other supported approaches.
+Once you have an [Infobip account](https://www.infobip.com/signup), you can manage your API keys through the Infobip [API key management](https://portal.infobip.com/settings/accounts/api-keys) page.
+
+To see your base URL, log in to the [Infobip API Resource][apidocs] hub with your Infobip credentials or visit your [Infobip account](https://portal.infobip.com/homepage/).
+
+Let's first set the configuration field.
+```go
+configuration := infobip.NewConfiguration()
+configuration.Host = "<YOUR_BASE_URL>"
+```
+
+Now you can initialize the API client.
+```go
+infobipClient := api.NewAPIClient(configuration)
+```
+
+For details, check the [client](https://github.com/infobip/infobip-api-go-client/blob/master/v3/pkg/infobip/client.go) source code.
+
+#### Authentication
+After that is done, we should set the authentication method.
+
+```go
+auth := context.WithValue(
+		context.Background(),
+		infobip.ContextAPIKeys,
+		map[string]infobip.APIKey{
+			"APIKeyHeader": {Key: "<YOUR_API_KEY>", Prefix: "<YOUR_API_PREFIX>"},
+		},
+	)
+```
+
+To understand how to generate above mentioned tokens, check [this](https://www.infobip.com/docs/essentials/api-authentication) page.
+
+That is it, now you are set to use the API.
+
+#### Send an SMS
+Here's a basic example of sending the SMS message.
+
+```go
+    import (
+    	"context"
+    	"fmt"
+
+    	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+    	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/api"
+    	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/sms"
+    )
+
+    ...
+
+    destinations := []sms.Destination{
+		{To: "421907372599"},
+	}
+
+	content := sms.MessageContent{
+		TextMessageContent: sms.NewTextMessageContent("Congratulations on sending your first message with GO library."),
+	}
+
+	givenMessage := sms.NewMessage(destinations, content)
+	givenMessage.SetSender("421902028966")
+
+	request := sms.NewRequestEnvelope([]sms.Message{
+		*givenMessage,
+	})
+
+	// Send the SMS message
+	apiResponse, httpResponse, err := infobipClient.
+		SmsAPI.
+		SendSmsMessages(auth).
+		RequestEnvelope(*request).
+		Execute()
+```
+```
+    // If, for any reason, you don't want to use some of the response fields, feel free to replace them with an underscore wildcard, eg.
+    // apiResponse, _, _ := ...
+```
+
+In order to be able to access our generated `Exception` models, you will have to do a little bit of type casting.
+Methods provided within `ServiceException` object are `GetMessageId()` and `GetText()` referring to the nature of the exception.
+Withing the `http.Response` response field (in example labeled as `httpResponse`) you can find pretty much everything that is referring to the HTTP status, e.g. `Status`, `StatusCode`, `Body`, `Header`, etc.
+
+```go
+if err != nil {
+    apiErr, isApiErr := err.(*api.GenericOpenAPIError)
+    if isApiErr {
+        ibErr, isIbErr := apiErr.Model().(sms.ApiException)
+        if isIbErr {
+            errMessageId := ibErr.RequestError.ServiceException.GetMessageId()
+            errText := ibErr.RequestError.ServiceException.GetText()
+            // HANDLE THE IB ERROR EXCEPTION
+        } else {
+            // HANDLE THE API ERROR EXCEPTION
+        }
+    } else {
+        // HANDLE THE EXCEPTION
+    }
+    return
+}
+```
+
+Additionally, you can retrieve a the `bulkId` and `messageId` from the successful response (`SmsResponse` object) to use for fetching a delivery report for a given message or a bulk.
+Bulk ID is received only when you send a message to more than one destination address or send multiple messages in a single request.
+
+```go
+bulkId := *apiResponse.BulkId
+messageId := *apiResponse.Messages[0].MessageId
+```
+
+#### Receive sent SMS report
+
+For each SMS that you send out, we can send you a message delivery report in real time. All you need to do is specify your endpoint when sending SMS in `notifyUrl` field of `SmsTextualMessage`, or subscribe for reports by contacting our support team.
+e.g. `https://{yourDomain}/delivery-reports`
+
+Example of webhook implementation:
+
+```go
+func deliveryReports(w http.ResponseWriter, req *http.Request) {
+    reqBody, _ := io.ReadAll(req.Body)
+    var report sms.DeliveryResult
+    err := json.Unmarshal(reqBody, &report)
+    if err != nil {
+        fmt.Println("Error:", err)
+        return
+    }
+
+    if report.HasResults() {
+        results := report.GetResults()
+        for _, result := range results {
+            status := result.GetStatus()
+            fmt.Println(fmt.Sprintf("%s - %s", result.GetMessageId(), status.GetName()))
+        }
+    }
+}
+
+func main() {
+    http.HandleFunc("/delivery-reports", deliveryReports)
+}
+```
+
+If you prefer to use your own serializer, please pay attention to the supported [date format](https://www.infobip.com/docs/essentials/integration-best-practices#date-formats).
+In this library, we are wrapping around the `time.Time` model with our own `infobip.Time` in order to enforce the time format to be serialized properly.
+
+#### Unicode & SMS preview
+Infobip API supports Unicode characters and automatically detects encoding. Unicode and non-standard GSM characters use additional space, avoid unpleasant surprises and check how different message configurations will affect your message text, number of characters and message parts.
+
+```go
+text := "Let's see how many characters will remain unused in this message."
+request := sms.NewPreviewRequest(text)
+
+apiResponse, httpResponse, err := infobipClient.
+    SmsAPI.
+    PreviewSmsMessage(auth).
+    PreviewRequest(*request).
+    Execute()
+```
+
+#### Receive incoming SMS
+If you want to receive SMS messages from your subscribers we can have them delivered to you in real time. When you buy and configure a number capable of receiving SMS, specify your endpoint as explained [here](https://www.infobip.com/docs/api#channels/sms/receive-inbound-sms-messages).
+e.g. `https://{yourDomain}/incoming-sms`.
+
+Example of webhook implementation:
+
+```go
+func incomingSms(w http.ResponseWriter, req *http.Request) {
+    reqBody, _ := io.ReadAll(req.Body)
+    var result sms.InboundMessageResult
+    err := json.Unmarshal(reqBody, &result)
+    if err != nil {
+        fmt.Println("Error:", err)
+        return
+    }
+
+    if result.HasResults() {
+        msgs := result.GetResults()
+        for _, msg := range msgs {
+            fmt.Println(fmt.Sprintf("%s - %s", msg.GetFrom(), msg.GetCleanText()))
+        }
+    }
+}
+
+func main() {
+    http.HandleFunc("/incoming-sms", incomingSms)
+}
+```
+
+#### Two-Factor Authentication (2FA)
+For 2FA quick start guide please check [these examples](two-factor-authentication.md).
+
+#### Messages API
+For Messages API quick start guide, view [these examples](messages-api.md).
+
+#### Email
+For Email quick start guide, view [these examples](email.md).
+
+#### Moments
+For Moments quick start guide, view [these examples](moments.md).
+
+## Ask for help
+
+Feel free to open issues on the repository for any issue or feature request. As per pull requests, for details check the `CONTRIBUTING` [file][contributing] related to it - in short, we will not merge any pull requests, this code is auto-generated.
+
+If it is, however, something that requires our imminent attention feel free to contact us @ [support@infobip.com](mailto:support@infobip.com).
+
+[apidocs]: https://www.infobip.com/docs/api
+[signup]: https://www.infobip.com/signup
+[semver]: https://semver.org
+[license]: LICENSE
+[contributing]: CONTRIBUTING.md
diff --git a/email.md b/email.md
new file mode 100644
index 0000000..282034c
--- /dev/null
+++ b/email.md
@@ -0,0 +1,70 @@
+# Email API example
+
+This example demonstrates how to use the [Infobip Email API](https://www.infobip.com/docs/api/channels/email). You'll learn how to initialize an email client,
+send a message, and receive a delivery report.
+
+The first step is to add your configuration, initialize the api client and set your authentication:
+
+````go
+    configuration := infobip.NewConfiguration()
+    configuration.Host = "<YOUR_BASE_URL>"
+    
+    infobipClient := api.NewAPIClient(configuration)
+    
+    auth := context.WithValue(
+		context.Background(),
+		infobip.ContextAPIKeys,
+		map[string]infobip.APIKey{
+			"APIKeyHeader": {Key: "<YOUR_API_KEY>", Prefix: "<YOUR_API_PREFIX>"},
+		},
+	)
+````
+
+For details, check the [client](https://github.com/infobip/infobip-api-go-client/blob/master/v3/pkg/infobip/client.go) source code.
+
+Before sending an email message, you need to verify the domain with which you will be sending emails.
+
+## Send an Email with a file
+
+Fields `from`, `to`, and `subject` are required. The message must also contain at least one of these: `text`, `html`, or `templateId`.
+
+---
+**IMPORTANT NOTE**
+
+Keep in mind the following restrictions while using a trial account:
+
+- you can only send messages to verified email addresses,
+- you can only use your email address with the Infobip test domain in the following form: `YourUserName@selfserviceib.com`
+
+---
+
+```go
+    apiResponse, httpResponse, err := infobipClient.
+        EmailAPI.
+        SendEmail(auth).
+        To([]string{"john.smith@somedomain.com"}).
+        From("Jane Smith <jane.smith@somecompany.com>").
+        Subject("Mail subject text").
+        Text("Test message with a file")).
+        Attachment([]*os.File{attachmentFile}).
+        Execute()
+```
+
+## Delivery reports
+
+For each message that you send out, we can send you a delivery report in real time.
+All you need to do is specify your endpoint when sending email in the `notifyUrl` field.
+
+Additionally, you can use a `messageId` or a `bulkId` autogenerated in a response for troubleshooting and to fetch reports.
+
+```go
+    bulkId := "BULK-ID-123-xyz";
+    numberOfReportsLimit := int32(10);
+
+    response, _, err := infobipClient.
+        EmailAPI.
+        GetEmailDeliveryReports(auth).
+        BulkId(bulkId).
+        Limit(numberOfReportsLimit).
+        Execute()
+```
\ No newline at end of file
diff --git a/examples/email_live_test.go b/examples/email_live_test.go
new file mode 100644
index 0000000..550f1e0
--- /dev/null
+++ b/examples/email_live_test.go
@@ -0,0 +1,48 @@
+package examples
+
+import (
+	"context"
+	"fmt"
+	"testing"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/api"
+)
+
+func TestSendEmail(t *testing.T) {
+	configuration := infobip.NewConfiguration()
+	configuration.Host = "<YOUR_BASE_URL>"
+
+	infobipClient := api.NewAPIClient(configuration)
+
+	auth := context.WithValue(
+		context.Background(),
+		infobip.ContextAPIKeys,
+		map[string]infobip.APIKey{
+			"APIKeyHeader": {Key: "<YOUR_API_KEY>", Prefix: "<API_PREFIX>"},
+		},
+	)
+
+	apiResponse, httpResponse, err := infobipClient.
+		EmailAPI.
+		SendEmail(auth).
+		To([]string{"<DESTINATION1>", "<DESTINATION2>"}).
+		From("<FROM>").
+		Subject("<SUBJECT>").
+		Text("<TEXT>").
+		Execute()
+
+	// Check for errors
+	if err != nil {
+		t.Fatalf("Failed to send Email: %v", err) // Fail the test with the error message
+	}
+
+	// Output response details for debugging
+	fmt.Printf("Response: %+v\n", apiResponse)
+	fmt.Printf("HTTP Response Details: %+v\n", httpResponse)
+
+	// Validate response
+	if apiResponse == nil || apiResponse.Messages == nil || len(apiResponse.Messages) == 0 {
+		t.Fatalf("Invalid response: expected messages, but got: %+v", apiResponse)
+	}
+}
diff --git a/examples/sms_live_test.go b/examples/sms_live_test.go
index 56c2d38..f3372af 100644
--- a/examples/sms_live_test.go
+++ b/examples/sms_live_test.go
@@ -28,7 +28,7 @@ func TestSendSMS(t *testing.T) {
 		{To: "<DESTINATION>"},
 	}
 
-	content := sms.LogContent{
+	content := sms.MessageContent{
 		TextMessageContent: sms.NewTextMessageContent("Congratulations on sending your first message with GO library."),
 	}
 
diff --git a/moments.md b/moments.md
new file mode 100644
index 0000000..73b4567
--- /dev/null
+++ b/moments.md
@@ -0,0 +1,132 @@
+# Moments quickstart
+
+This quick guide aims to help you start with [Infobip Moments API](https://www.infobip.com/docs/api/customer-engagement/moments). After reading it, you should know how to use Moments.
+
+The first step is to add your configuration, initialize the api client and set your authentication:
+
+````go
+    configuration := infobip.NewConfiguration()
+    configuration.Host = "<YOUR_BASE_URL>"
+    
+    infobipClient := api.NewAPIClient(configuration)
+    
+    auth := context.WithValue(
+		context.Background(),
+		infobip.ContextAPIKeys,
+		map[string]infobip.APIKey{
+			"APIKeyHeader": {Key: "<YOUR_API_KEY>", Prefix: "<YOUR_API_PREFIX>"},
+		},
+	)
+````
+
+For details, check the [client](https://github.com/infobip/infobip-api-go-client/blob/master/v3/pkg/infobip/client.go) source code.
+
+
+## Flow API
+
+### Add participants to flow
+
+To add participants to a flow, you can use the following code:
+
+````go
+    campaignId := int64(200000000000001)
+    identifier := "test@example.com"
+	participantType := moments.FLOWPERSONUNIQUEFIELDTYPE_EMAIL
+	notifyUrl := "https://example.com"
+
+    participantUniqueField := *moments.NewFlowPersonUniqueField(identifier, participantType)
+    participant := moments.NewFlowParticipant(participantUniqueField)
+
+    request := moments.NewFlowAddFlowParticipantsRequest([]moments.FlowParticipant{*participant})
+    request.SetNotifyUrl(notifyUrl)
+
+    response, _, err := infobipClient.
+        FlowAPI.
+        AddFlowParticipants(auth, campaignId).
+        FlowAddFlowParticipantsRequest(*request).
+        Execute()
+````
+
+### Get a report on participants added to flow
+
+To fetch a report to confirm that all persons have been successfully added to the flow, you can use the following code:
+
+````go
+    givenOperationId := "03f2d474-0508-46bf-9f3d-d8e2c28adaea"
+
+    response, _, err := infobipClient.
+        FlowAPI.
+        GetFlowParticipantsAddedReport(auth, campaignId).
+        OperationId(givenOperationId).
+        Execute()
+````
+
+### Remove person from flow
+
+To remove a person from a flow, you can use the following code:
+
+````go
+    externalId := "8edb24b5-0319-48cd-a1d9-1e8bc5d577ab"
+    _, err := infobipClient.
+        FlowAPI.
+        RemovePeopleFromFlow(auth, campaignId).
+        ExternalId(externalId).
+        Execute()
+````
+
+
+## Forms API
+
+### Get forms
+
+To get all forms, you can use the following code:
+
+````go
+    response, _, err := infobipClient.
+        FormsAPI.
+        GetForms(auth).
+        Execute()
+````
+
+### Get form by ID
+
+To get a specific form by ID, you can use the following code:
+
+````go
+    formId := "cec5dfd2-4238-48e0-933b-9acbdb2e6f5f"
+
+    response, _, err := infobipClient.
+        FormsAPI.
+        GetForm(auth, formId).
+        Execute()
+````
+
+### Increment form view count
+
+To increase the view counter of a specific form, you can use the following code:
+
+````go
+    response, _, err := infobipClient.
+        FormsAPI.
+        IncrementViewCount(auth, formId).
+        Execute()
+````
+
+### Submit form data
+
+To submit data to a specific form, you can use the following code:
+
+````go
+    formDataRequest := map[string]interface{}{
+        "first_name": "John",
+        "last_name": "Doe",
+        "company": "Infobip",
+        "email": "info@example.com",
+    }
+
+    response, _, err := infobipClient.
+        FormsAPI.
+        SubmitFormData(context.Background(), formId).
+        Body(formDataRequest).
+        Execute()
+````
\ No newline at end of file
diff --git a/pkg/infobip/api/call_routing_api.go b/pkg/infobip/api/call_routing_api.go
new file mode 100644
index 0000000..d2f21be
--- /dev/null
+++ b/pkg/infobip/api/call_routing_api.go
@@ -0,0 +1,942 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+)
+
+// CallRoutingAPIService CallRoutingAPI service
+type CallRoutingAPIService service
+
+// ApiCallRoutingAPIRequest[T any] interface
+type CallRoutingAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiCreateCallRouteRequest struct {
+	ctx                     context.Context
+	ApiService              *CallRoutingAPIService
+	callRoutingRouteRequest *CallRoutingRouteRequest
+}
+
+func (r ApiCreateCallRouteRequest) CallRoutingRouteRequest(callRoutingRouteRequest CallRoutingRouteRequest) ApiCreateCallRouteRequest {
+	r.callRoutingRouteRequest = &callRoutingRouteRequest
+	return r
+}
+
+func (r ApiCreateCallRouteRequest) Execute() (*CallRoutingRouteResponse, *http.Response, error) {
+	return r.ApiService.CreateCallRouteExecute(r)
+}
+
+/*
+CreateCallRoute Create a call route
+
+Create a new call route.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateCallRouteRequest
+*/
+func (a *CallRoutingAPIService) CreateCallRoute(ctx context.Context) ApiCreateCallRouteRequest {
+	return ApiCreateCallRouteRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallRoutingRouteResponse
+func (a *CallRoutingAPIService) CreateCallRouteExecute(r ApiCreateCallRouteRequest) (*CallRoutingRouteResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallRoutingRouteResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallRoutingAPIService.CreateCallRoute")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/callrouting/1/routes"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callRoutingRouteRequest == nil {
+		return localVarReturnValue, nil, reportError("callRoutingRouteRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callRoutingRouteRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteCallRouteRequest struct {
+	ctx        context.Context
+	ApiService *CallRoutingAPIService
+	routeId    string
+}
+
+func (r ApiDeleteCallRouteRequest) Execute() (*CallRoutingRouteResponse, *http.Response, error) {
+	return r.ApiService.DeleteCallRouteExecute(r)
+}
+
+/*
+DeleteCallRoute Delete a call route
+
+Delete an existing call route.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param routeId Route identifier
+	@return ApiDeleteCallRouteRequest
+*/
+func (a *CallRoutingAPIService) DeleteCallRoute(ctx context.Context, routeId string) ApiDeleteCallRouteRequest {
+	return ApiDeleteCallRouteRequest{
+		ApiService: a,
+		ctx:        ctx,
+		routeId:    routeId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallRoutingRouteResponse
+func (a *CallRoutingAPIService) DeleteCallRouteExecute(r ApiDeleteCallRouteRequest) (*CallRoutingRouteResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallRoutingRouteResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallRoutingAPIService.DeleteCallRoute")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/callrouting/1/routes/{routeId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"routeId"+"}", url.PathEscape(parameterValueToString(r.routeId, "routeId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallRouteRequest struct {
+	ctx        context.Context
+	ApiService *CallRoutingAPIService
+	routeId    string
+}
+
+func (r ApiGetCallRouteRequest) Execute() (*CallRoutingRouteResponse, *http.Response, error) {
+	return r.ApiService.GetCallRouteExecute(r)
+}
+
+/*
+GetCallRoute Get a call route
+
+Get an existing call route.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param routeId Route identifier
+	@return ApiGetCallRouteRequest
+*/
+func (a *CallRoutingAPIService) GetCallRoute(ctx context.Context, routeId string) ApiGetCallRouteRequest {
+	return ApiGetCallRouteRequest{
+		ApiService: a,
+		ctx:        ctx,
+		routeId:    routeId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallRoutingRouteResponse
+func (a *CallRoutingAPIService) GetCallRouteExecute(r ApiGetCallRouteRequest) (*CallRoutingRouteResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallRoutingRouteResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallRoutingAPIService.GetCallRoute")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/callrouting/1/routes/{routeId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"routeId"+"}", url.PathEscape(parameterValueToString(r.routeId, "routeId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallRoutesRequest struct {
+	ctx        context.Context
+	ApiService *CallRoutingAPIService
+	page       *int32
+	size       *int32
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetCallRoutesRequest) Page(page int32) ApiGetCallRoutesRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetCallRoutesRequest) Size(size int32) ApiGetCallRoutesRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetCallRoutesRequest) Execute() (*CallRoutingRouteResponsePage, *http.Response, error) {
+	return r.ApiService.GetCallRoutesExecute(r)
+}
+
+/*
+GetCallRoutes Get call routes
+
+Get existing call routes with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCallRoutesRequest
+*/
+func (a *CallRoutingAPIService) GetCallRoutes(ctx context.Context) ApiGetCallRoutesRequest {
+	return ApiGetCallRoutesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallRoutingRouteResponsePage
+func (a *CallRoutingAPIService) GetCallRoutesExecute(r ApiGetCallRoutesRequest) (*CallRoutingRouteResponsePage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallRoutingRouteResponsePage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallRoutingAPIService.GetCallRoutes")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/callrouting/1/routes"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateCallRouteRequest struct {
+	ctx                     context.Context
+	ApiService              *CallRoutingAPIService
+	routeId                 string
+	callRoutingRouteRequest *CallRoutingRouteRequest
+}
+
+func (r ApiUpdateCallRouteRequest) CallRoutingRouteRequest(callRoutingRouteRequest CallRoutingRouteRequest) ApiUpdateCallRouteRequest {
+	r.callRoutingRouteRequest = &callRoutingRouteRequest
+	return r
+}
+
+func (r ApiUpdateCallRouteRequest) Execute() (*CallRoutingRouteResponse, *http.Response, error) {
+	return r.ApiService.UpdateCallRouteExecute(r)
+}
+
+/*
+UpdateCallRoute Update a call route
+
+Update an already existing call route. Fields that are not sent in the request body will take default values and overwrite existing ones.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param routeId Route identifier
+	@return ApiUpdateCallRouteRequest
+*/
+func (a *CallRoutingAPIService) UpdateCallRoute(ctx context.Context, routeId string) ApiUpdateCallRouteRequest {
+	return ApiUpdateCallRouteRequest{
+		ApiService: a,
+		ctx:        ctx,
+		routeId:    routeId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallRoutingRouteResponse
+func (a *CallRoutingAPIService) UpdateCallRouteExecute(r ApiUpdateCallRouteRequest) (*CallRoutingRouteResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallRoutingRouteResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallRoutingAPIService.UpdateCallRoute")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/callrouting/1/routes/{routeId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"routeId"+"}", url.PathEscape(parameterValueToString(r.routeId, "routeId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callRoutingRouteRequest == nil {
+		return localVarReturnValue, nil, reportError("callRoutingRouteRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callRoutingRouteRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/calls_api.go b/pkg/infobip/api/calls_api.go
new file mode 100644
index 0000000..f6e4629
--- /dev/null
+++ b/pkg/infobip/api/calls_api.go
@@ -0,0 +1,20206 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"os"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+)
+
+// CallsAPIService CallsAPI service
+type CallsAPIService service
+
+// ApiCallsAPIRequest[T any] interface
+type CallsAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiAddExistingConferenceCallRequest struct {
+	ctx                    context.Context
+	ApiService             *CallsAPIService
+	conferenceId           string
+	callId                 string
+	addExistingCallRequest *AddExistingCallRequest
+}
+
+func (r ApiAddExistingConferenceCallRequest) AddExistingCallRequest(addExistingCallRequest AddExistingCallRequest) ApiAddExistingConferenceCallRequest {
+	r.addExistingCallRequest = &addExistingCallRequest
+	return r
+}
+
+func (r ApiAddExistingConferenceCallRequest) Execute() (*Conference, *http.Response, error) {
+	return r.ApiService.AddExistingConferenceCallExecute(r)
+}
+
+/*
+AddExistingConferenceCall Add existing call
+
+Add an existing call to a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@param callId Call ID.
+	@return ApiAddExistingConferenceCallRequest
+*/
+func (a *CallsAPIService) AddExistingConferenceCall(ctx context.Context, conferenceId string, callId string) ApiAddExistingConferenceCallRequest {
+	return ApiAddExistingConferenceCallRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+		callId:       callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Conference
+func (a *CallsAPIService) AddExistingConferenceCallExecute(r ApiAddExistingConferenceCallRequest) (*Conference, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Conference
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.AddExistingConferenceCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/call/{callId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.addExistingCallRequest == nil {
+		return localVarReturnValue, nil, reportError("addExistingCallRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.addExistingCallRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiAddNewConferenceCallRequest struct {
+	ctx               context.Context
+	ApiService        *CallsAPIService
+	conferenceId      string
+	addNewCallRequest *AddNewCallRequest
+}
+
+func (r ApiAddNewConferenceCallRequest) AddNewCallRequest(addNewCallRequest AddNewCallRequest) ApiAddNewConferenceCallRequest {
+	r.addNewCallRequest = &addNewCallRequest
+	return r
+}
+
+func (r ApiAddNewConferenceCallRequest) Execute() (*ConferenceAndCall, *http.Response, error) {
+	return r.ApiService.AddNewConferenceCallExecute(r)
+}
+
+/*
+AddNewConferenceCall Add new call
+
+Create a new outbound call and add it to a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiAddNewConferenceCallRequest
+*/
+func (a *CallsAPIService) AddNewConferenceCall(ctx context.Context, conferenceId string) ApiAddNewConferenceCallRequest {
+	return ApiAddNewConferenceCallRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceAndCall
+func (a *CallsAPIService) AddNewConferenceCallExecute(r ApiAddNewConferenceCallRequest) (*ConferenceAndCall, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceAndCall
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.AddNewConferenceCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/call"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.addNewCallRequest == nil {
+		return localVarReturnValue, nil, reportError("addNewCallRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.addNewCallRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiAnswerCallRequest struct {
+	ctx           context.Context
+	ApiService    *CallsAPIService
+	callId        string
+	answerRequest *AnswerRequest
+}
+
+func (r ApiAnswerCallRequest) AnswerRequest(answerRequest AnswerRequest) ApiAnswerCallRequest {
+	r.answerRequest = &answerRequest
+	return r
+}
+
+func (r ApiAnswerCallRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.AnswerCallExecute(r)
+}
+
+/*
+AnswerCall Answer
+
+Answer a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiAnswerCallRequest
+*/
+func (a *CallsAPIService) AnswerCall(ctx context.Context, callId string) ApiAnswerCallRequest {
+	return ApiAnswerCallRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) AnswerCallExecute(r ApiAnswerCallRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.AnswerCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/answer"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.answerRequest == nil {
+		return localVarReturnValue, nil, reportError("answerRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.answerRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiApplicationTransferRequest struct {
+	ctx                        context.Context
+	ApiService                 *CallsAPIService
+	callId                     string
+	applicationTransferRequest *ApplicationTransferRequest
+}
+
+func (r ApiApplicationTransferRequest) ApplicationTransferRequest(applicationTransferRequest ApplicationTransferRequest) ApiApplicationTransferRequest {
+	r.applicationTransferRequest = &applicationTransferRequest
+	return r
+}
+
+func (r ApiApplicationTransferRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ApplicationTransferExecute(r)
+}
+
+/*
+ApplicationTransfer Request application transfer
+
+Request application transfer.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiApplicationTransferRequest
+*/
+func (a *CallsAPIService) ApplicationTransfer(ctx context.Context, callId string) ApiApplicationTransferRequest {
+	return ApiApplicationTransferRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ApplicationTransferExecute(r ApiApplicationTransferRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ApplicationTransfer")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/application-transfer"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.applicationTransferRequest == nil {
+		return localVarReturnValue, nil, reportError("applicationTransferRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.applicationTransferRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiApplicationTransferAcceptRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+	transferId string
+}
+
+func (r ApiApplicationTransferAcceptRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ApplicationTransferAcceptExecute(r)
+}
+
+/*
+ApplicationTransferAccept Accept application transfer
+
+Accept application transfer.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@param transferId The unique identifier of a transfer, sent to the receiving application in an `ApplicationTransferRequestedEvent`.
+	@return ApiApplicationTransferAcceptRequest
+*/
+func (a *CallsAPIService) ApplicationTransferAccept(ctx context.Context, callId string, transferId string) ApiApplicationTransferAcceptRequest {
+	return ApiApplicationTransferAcceptRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+		transferId: transferId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ApplicationTransferAcceptExecute(r ApiApplicationTransferAcceptRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ApplicationTransferAccept")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/application-transfer/{transferId}/accept"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"transferId"+"}", url.PathEscape(parameterValueToString(r.transferId, "transferId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiApplicationTransferRejectRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+	transferId string
+}
+
+func (r ApiApplicationTransferRejectRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ApplicationTransferRejectExecute(r)
+}
+
+/*
+ApplicationTransferReject Reject application transfer
+
+Reject application transfer.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@param transferId The unique identifier of a transfer, sent to the receiving application in an `ApplicationTransferRequestedEvent`.
+	@return ApiApplicationTransferRejectRequest
+*/
+func (a *CallsAPIService) ApplicationTransferReject(ctx context.Context, callId string, transferId string) ApiApplicationTransferRejectRequest {
+	return ApiApplicationTransferRejectRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+		transferId: transferId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ApplicationTransferRejectExecute(r ApiApplicationTransferRejectRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ApplicationTransferReject")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/application-transfer/{transferId}/reject"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"transferId"+"}", url.PathEscape(parameterValueToString(r.transferId, "transferId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallCaptureDtmfRequest struct {
+	ctx                context.Context
+	ApiService         *CallsAPIService
+	callId             string
+	dtmfCaptureRequest *DtmfCaptureRequest
+}
+
+func (r ApiCallCaptureDtmfRequest) DtmfCaptureRequest(dtmfCaptureRequest DtmfCaptureRequest) ApiCallCaptureDtmfRequest {
+	r.dtmfCaptureRequest = &dtmfCaptureRequest
+	return r
+}
+
+func (r ApiCallCaptureDtmfRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallCaptureDtmfExecute(r)
+}
+
+/*
+CallCaptureDtmf Capture DTMF
+
+Capture a DTMF on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallCaptureDtmfRequest
+*/
+func (a *CallsAPIService) CallCaptureDtmf(ctx context.Context, callId string) ApiCallCaptureDtmfRequest {
+	return ApiCallCaptureDtmfRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallCaptureDtmfExecute(r ApiCallCaptureDtmfRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallCaptureDtmf")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/capture/dtmf"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dtmfCaptureRequest == nil {
+		return localVarReturnValue, nil, reportError("dtmfCaptureRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dtmfCaptureRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallCaptureSpeechRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	callId               string
+	speechCaptureRequest *SpeechCaptureRequest
+}
+
+func (r ApiCallCaptureSpeechRequest) SpeechCaptureRequest(speechCaptureRequest SpeechCaptureRequest) ApiCallCaptureSpeechRequest {
+	r.speechCaptureRequest = &speechCaptureRequest
+	return r
+}
+
+func (r ApiCallCaptureSpeechRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallCaptureSpeechExecute(r)
+}
+
+/*
+CallCaptureSpeech Capture Speech
+
+Capture speech on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallCaptureSpeechRequest
+*/
+func (a *CallsAPIService) CallCaptureSpeech(ctx context.Context, callId string) ApiCallCaptureSpeechRequest {
+	return ApiCallCaptureSpeechRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallCaptureSpeechExecute(r ApiCallCaptureSpeechRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallCaptureSpeech")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/capture/speech"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.speechCaptureRequest == nil {
+		return localVarReturnValue, nil, reportError("speechCaptureRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.speechCaptureRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallPlayFileRequest struct {
+	ctx         context.Context
+	ApiService  *CallsAPIService
+	callId      string
+	playRequest *PlayRequest
+}
+
+func (r ApiCallPlayFileRequest) PlayRequest(playRequest PlayRequest) ApiCallPlayFileRequest {
+	r.playRequest = &playRequest
+	return r
+}
+
+func (r ApiCallPlayFileRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallPlayFileExecute(r)
+}
+
+/*
+CallPlayFile Play file
+
+Play an audio file on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallPlayFileRequest
+*/
+func (a *CallsAPIService) CallPlayFile(ctx context.Context, callId string) ApiCallPlayFileRequest {
+	return ApiCallPlayFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallPlayFileExecute(r ApiCallPlayFileRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallPlayFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/play"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.playRequest == nil {
+		return localVarReturnValue, nil, reportError("playRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.playRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallSayTextRequest struct {
+	ctx            context.Context
+	ApiService     *CallsAPIService
+	callId         string
+	callSayRequest *CallSayRequest
+}
+
+func (r ApiCallSayTextRequest) CallSayRequest(callSayRequest CallSayRequest) ApiCallSayTextRequest {
+	r.callSayRequest = &callSayRequest
+	return r
+}
+
+func (r ApiCallSayTextRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallSayTextExecute(r)
+}
+
+/*
+CallSayText Say text
+
+Say text on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallSayTextRequest
+*/
+func (a *CallsAPIService) CallSayText(ctx context.Context, callId string) ApiCallSayTextRequest {
+	return ApiCallSayTextRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallSayTextExecute(r ApiCallSayTextRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallSayText")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/say"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callSayRequest == nil {
+		return localVarReturnValue, nil, reportError("callSayRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callSayRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallSendDtmfRequest struct {
+	ctx             context.Context
+	ApiService      *CallsAPIService
+	callId          string
+	dtmfSendRequest *DtmfSendRequest
+}
+
+func (r ApiCallSendDtmfRequest) DtmfSendRequest(dtmfSendRequest DtmfSendRequest) ApiCallSendDtmfRequest {
+	r.dtmfSendRequest = &dtmfSendRequest
+	return r
+}
+
+func (r ApiCallSendDtmfRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallSendDtmfExecute(r)
+}
+
+/*
+CallSendDtmf Send DTMF
+
+Send a DTMF on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallSendDtmfRequest
+*/
+func (a *CallsAPIService) CallSendDtmf(ctx context.Context, callId string) ApiCallSendDtmfRequest {
+	return ApiCallSendDtmfRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallSendDtmfExecute(r ApiCallSendDtmfRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallSendDtmf")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/send-dtmf"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dtmfSendRequest == nil {
+		return localVarReturnValue, nil, reportError("dtmfSendRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dtmfSendRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallStartRecordingRequest struct {
+	ctx                   context.Context
+	ApiService            *CallsAPIService
+	callId                string
+	recordingStartRequest *RecordingStartRequest
+}
+
+func (r ApiCallStartRecordingRequest) RecordingStartRequest(recordingStartRequest RecordingStartRequest) ApiCallStartRecordingRequest {
+	r.recordingStartRequest = &recordingStartRequest
+	return r
+}
+
+func (r ApiCallStartRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallStartRecordingExecute(r)
+}
+
+/*
+CallStartRecording Start recording
+
+Start a recording on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallStartRecordingRequest
+*/
+func (a *CallsAPIService) CallStartRecording(ctx context.Context, callId string) ApiCallStartRecordingRequest {
+	return ApiCallStartRecordingRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallStartRecordingExecute(r ApiCallStartRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallStartRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/start-recording"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.recordingStartRequest == nil {
+		return localVarReturnValue, nil, reportError("recordingStartRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.recordingStartRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallStartTranscriptionRequest struct {
+	ctx                       context.Context
+	ApiService                *CallsAPIService
+	callId                    string
+	startTranscriptionRequest *StartTranscriptionRequest
+}
+
+func (r ApiCallStartTranscriptionRequest) StartTranscriptionRequest(startTranscriptionRequest StartTranscriptionRequest) ApiCallStartTranscriptionRequest {
+	r.startTranscriptionRequest = &startTranscriptionRequest
+	return r
+}
+
+func (r ApiCallStartTranscriptionRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallStartTranscriptionExecute(r)
+}
+
+/*
+CallStartTranscription Start transcription
+
+Start call transcription.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallStartTranscriptionRequest
+*/
+func (a *CallsAPIService) CallStartTranscription(ctx context.Context, callId string) ApiCallStartTranscriptionRequest {
+	return ApiCallStartTranscriptionRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallStartTranscriptionExecute(r ApiCallStartTranscriptionRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallStartTranscription")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/start-transcription"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.startTranscriptionRequest == nil {
+		return localVarReturnValue, nil, reportError("startTranscriptionRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.startTranscriptionRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallStopPlayingFileRequest struct {
+	ctx             context.Context
+	ApiService      *CallsAPIService
+	callId          string
+	stopPlayRequest *StopPlayRequest
+}
+
+func (r ApiCallStopPlayingFileRequest) StopPlayRequest(stopPlayRequest StopPlayRequest) ApiCallStopPlayingFileRequest {
+	r.stopPlayRequest = &stopPlayRequest
+	return r
+}
+
+func (r ApiCallStopPlayingFileRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallStopPlayingFileExecute(r)
+}
+
+/*
+CallStopPlayingFile Stop playing file
+
+Stop playing an audio file on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallStopPlayingFileRequest
+*/
+func (a *CallsAPIService) CallStopPlayingFile(ctx context.Context, callId string) ApiCallStopPlayingFileRequest {
+	return ApiCallStopPlayingFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallStopPlayingFileExecute(r ApiCallStopPlayingFileRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallStopPlayingFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/stop-play"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.stopPlayRequest == nil {
+		return localVarReturnValue, nil, reportError("stopPlayRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.stopPlayRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallStopRecordingRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+}
+
+func (r ApiCallStopRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallStopRecordingExecute(r)
+}
+
+/*
+CallStopRecording Stop recording
+
+Stop a recording on a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallStopRecordingRequest
+*/
+func (a *CallsAPIService) CallStopRecording(ctx context.Context, callId string) ApiCallStopRecordingRequest {
+	return ApiCallStopRecordingRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallStopRecordingExecute(r ApiCallStopRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallStopRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/stop-recording"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCallStopTranscriptionRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+}
+
+func (r ApiCallStopTranscriptionRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.CallStopTranscriptionExecute(r)
+}
+
+/*
+CallStopTranscription Stop transcription
+
+Stop call transcription.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiCallStopTranscriptionRequest
+*/
+func (a *CallsAPIService) CallStopTranscription(ctx context.Context, callId string) ApiCallStopTranscriptionRequest {
+	return ApiCallStopTranscriptionRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) CallStopTranscriptionExecute(r ApiCallStopTranscriptionRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CallStopTranscription")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/stop-transcription"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCancelBulkRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	bulkId     string
+}
+
+func (r ApiCancelBulkRequest) Execute() (*BulkStatus, *http.Response, error) {
+	return r.ApiService.CancelBulkExecute(r)
+}
+
+/*
+CancelBulk Cancel
+
+Cancel a bulk. Bulk can be cancelled if it was created with scheduling options and has not finished yet.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param bulkId Bulk ID.
+	@return ApiCancelBulkRequest
+*/
+func (a *CallsAPIService) CancelBulk(ctx context.Context, bulkId string) ApiCancelBulkRequest {
+	return ApiCancelBulkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		bulkId:     bulkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatus
+func (a *CallsAPIService) CancelBulkExecute(r ApiCancelBulkRequest) (*BulkStatus, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatus
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CancelBulk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/bulks/{bulkId}/cancel"
+	localVarPath = strings.Replace(localVarPath, "{"+"bulkId"+"}", url.PathEscape(parameterValueToString(r.bulkId, "bulkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiComposeConferenceRecordingRequest struct {
+	ctx                 context.Context
+	ApiService          *CallsAPIService
+	conferenceId        string
+	onDemandComposition *OnDemandComposition
+	location            *RecordingLocation
+}
+
+func (r ApiComposeConferenceRecordingRequest) OnDemandComposition(onDemandComposition OnDemandComposition) ApiComposeConferenceRecordingRequest {
+	r.onDemandComposition = &onDemandComposition
+	return r
+}
+
+// Recording location.
+func (r ApiComposeConferenceRecordingRequest) Location(location RecordingLocation) ApiComposeConferenceRecordingRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiComposeConferenceRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ComposeConferenceRecordingExecute(r)
+}
+
+/*
+ComposeConferenceRecording Compose conference recording on calls
+
+Compose conference recording on calls. All calls will be merged into a single audio or video file.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiComposeConferenceRecordingRequest
+*/
+func (a *CallsAPIService) ComposeConferenceRecording(ctx context.Context, conferenceId string) ApiComposeConferenceRecordingRequest {
+	return ApiComposeConferenceRecordingRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ComposeConferenceRecordingExecute(r ApiComposeConferenceRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ComposeConferenceRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/conferences/{conferenceId}/compose"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.onDemandComposition == nil {
+		return localVarReturnValue, nil, reportError("onDemandComposition is required and must be specified")
+	}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.onDemandComposition
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiComposeDialogRecordingRequest struct {
+	ctx                 context.Context
+	ApiService          *CallsAPIService
+	dialogId            string
+	onDemandComposition *OnDemandComposition
+	location            *RecordingLocation
+}
+
+func (r ApiComposeDialogRecordingRequest) OnDemandComposition(onDemandComposition OnDemandComposition) ApiComposeDialogRecordingRequest {
+	r.onDemandComposition = &onDemandComposition
+	return r
+}
+
+// Recording location.
+func (r ApiComposeDialogRecordingRequest) Location(location RecordingLocation) ApiComposeDialogRecordingRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiComposeDialogRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ComposeDialogRecordingExecute(r)
+}
+
+/*
+ComposeDialogRecording Compose dialog recording on calls
+
+Compose dialog recording on calls. Both calls will be merged into a single audio or video file.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiComposeDialogRecordingRequest
+*/
+func (a *CallsAPIService) ComposeDialogRecording(ctx context.Context, dialogId string) ApiComposeDialogRecordingRequest {
+	return ApiComposeDialogRecordingRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ComposeDialogRecordingExecute(r ApiComposeDialogRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ComposeDialogRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/dialogs/{dialogId}/compose"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.onDemandComposition == nil {
+		return localVarReturnValue, nil, reportError("onDemandComposition is required and must be specified")
+	}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.onDemandComposition
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConferenceBroadcastWebrtcTextRequest struct {
+	ctx                                  context.Context
+	ApiService                           *CallsAPIService
+	conferenceId                         string
+	conferenceBroadcastWebrtcTextRequest *ConferenceBroadcastWebrtcTextRequest
+}
+
+func (r ApiConferenceBroadcastWebrtcTextRequest) ConferenceBroadcastWebrtcTextRequest(conferenceBroadcastWebrtcTextRequest ConferenceBroadcastWebrtcTextRequest) ApiConferenceBroadcastWebrtcTextRequest {
+	r.conferenceBroadcastWebrtcTextRequest = &conferenceBroadcastWebrtcTextRequest
+	return r
+}
+
+func (r ApiConferenceBroadcastWebrtcTextRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ConferenceBroadcastWebrtcTextExecute(r)
+}
+
+/*
+ConferenceBroadcastWebrtcText Broadcast text
+
+Broadcasts a text message to conference WebRTC participants with open data channel.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiConferenceBroadcastWebrtcTextRequest
+*/
+func (a *CallsAPIService) ConferenceBroadcastWebrtcText(ctx context.Context, conferenceId string) ApiConferenceBroadcastWebrtcTextRequest {
+	return ApiConferenceBroadcastWebrtcTextRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ConferenceBroadcastWebrtcTextExecute(r ApiConferenceBroadcastWebrtcTextRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConferenceBroadcastWebrtcText")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/broadcast-webrtc-text"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.conferenceBroadcastWebrtcTextRequest == nil {
+		return localVarReturnValue, nil, reportError("conferenceBroadcastWebrtcTextRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.conferenceBroadcastWebrtcTextRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConferencePlayFileRequest struct {
+	ctx                   context.Context
+	ApiService            *CallsAPIService
+	conferenceId          string
+	conferencePlayRequest *ConferencePlayRequest
+}
+
+func (r ApiConferencePlayFileRequest) ConferencePlayRequest(conferencePlayRequest ConferencePlayRequest) ApiConferencePlayFileRequest {
+	r.conferencePlayRequest = &conferencePlayRequest
+	return r
+}
+
+func (r ApiConferencePlayFileRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ConferencePlayFileExecute(r)
+}
+
+/*
+ConferencePlayFile Play file
+
+Play an audio file on a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiConferencePlayFileRequest
+*/
+func (a *CallsAPIService) ConferencePlayFile(ctx context.Context, conferenceId string) ApiConferencePlayFileRequest {
+	return ApiConferencePlayFileRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ConferencePlayFileExecute(r ApiConferencePlayFileRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConferencePlayFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/play"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.conferencePlayRequest == nil {
+		return localVarReturnValue, nil, reportError("conferencePlayRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.conferencePlayRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConferenceSayTextRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+	sayRequest   *SayRequest
+}
+
+func (r ApiConferenceSayTextRequest) SayRequest(sayRequest SayRequest) ApiConferenceSayTextRequest {
+	r.sayRequest = &sayRequest
+	return r
+}
+
+func (r ApiConferenceSayTextRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ConferenceSayTextExecute(r)
+}
+
+/*
+ConferenceSayText Say text
+
+Say text on a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiConferenceSayTextRequest
+*/
+func (a *CallsAPIService) ConferenceSayText(ctx context.Context, conferenceId string) ApiConferenceSayTextRequest {
+	return ApiConferenceSayTextRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ConferenceSayTextExecute(r ApiConferenceSayTextRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConferenceSayText")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/say"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.sayRequest == nil {
+		return localVarReturnValue, nil, reportError("sayRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.sayRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConferenceStartRecordingRequest struct {
+	ctx                        context.Context
+	ApiService                 *CallsAPIService
+	conferenceId               string
+	conferenceRecordingRequest *ConferenceRecordingRequest
+}
+
+func (r ApiConferenceStartRecordingRequest) ConferenceRecordingRequest(conferenceRecordingRequest ConferenceRecordingRequest) ApiConferenceStartRecordingRequest {
+	r.conferenceRecordingRequest = &conferenceRecordingRequest
+	return r
+}
+
+func (r ApiConferenceStartRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ConferenceStartRecordingExecute(r)
+}
+
+/*
+ConferenceStartRecording Start recording
+
+Start recording a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiConferenceStartRecordingRequest
+*/
+func (a *CallsAPIService) ConferenceStartRecording(ctx context.Context, conferenceId string) ApiConferenceStartRecordingRequest {
+	return ApiConferenceStartRecordingRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ConferenceStartRecordingExecute(r ApiConferenceStartRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConferenceStartRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/start-recording"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.conferenceRecordingRequest == nil {
+		return localVarReturnValue, nil, reportError("conferenceRecordingRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.conferenceRecordingRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConferenceStopPlayingFileRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+}
+
+func (r ApiConferenceStopPlayingFileRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ConferenceStopPlayingFileExecute(r)
+}
+
+/*
+ConferenceStopPlayingFile Stop playing file
+
+Stop playing an audio file on a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiConferenceStopPlayingFileRequest
+*/
+func (a *CallsAPIService) ConferenceStopPlayingFile(ctx context.Context, conferenceId string) ApiConferenceStopPlayingFileRequest {
+	return ApiConferenceStopPlayingFileRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ConferenceStopPlayingFileExecute(r ApiConferenceStopPlayingFileRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConferenceStopPlayingFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/stop-play"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConferenceStopRecordingRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+}
+
+func (r ApiConferenceStopRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.ConferenceStopRecordingExecute(r)
+}
+
+/*
+ConferenceStopRecording Stop recording
+
+Stop recording a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiConferenceStopRecordingRequest
+*/
+func (a *CallsAPIService) ConferenceStopRecording(ctx context.Context, conferenceId string) ApiConferenceStopRecordingRequest {
+	return ApiConferenceStopRecordingRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) ConferenceStopRecordingExecute(r ApiConferenceStopRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConferenceStopRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/stop-recording"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConnectCallsRequest struct {
+	ctx            context.Context
+	ApiService     *CallsAPIService
+	connectRequest *ConnectRequest
+}
+
+func (r ApiConnectCallsRequest) ConnectRequest(connectRequest ConnectRequest) ApiConnectCallsRequest {
+	r.connectRequest = &connectRequest
+	return r
+}
+
+func (r ApiConnectCallsRequest) Execute() (*Conference, *http.Response, error) {
+	return r.ApiService.ConnectCallsExecute(r)
+}
+
+/*
+ConnectCalls Connect calls
+
+Connect calls in a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiConnectCallsRequest
+*/
+func (a *CallsAPIService) ConnectCalls(ctx context.Context) ApiConnectCallsRequest {
+	return ApiConnectCallsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Conference
+func (a *CallsAPIService) ConnectCallsExecute(r ApiConnectCallsRequest) (*Conference, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Conference
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConnectCalls")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/connect"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.connectRequest == nil {
+		return localVarReturnValue, nil, reportError("connectRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.connectRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiConnectWithNewCallRequest struct {
+	ctx                       context.Context
+	ApiService                *CallsAPIService
+	callId                    string
+	connectWithNewCallRequest *ConnectWithNewCallRequest
+}
+
+func (r ApiConnectWithNewCallRequest) ConnectWithNewCallRequest(connectWithNewCallRequest ConnectWithNewCallRequest) ApiConnectWithNewCallRequest {
+	r.connectWithNewCallRequest = &connectWithNewCallRequest
+	return r
+}
+
+func (r ApiConnectWithNewCallRequest) Execute() (*ConferenceAndCall, *http.Response, error) {
+	return r.ApiService.ConnectWithNewCallExecute(r)
+}
+
+/*
+ConnectWithNewCall Connect with new call
+
+Connect an existing call with a new call in a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiConnectWithNewCallRequest
+*/
+func (a *CallsAPIService) ConnectWithNewCall(ctx context.Context, callId string) ApiConnectWithNewCallRequest {
+	return ApiConnectWithNewCallRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceAndCall
+func (a *CallsAPIService) ConnectWithNewCallExecute(r ApiConnectWithNewCallRequest) (*ConferenceAndCall, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceAndCall
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ConnectWithNewCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/connect"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.connectWithNewCallRequest == nil {
+		return localVarReturnValue, nil, reportError("connectWithNewCallRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.connectWithNewCallRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateBulkRequest struct {
+	ctx             context.Context
+	ApiService      *CallsAPIService
+	callBulkRequest *CallBulkRequest
+}
+
+func (r ApiCreateBulkRequest) CallBulkRequest(callBulkRequest CallBulkRequest) ApiCreateBulkRequest {
+	r.callBulkRequest = &callBulkRequest
+	return r
+}
+
+func (r ApiCreateBulkRequest) Execute() (*CallBulkResponse, *http.Response, error) {
+	return r.ApiService.CreateBulkExecute(r)
+}
+
+/*
+CreateBulk Create bulk of calls
+
+Create a bulk of outbound calls. Currently, only `PHONE` endpoints are supported.
+When retry options are specified, bulk calls are retried if they meet internal or client retry criteria.
+Client retry criteria are met when call reaches the end device and fails. Internal retry criteria are met when call fails before reaching the end device.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateBulkRequest
+*/
+func (a *CallsAPIService) CreateBulk(ctx context.Context) ApiCreateBulkRequest {
+	return ApiCreateBulkRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallBulkResponse
+func (a *CallsAPIService) CreateBulkExecute(r ApiCreateBulkRequest) (*CallBulkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallBulkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateBulk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/bulks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callBulkRequest == nil {
+		return localVarReturnValue, nil, reportError("callBulkRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callBulkRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateCallRequest struct {
+	ctx         context.Context
+	ApiService  *CallsAPIService
+	callRequest *CallRequest
+}
+
+func (r ApiCreateCallRequest) CallRequest(callRequest CallRequest) ApiCreateCallRequest {
+	r.callRequest = &callRequest
+	return r
+}
+
+func (r ApiCreateCallRequest) Execute() (*Call, *http.Response, error) {
+	return r.ApiService.CreateCallExecute(r)
+}
+
+/*
+CreateCall Create call
+
+Create an outbound call to a given endpoint.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateCallRequest
+*/
+func (a *CallsAPIService) CreateCall(ctx context.Context) ApiCreateCallRequest {
+	return ApiCreateCallRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Call
+func (a *CallsAPIService) CreateCallExecute(r ApiCreateCallRequest) (*Call, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Call
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callRequest == nil {
+		return localVarReturnValue, nil, reportError("callRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateCallsConfigurationRequest struct {
+	ctx                             context.Context
+	ApiService                      *CallsAPIService
+	callsConfigurationCreateRequest *CallsConfigurationCreateRequest
+}
+
+func (r ApiCreateCallsConfigurationRequest) CallsConfigurationCreateRequest(callsConfigurationCreateRequest CallsConfigurationCreateRequest) ApiCreateCallsConfigurationRequest {
+	r.callsConfigurationCreateRequest = &callsConfigurationCreateRequest
+	return r
+}
+
+func (r ApiCreateCallsConfigurationRequest) Execute() (*CallsConfigurationResponse, *http.Response, error) {
+	return r.ApiService.CreateCallsConfigurationExecute(r)
+}
+
+/*
+CreateCallsConfiguration Create calls configuration
+
+Create calls configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateCallsConfigurationRequest
+*/
+func (a *CallsAPIService) CreateCallsConfiguration(ctx context.Context) ApiCreateCallsConfigurationRequest {
+	return ApiCreateCallsConfigurationRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallsConfigurationResponse
+func (a *CallsAPIService) CreateCallsConfigurationExecute(r ApiCreateCallsConfigurationRequest) (*CallsConfigurationResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallsConfigurationResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateCallsConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/configurations"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callsConfigurationCreateRequest == nil {
+		return localVarReturnValue, nil, reportError("callsConfigurationCreateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callsConfigurationCreateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateConferenceRequest struct {
+	ctx               context.Context
+	ApiService        *CallsAPIService
+	conferenceRequest *ConferenceRequest
+}
+
+func (r ApiCreateConferenceRequest) ConferenceRequest(conferenceRequest ConferenceRequest) ApiCreateConferenceRequest {
+	r.conferenceRequest = &conferenceRequest
+	return r
+}
+
+func (r ApiCreateConferenceRequest) Execute() (*Conference, *http.Response, error) {
+	return r.ApiService.CreateConferenceExecute(r)
+}
+
+/*
+CreateConference Create conference
+
+Create a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateConferenceRequest
+*/
+func (a *CallsAPIService) CreateConference(ctx context.Context) ApiCreateConferenceRequest {
+	return ApiCreateConferenceRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Conference
+func (a *CallsAPIService) CreateConferenceExecute(r ApiCreateConferenceRequest) (*Conference, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Conference
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateConference")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.conferenceRequest == nil {
+		return localVarReturnValue, nil, reportError("conferenceRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.conferenceRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateDialogRequest struct {
+	ctx           context.Context
+	ApiService    *CallsAPIService
+	dialogRequest *DialogRequest
+}
+
+func (r ApiCreateDialogRequest) DialogRequest(dialogRequest DialogRequest) ApiCreateDialogRequest {
+	r.dialogRequest = &dialogRequest
+	return r
+}
+
+func (r ApiCreateDialogRequest) Execute() (*DialogResponse, *http.Response, error) {
+	return r.ApiService.CreateDialogExecute(r)
+}
+
+/*
+CreateDialog Create dialog
+
+Create a dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateDialogRequest
+*/
+func (a *CallsAPIService) CreateDialog(ctx context.Context) ApiCreateDialogRequest {
+	return ApiCreateDialogRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogResponse
+func (a *CallsAPIService) CreateDialogExecute(r ApiCreateDialogRequest) (*DialogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateDialog")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dialogRequest == nil {
+		return localVarReturnValue, nil, reportError("dialogRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dialogRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateDialogWithExistingCallsRequest struct {
+	ctx                           context.Context
+	ApiService                    *CallsAPIService
+	parentCallId                  string
+	childCallId                   string
+	dialogWithExistingCallRequest *DialogWithExistingCallRequest
+}
+
+func (r ApiCreateDialogWithExistingCallsRequest) DialogWithExistingCallRequest(dialogWithExistingCallRequest DialogWithExistingCallRequest) ApiCreateDialogWithExistingCallsRequest {
+	r.dialogWithExistingCallRequest = &dialogWithExistingCallRequest
+	return r
+}
+
+func (r ApiCreateDialogWithExistingCallsRequest) Execute() (*DialogResponse, *http.Response, error) {
+	return r.ApiService.CreateDialogWithExistingCallsExecute(r)
+}
+
+/*
+CreateDialogWithExistingCalls Create dialog with existing calls
+
+Create a dialog with existing calls.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param parentCallId Call ID of the parent call to be connected in a dialog.
+	@param childCallId Call ID of the child call to be connected in a dialog. Needs to have been created using [create method](#create-call) with `parentCallId` parameter equal to the parent call ID above.
+	@return ApiCreateDialogWithExistingCallsRequest
+*/
+func (a *CallsAPIService) CreateDialogWithExistingCalls(ctx context.Context, parentCallId string, childCallId string) ApiCreateDialogWithExistingCallsRequest {
+	return ApiCreateDialogWithExistingCallsRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		parentCallId: parentCallId,
+		childCallId:  childCallId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogResponse
+func (a *CallsAPIService) CreateDialogWithExistingCallsExecute(r ApiCreateDialogWithExistingCallsRequest) (*DialogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateDialogWithExistingCalls")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/parent-call/{parentCallId}/child-call/{childCallId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"parentCallId"+"}", url.PathEscape(parameterValueToString(r.parentCallId, "parentCallId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"childCallId"+"}", url.PathEscape(parameterValueToString(r.childCallId, "childCallId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dialogWithExistingCallRequest == nil {
+		return localVarReturnValue, nil, reportError("dialogWithExistingCallRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dialogWithExistingCallRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateMediaStreamConfigRequest struct {
+	ctx                      context.Context
+	ApiService               *CallsAPIService
+	mediaStreamConfigRequest *MediaStreamConfigRequest
+}
+
+func (r ApiCreateMediaStreamConfigRequest) MediaStreamConfigRequest(mediaStreamConfigRequest MediaStreamConfigRequest) ApiCreateMediaStreamConfigRequest {
+	r.mediaStreamConfigRequest = &mediaStreamConfigRequest
+	return r
+}
+
+func (r ApiCreateMediaStreamConfigRequest) Execute() (*MediaStreamConfigResponse, *http.Response, error) {
+	return r.ApiService.CreateMediaStreamConfigExecute(r)
+}
+
+/*
+CreateMediaStreamConfig Create a media-stream configuration
+
+Create a media-stream configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateMediaStreamConfigRequest
+*/
+func (a *CallsAPIService) CreateMediaStreamConfig(ctx context.Context) ApiCreateMediaStreamConfigRequest {
+	return ApiCreateMediaStreamConfigRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return MediaStreamConfigResponse
+func (a *CallsAPIService) CreateMediaStreamConfigExecute(r ApiCreateMediaStreamConfigRequest) (*MediaStreamConfigResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *MediaStreamConfigResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateMediaStreamConfig")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/media-stream-configs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.mediaStreamConfigRequest == nil {
+		return localVarReturnValue, nil, reportError("mediaStreamConfigRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.mediaStreamConfigRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateSipTrunkRequest struct {
+	ctx             context.Context
+	ApiService      *CallsAPIService
+	sipTrunkRequest *SipTrunkRequest
+}
+
+func (r ApiCreateSipTrunkRequest) SipTrunkRequest(sipTrunkRequest SipTrunkRequest) ApiCreateSipTrunkRequest {
+	r.sipTrunkRequest = &sipTrunkRequest
+	return r
+}
+
+func (r ApiCreateSipTrunkRequest) Execute() (*CreateSipTrunkResponse, *http.Response, error) {
+	return r.ApiService.CreateSipTrunkExecute(r)
+}
+
+/*
+CreateSipTrunk Create SIP trunk
+
+Create a SIP trunk. Fields not sent in request body will take default values. This operation is asynchronous. The SIP trunk will be created in the background.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateSipTrunkRequest
+*/
+func (a *CallsAPIService) CreateSipTrunk(ctx context.Context) ApiCreateSipTrunkRequest {
+	return ApiCreateSipTrunkRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CreateSipTrunkResponse
+func (a *CallsAPIService) CreateSipTrunkExecute(r ApiCreateSipTrunkRequest) (*CreateSipTrunkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CreateSipTrunkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateSipTrunk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.sipTrunkRequest == nil {
+		return localVarReturnValue, nil, reportError("sipTrunkRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.sipTrunkRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateSipTrunkServiceAddressRequest struct {
+	ctx                           context.Context
+	ApiService                    *CallsAPIService
+	sipTrunkServiceAddressRequest *SipTrunkServiceAddressRequest
+}
+
+func (r ApiCreateSipTrunkServiceAddressRequest) SipTrunkServiceAddressRequest(sipTrunkServiceAddressRequest SipTrunkServiceAddressRequest) ApiCreateSipTrunkServiceAddressRequest {
+	r.sipTrunkServiceAddressRequest = &sipTrunkServiceAddressRequest
+	return r
+}
+
+func (r ApiCreateSipTrunkServiceAddressRequest) Execute() (*SipTrunkServiceAddress, *http.Response, error) {
+	return r.ApiService.CreateSipTrunkServiceAddressExecute(r)
+}
+
+/*
+CreateSipTrunkServiceAddress Create SIP trunk service address
+
+Create a SIP trunk service address.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateSipTrunkServiceAddressRequest
+*/
+func (a *CallsAPIService) CreateSipTrunkServiceAddress(ctx context.Context) ApiCreateSipTrunkServiceAddressRequest {
+	return ApiCreateSipTrunkServiceAddressRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkServiceAddress
+func (a *CallsAPIService) CreateSipTrunkServiceAddressExecute(r ApiCreateSipTrunkServiceAddressRequest) (*SipTrunkServiceAddress, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkServiceAddress
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.CreateSipTrunkServiceAddress")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.sipTrunkServiceAddressRequest == nil {
+		return localVarReturnValue, nil, reportError("sipTrunkServiceAddressRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.sipTrunkServiceAddressRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteCallRecordingsRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+	location   *RecordingLocation
+}
+
+// Recording location.
+func (r ApiDeleteCallRecordingsRequest) Location(location RecordingLocation) ApiDeleteCallRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiDeleteCallRecordingsRequest) Execute() (*Recording, *http.Response, error) {
+	return r.ApiService.DeleteCallRecordingsExecute(r)
+}
+
+/*
+DeleteCallRecordings Delete call recordings
+
+Delete the recordings for a single call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiDeleteCallRecordingsRequest
+*/
+func (a *CallsAPIService) DeleteCallRecordings(ctx context.Context, callId string) ApiDeleteCallRecordingsRequest {
+	return ApiDeleteCallRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Recording
+func (a *CallsAPIService) DeleteCallRecordingsExecute(r ApiDeleteCallRecordingsRequest) (*Recording, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Recording
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteCallRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/calls/{callId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteCallsConfigurationRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	callsConfigurationId string
+}
+
+func (r ApiDeleteCallsConfigurationRequest) Execute() (*CallsConfigurationResponse, *http.Response, error) {
+	return r.ApiService.DeleteCallsConfigurationExecute(r)
+}
+
+/*
+DeleteCallsConfiguration Delete calls configuration
+
+Delete calls configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callsConfigurationId Calls configuration ID.
+	@return ApiDeleteCallsConfigurationRequest
+*/
+func (a *CallsAPIService) DeleteCallsConfiguration(ctx context.Context, callsConfigurationId string) ApiDeleteCallsConfigurationRequest {
+	return ApiDeleteCallsConfigurationRequest{
+		ApiService:           a,
+		ctx:                  ctx,
+		callsConfigurationId: callsConfigurationId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallsConfigurationResponse
+func (a *CallsAPIService) DeleteCallsConfigurationExecute(r ApiDeleteCallsConfigurationRequest) (*CallsConfigurationResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallsConfigurationResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteCallsConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/configurations/{callsConfigurationId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"callsConfigurationId"+"}", url.PathEscape(parameterValueToString(r.callsConfigurationId, "callsConfigurationId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteCallsFileRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	fileId     string
+}
+
+func (r ApiDeleteCallsFileRequest) Execute() (*File, *http.Response, error) {
+	return r.ApiService.DeleteCallsFileExecute(r)
+}
+
+/*
+DeleteCallsFile Delete file
+
+Delete a file.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param fileId File ID.
+	@return ApiDeleteCallsFileRequest
+*/
+func (a *CallsAPIService) DeleteCallsFile(ctx context.Context, fileId string) ApiDeleteCallsFileRequest {
+	return ApiDeleteCallsFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		fileId:     fileId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return File
+func (a *CallsAPIService) DeleteCallsFileExecute(r ApiDeleteCallsFileRequest) (*File, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *File
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteCallsFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/files/{fileId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"fileId"+"}", url.PathEscape(parameterValueToString(r.fileId, "fileId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteConferenceRecordingsRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+	location     *RecordingLocation
+}
+
+// Recording location.
+func (r ApiDeleteConferenceRecordingsRequest) Location(location RecordingLocation) ApiDeleteConferenceRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiDeleteConferenceRecordingsRequest) Execute() (*ConferenceRecording, *http.Response, error) {
+	return r.ApiService.DeleteConferenceRecordingsExecute(r)
+}
+
+/*
+DeleteConferenceRecordings Delete conference recordings
+
+Delete the recordings for a single conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiDeleteConferenceRecordingsRequest
+*/
+func (a *CallsAPIService) DeleteConferenceRecordings(ctx context.Context, conferenceId string) ApiDeleteConferenceRecordingsRequest {
+	return ApiDeleteConferenceRecordingsRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceRecording
+func (a *CallsAPIService) DeleteConferenceRecordingsExecute(r ApiDeleteConferenceRecordingsRequest) (*ConferenceRecording, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceRecording
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteConferenceRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/conferences/{conferenceId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteDialogRecordingsRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+	location   *RecordingLocation
+}
+
+// Recording location.
+func (r ApiDeleteDialogRecordingsRequest) Location(location RecordingLocation) ApiDeleteDialogRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiDeleteDialogRecordingsRequest) Execute() (*DialogRecordingResponse, *http.Response, error) {
+	return r.ApiService.DeleteDialogRecordingsExecute(r)
+}
+
+/*
+DeleteDialogRecordings Delete dialog recordings
+
+Delete the recordings for a single dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDeleteDialogRecordingsRequest
+*/
+func (a *CallsAPIService) DeleteDialogRecordings(ctx context.Context, dialogId string) ApiDeleteDialogRecordingsRequest {
+	return ApiDeleteDialogRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogRecordingResponse
+func (a *CallsAPIService) DeleteDialogRecordingsExecute(r ApiDeleteDialogRecordingsRequest) (*DialogRecordingResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogRecordingResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteDialogRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/dialogs/{dialogId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteMediaStreamConfigRequest struct {
+	ctx                 context.Context
+	ApiService          *CallsAPIService
+	mediaStreamConfigId string
+}
+
+func (r ApiDeleteMediaStreamConfigRequest) Execute() (*MediaStreamConfigResponse, *http.Response, error) {
+	return r.ApiService.DeleteMediaStreamConfigExecute(r)
+}
+
+/*
+DeleteMediaStreamConfig Delete a media-stream configuration
+
+Delete a media-stream configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param mediaStreamConfigId Media-stream configuration ID.
+	@return ApiDeleteMediaStreamConfigRequest
+*/
+func (a *CallsAPIService) DeleteMediaStreamConfig(ctx context.Context, mediaStreamConfigId string) ApiDeleteMediaStreamConfigRequest {
+	return ApiDeleteMediaStreamConfigRequest{
+		ApiService:          a,
+		ctx:                 ctx,
+		mediaStreamConfigId: mediaStreamConfigId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return MediaStreamConfigResponse
+func (a *CallsAPIService) DeleteMediaStreamConfigExecute(r ApiDeleteMediaStreamConfigRequest) (*MediaStreamConfigResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *MediaStreamConfigResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteMediaStreamConfig")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/media-stream-configs/{mediaStreamConfigId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"mediaStreamConfigId"+"}", url.PathEscape(parameterValueToString(r.mediaStreamConfigId, "mediaStreamConfigId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteRecordingFileRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	fileId     string
+	location   *RecordingLocation
+}
+
+// Recording location.
+func (r ApiDeleteRecordingFileRequest) Location(location RecordingLocation) ApiDeleteRecordingFileRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiDeleteRecordingFileRequest) Execute() (*RecordingFile, *http.Response, error) {
+	return r.ApiService.DeleteRecordingFileExecute(r)
+}
+
+/*
+DeleteRecordingFile Delete recording file
+
+Delete a single file from a call or conference recording. The call or conference recording metadata will still exist after deleting the file, but the file will not show up anymore in the file list of that call or conference recording.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param fileId File ID.
+	@return ApiDeleteRecordingFileRequest
+*/
+func (a *CallsAPIService) DeleteRecordingFile(ctx context.Context, fileId string) ApiDeleteRecordingFileRequest {
+	return ApiDeleteRecordingFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		fileId:     fileId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return RecordingFile
+func (a *CallsAPIService) DeleteRecordingFileExecute(r ApiDeleteRecordingFileRequest) (*RecordingFile, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *RecordingFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteRecordingFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/files/{fileId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"fileId"+"}", url.PathEscape(parameterValueToString(r.fileId, "fileId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteSipTrunkRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	sipTrunkId string
+}
+
+func (r ApiDeleteSipTrunkRequest) Execute() (*SipTrunkResponse, *http.Response, error) {
+	return r.ApiService.DeleteSipTrunkExecute(r)
+}
+
+/*
+DeleteSipTrunk Delete SIP trunk
+
+Delete a SIP trunk. This operation is asynchronous. The SIP trunk will be deleted in the background.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkId SIP trunk ID.
+	@return ApiDeleteSipTrunkRequest
+*/
+func (a *CallsAPIService) DeleteSipTrunk(ctx context.Context, sipTrunkId string) ApiDeleteSipTrunkRequest {
+	return ApiDeleteSipTrunkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		sipTrunkId: sipTrunkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkResponse
+func (a *CallsAPIService) DeleteSipTrunkExecute(r ApiDeleteSipTrunkRequest) (*SipTrunkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteSipTrunk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/{sipTrunkId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkId, "sipTrunkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteSipTrunkServiceAddressRequest struct {
+	ctx                      context.Context
+	ApiService               *CallsAPIService
+	sipTrunkServiceAddressId string
+}
+
+func (r ApiDeleteSipTrunkServiceAddressRequest) Execute() (*SipTrunkServiceAddress, *http.Response, error) {
+	return r.ApiService.DeleteSipTrunkServiceAddressExecute(r)
+}
+
+/*
+DeleteSipTrunkServiceAddress Delete SIP trunk service address
+
+Delete SIP trunk service address.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkServiceAddressId SIP trunk service address ID.
+	@return ApiDeleteSipTrunkServiceAddressRequest
+*/
+func (a *CallsAPIService) DeleteSipTrunkServiceAddress(ctx context.Context, sipTrunkServiceAddressId string) ApiDeleteSipTrunkServiceAddressRequest {
+	return ApiDeleteSipTrunkServiceAddressRequest{
+		ApiService:               a,
+		ctx:                      ctx,
+		sipTrunkServiceAddressId: sipTrunkServiceAddressId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkServiceAddress
+func (a *CallsAPIService) DeleteSipTrunkServiceAddressExecute(r ApiDeleteSipTrunkServiceAddressRequest) (*SipTrunkServiceAddress, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkServiceAddress
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DeleteSipTrunkServiceAddress")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses/{sipTrunkServiceAddressId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkServiceAddressId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkServiceAddressId, "sipTrunkServiceAddressId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDialogBroadcastWebrtcTextRequest struct {
+	ctx                              context.Context
+	ApiService                       *CallsAPIService
+	dialogId                         string
+	dialogBroadcastWebrtcTextRequest *DialogBroadcastWebrtcTextRequest
+}
+
+func (r ApiDialogBroadcastWebrtcTextRequest) DialogBroadcastWebrtcTextRequest(dialogBroadcastWebrtcTextRequest DialogBroadcastWebrtcTextRequest) ApiDialogBroadcastWebrtcTextRequest {
+	r.dialogBroadcastWebrtcTextRequest = &dialogBroadcastWebrtcTextRequest
+	return r
+}
+
+func (r ApiDialogBroadcastWebrtcTextRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.DialogBroadcastWebrtcTextExecute(r)
+}
+
+/*
+DialogBroadcastWebrtcText Broadcast text
+
+Broadcasts a text message to dialog WebRTC call legs with open data channel.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDialogBroadcastWebrtcTextRequest
+*/
+func (a *CallsAPIService) DialogBroadcastWebrtcText(ctx context.Context, dialogId string) ApiDialogBroadcastWebrtcTextRequest {
+	return ApiDialogBroadcastWebrtcTextRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) DialogBroadcastWebrtcTextExecute(r ApiDialogBroadcastWebrtcTextRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DialogBroadcastWebrtcText")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/broadcast-webrtc-text"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dialogBroadcastWebrtcTextRequest == nil {
+		return localVarReturnValue, nil, reportError("dialogBroadcastWebrtcTextRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dialogBroadcastWebrtcTextRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDialogPlayFileRequest struct {
+	ctx               context.Context
+	ApiService        *CallsAPIService
+	dialogId          string
+	dialogPlayRequest *DialogPlayRequest
+}
+
+func (r ApiDialogPlayFileRequest) DialogPlayRequest(dialogPlayRequest DialogPlayRequest) ApiDialogPlayFileRequest {
+	r.dialogPlayRequest = &dialogPlayRequest
+	return r
+}
+
+func (r ApiDialogPlayFileRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.DialogPlayFileExecute(r)
+}
+
+/*
+DialogPlayFile Play file
+
+Play an audio file on a dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDialogPlayFileRequest
+*/
+func (a *CallsAPIService) DialogPlayFile(ctx context.Context, dialogId string) ApiDialogPlayFileRequest {
+	return ApiDialogPlayFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) DialogPlayFileExecute(r ApiDialogPlayFileRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DialogPlayFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/play"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dialogPlayRequest == nil {
+		return localVarReturnValue, nil, reportError("dialogPlayRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dialogPlayRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDialogSayTextRequest struct {
+	ctx              context.Context
+	ApiService       *CallsAPIService
+	dialogId         string
+	dialogSayRequest *DialogSayRequest
+}
+
+func (r ApiDialogSayTextRequest) DialogSayRequest(dialogSayRequest DialogSayRequest) ApiDialogSayTextRequest {
+	r.dialogSayRequest = &dialogSayRequest
+	return r
+}
+
+func (r ApiDialogSayTextRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.DialogSayTextExecute(r)
+}
+
+/*
+DialogSayText Say text
+
+Say text on a dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDialogSayTextRequest
+*/
+func (a *CallsAPIService) DialogSayText(ctx context.Context, dialogId string) ApiDialogSayTextRequest {
+	return ApiDialogSayTextRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) DialogSayTextExecute(r ApiDialogSayTextRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DialogSayText")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/say"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dialogSayRequest == nil {
+		return localVarReturnValue, nil, reportError("dialogSayRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dialogSayRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDialogStartRecordingRequest struct {
+	ctx                    context.Context
+	ApiService             *CallsAPIService
+	dialogId               string
+	dialogRecordingRequest *DialogRecordingRequest
+}
+
+func (r ApiDialogStartRecordingRequest) DialogRecordingRequest(dialogRecordingRequest DialogRecordingRequest) ApiDialogStartRecordingRequest {
+	r.dialogRecordingRequest = &dialogRecordingRequest
+	return r
+}
+
+func (r ApiDialogStartRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.DialogStartRecordingExecute(r)
+}
+
+/*
+DialogStartRecording Start recording
+
+Start recording a dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDialogStartRecordingRequest
+*/
+func (a *CallsAPIService) DialogStartRecording(ctx context.Context, dialogId string) ApiDialogStartRecordingRequest {
+	return ApiDialogStartRecordingRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) DialogStartRecordingExecute(r ApiDialogStartRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DialogStartRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/start-recording"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.dialogRecordingRequest == nil {
+		return localVarReturnValue, nil, reportError("dialogRecordingRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.dialogRecordingRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDialogStopPlayingFileRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+}
+
+func (r ApiDialogStopPlayingFileRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.DialogStopPlayingFileExecute(r)
+}
+
+/*
+DialogStopPlayingFile Stop playing file
+
+Stop playing an audio file on a dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDialogStopPlayingFileRequest
+*/
+func (a *CallsAPIService) DialogStopPlayingFile(ctx context.Context, dialogId string) ApiDialogStopPlayingFileRequest {
+	return ApiDialogStopPlayingFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) DialogStopPlayingFileExecute(r ApiDialogStopPlayingFileRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DialogStopPlayingFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/stop-play"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDialogStopRecordingRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+}
+
+func (r ApiDialogStopRecordingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.DialogStopRecordingExecute(r)
+}
+
+/*
+DialogStopRecording Stop recording
+
+Stop recording a dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiDialogStopRecordingRequest
+*/
+func (a *CallsAPIService) DialogStopRecording(ctx context.Context, dialogId string) ApiDialogStopRecordingRequest {
+	return ApiDialogStopRecordingRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) DialogStopRecordingExecute(r ApiDialogStopRecordingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DialogStopRecording")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/stop-recording"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDownloadRecordingFileRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	fileId     string
+	location   *RecordingLocation
+	range_     *string
+}
+
+// Recording location.
+func (r ApiDownloadRecordingFileRequest) Location(location RecordingLocation) ApiDownloadRecordingFileRequest {
+	r.location = &location
+	return r
+}
+
+// Range header specifies range of bytes to be returned by the response. If range header is not specified, response will return a complete file.
+func (r ApiDownloadRecordingFileRequest) Range_(range_ string) ApiDownloadRecordingFileRequest {
+	r.range_ = &range_
+	return r
+}
+
+func (r ApiDownloadRecordingFileRequest) Execute() (*os.File, *http.Response, error) {
+	return r.ApiService.DownloadRecordingFileExecute(r)
+}
+
+/*
+DownloadRecordingFile Download recording file
+
+Download a recording file.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param fileId File ID.
+	@return ApiDownloadRecordingFileRequest
+*/
+func (a *CallsAPIService) DownloadRecordingFile(ctx context.Context, fileId string) ApiDownloadRecordingFileRequest {
+	return ApiDownloadRecordingFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		fileId:     fileId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return *os.File
+func (a *CallsAPIService) DownloadRecordingFileExecute(r ApiDownloadRecordingFileRequest) (*os.File, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *os.File
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.DownloadRecordingFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/files/{fileId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"fileId"+"}", url.PathEscape(parameterValueToString(r.fileId, "fileId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/octet-stream", "application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.range_ != nil {
+		parameterAddToHeaderOrQuery(localVarHeaderParams, "Range", r.range_, "simple", "")
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 416 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetBulkStatusRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	bulkId     string
+}
+
+func (r ApiGetBulkStatusRequest) Execute() (*BulkStatus, *http.Response, error) {
+	return r.ApiService.GetBulkStatusExecute(r)
+}
+
+/*
+GetBulkStatus Get bulk status
+
+Get a single bulk status. Bulk has a status if it was created with scheduling options.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param bulkId Bulk ID.
+	@return ApiGetBulkStatusRequest
+*/
+func (a *CallsAPIService) GetBulkStatus(ctx context.Context, bulkId string) ApiGetBulkStatusRequest {
+	return ApiGetBulkStatusRequest{
+		ApiService: a,
+		ctx:        ctx,
+		bulkId:     bulkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatus
+func (a *CallsAPIService) GetBulkStatusExecute(r ApiGetBulkStatusRequest) (*BulkStatus, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatus
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetBulkStatus")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/bulks/{bulkId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"bulkId"+"}", url.PathEscape(parameterValueToString(r.bulkId, "bulkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+}
+
+func (r ApiGetCallRequest) Execute() (*Call, *http.Response, error) {
+	return r.ApiService.GetCallExecute(r)
+}
+
+/*
+GetCall Get call
+
+Get a single call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiGetCallRequest
+*/
+func (a *CallsAPIService) GetCall(ctx context.Context, callId string) ApiGetCallRequest {
+	return ApiGetCallRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Call
+func (a *CallsAPIService) GetCallExecute(r ApiGetCallRequest) (*Call, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Call
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallHistoryRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+}
+
+func (r ApiGetCallHistoryRequest) Execute() (*CallLog, *http.Response, error) {
+	return r.ApiService.GetCallHistoryExecute(r)
+}
+
+/*
+GetCallHistory Get call history
+
+Get a single call history. Call history retention period is 5 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiGetCallHistoryRequest
+*/
+func (a *CallsAPIService) GetCallHistory(ctx context.Context, callId string) ApiGetCallHistoryRequest {
+	return ApiGetCallHistoryRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallLog
+func (a *CallsAPIService) GetCallHistoryExecute(r ApiGetCallHistoryRequest) (*CallLog, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallLog
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallHistory")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/history"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallRecordingsRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+	location   *RecordingLocation
+}
+
+// Recording location.
+func (r ApiGetCallRecordingsRequest) Location(location RecordingLocation) ApiGetCallRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiGetCallRecordingsRequest) Execute() (*Recording, *http.Response, error) {
+	return r.ApiService.GetCallRecordingsExecute(r)
+}
+
+/*
+GetCallRecordings Get call recordings
+
+Get the recordings for a single call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiGetCallRecordingsRequest
+*/
+func (a *CallsAPIService) GetCallRecordings(ctx context.Context, callId string) ApiGetCallRecordingsRequest {
+	return ApiGetCallRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Recording
+func (a *CallsAPIService) GetCallRecordingsExecute(r ApiGetCallRecordingsRequest) (*Recording, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Recording
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/calls/{callId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	type_                *CallEndpointType
+	callsConfigurationId *string
+	applicationId        *string
+	from                 *string
+	to                   *string
+	direction            *CallDirection
+	status               *CallState
+	startTimeAfter       *Time
+	conferenceId         *string
+	dialogId             *string
+	bulkId               *string
+	page                 *int32
+	size                 *int32
+}
+
+// Call endpoint type.
+func (r ApiGetCallsRequest) Type_(type_ CallEndpointType) ApiGetCallsRequest {
+	r.type_ = &type_
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetCallsRequest) CallsConfigurationId(callsConfigurationId string) ApiGetCallsRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetCallsRequest) ApplicationId(applicationId string) ApiGetCallsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Caller identifier.
+func (r ApiGetCallsRequest) From(from string) ApiGetCallsRequest {
+	r.from = &from
+	return r
+}
+
+// Callee identifier.
+func (r ApiGetCallsRequest) To(to string) ApiGetCallsRequest {
+	r.to = &to
+	return r
+}
+
+// Call direction.
+func (r ApiGetCallsRequest) Direction(direction CallDirection) ApiGetCallsRequest {
+	r.direction = &direction
+	return r
+}
+
+// Call state.
+func (r ApiGetCallsRequest) Status(status CallState) ApiGetCallsRequest {
+	r.status = &status
+	return r
+}
+
+// Date and time for when the call has been created. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetCallsRequest) StartTimeAfter(startTimeAfter Time) ApiGetCallsRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Conference ID.
+func (r ApiGetCallsRequest) ConferenceId(conferenceId string) ApiGetCallsRequest {
+	r.conferenceId = &conferenceId
+	return r
+}
+
+// Dialog ID.
+func (r ApiGetCallsRequest) DialogId(dialogId string) ApiGetCallsRequest {
+	r.dialogId = &dialogId
+	return r
+}
+
+// Bulk ID.
+func (r ApiGetCallsRequest) BulkId(bulkId string) ApiGetCallsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetCallsRequest) Page(page int32) ApiGetCallsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetCallsRequest) Size(size int32) ApiGetCallsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetCallsRequest) Execute() (*CallPage, *http.Response, error) {
+	return r.ApiService.GetCallsExecute(r)
+}
+
+/*
+GetCalls Get calls
+
+Get calls with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCallsRequest
+*/
+func (a *CallsAPIService) GetCalls(ctx context.Context) ApiGetCallsRequest {
+	return ApiGetCallsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallPage
+func (a *CallsAPIService) GetCallsExecute(r ApiGetCallsRequest) (*CallPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCalls")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.type_ != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "type", r.type_, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.from != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "from", r.from, "form", "")
+	}
+	if r.to != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "to", r.to, "form", "")
+	}
+	if r.direction != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "direction", r.direction, "form", "")
+	}
+	if r.status != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "status", r.status, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.conferenceId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "conferenceId", r.conferenceId, "form", "")
+	}
+	if r.dialogId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "dialogId", r.dialogId, "form", "")
+	}
+	if r.bulkId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsConfigurationRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	callsConfigurationId string
+}
+
+func (r ApiGetCallsConfigurationRequest) Execute() (*CallsConfigurationResponse, *http.Response, error) {
+	return r.ApiService.GetCallsConfigurationExecute(r)
+}
+
+/*
+GetCallsConfiguration Get calls configuration
+
+Get a single calls configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callsConfigurationId Calls configuration ID.
+	@return ApiGetCallsConfigurationRequest
+*/
+func (a *CallsAPIService) GetCallsConfiguration(ctx context.Context, callsConfigurationId string) ApiGetCallsConfigurationRequest {
+	return ApiGetCallsConfigurationRequest{
+		ApiService:           a,
+		ctx:                  ctx,
+		callsConfigurationId: callsConfigurationId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallsConfigurationResponse
+func (a *CallsAPIService) GetCallsConfigurationExecute(r ApiGetCallsConfigurationRequest) (*CallsConfigurationResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallsConfigurationResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallsConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/configurations/{callsConfigurationId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"callsConfigurationId"+"}", url.PathEscape(parameterValueToString(r.callsConfigurationId, "callsConfigurationId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsConfigurationsRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	page       *int32
+	size       *int32
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetCallsConfigurationsRequest) Page(page int32) ApiGetCallsConfigurationsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetCallsConfigurationsRequest) Size(size int32) ApiGetCallsConfigurationsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetCallsConfigurationsRequest) Execute() (*CallsConfigurationPage, *http.Response, error) {
+	return r.ApiService.GetCallsConfigurationsExecute(r)
+}
+
+/*
+GetCallsConfigurations Get calls configurations
+
+Get calls configurations.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCallsConfigurationsRequest
+*/
+func (a *CallsAPIService) GetCallsConfigurations(ctx context.Context) ApiGetCallsConfigurationsRequest {
+	return ApiGetCallsConfigurationsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallsConfigurationPage
+func (a *CallsAPIService) GetCallsConfigurationsExecute(r ApiGetCallsConfigurationsRequest) (*CallsConfigurationPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallsConfigurationPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallsConfigurations")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/configurations"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsFileRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	fileId     string
+}
+
+func (r ApiGetCallsFileRequest) Execute() (*File, *http.Response, error) {
+	return r.ApiService.GetCallsFileExecute(r)
+}
+
+/*
+GetCallsFile Get file
+
+Get a single file.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param fileId File ID.
+	@return ApiGetCallsFileRequest
+*/
+func (a *CallsAPIService) GetCallsFile(ctx context.Context, fileId string) ApiGetCallsFileRequest {
+	return ApiGetCallsFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		fileId:     fileId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return File
+func (a *CallsAPIService) GetCallsFileExecute(r ApiGetCallsFileRequest) (*File, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *File
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallsFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/files/{fileId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"fileId"+"}", url.PathEscape(parameterValueToString(r.fileId, "fileId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsFilesRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	page       *int32
+	size       *int32
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetCallsFilesRequest) Page(page int32) ApiGetCallsFilesRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetCallsFilesRequest) Size(size int32) ApiGetCallsFilesRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetCallsFilesRequest) Execute() (*FilePage, *http.Response, error) {
+	return r.ApiService.GetCallsFilesExecute(r)
+}
+
+/*
+GetCallsFiles Get files
+
+Get files with pagination. Maximum number of pages is 100.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCallsFilesRequest
+*/
+func (a *CallsAPIService) GetCallsFiles(ctx context.Context) ApiGetCallsFilesRequest {
+	return ApiGetCallsFilesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FilePage
+func (a *CallsAPIService) GetCallsFilesExecute(r ApiGetCallsFilesRequest) (*FilePage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FilePage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallsFiles")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/files"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsHistoryRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	type_                *CallEndpointType
+	callsConfigurationId *string
+	applicationId        *string
+	from                 *string
+	to                   *string
+	direction            *CallDirection
+	status               *CallState
+	startTimeAfter       *Time
+	endTimeBefore        *Time
+	conferenceId         *string
+	dialogId             *string
+	bulkId               *string
+	page                 *int32
+	size                 *int32
+}
+
+// Call endpoint type.
+func (r ApiGetCallsHistoryRequest) Type_(type_ CallEndpointType) ApiGetCallsHistoryRequest {
+	r.type_ = &type_
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetCallsHistoryRequest) CallsConfigurationId(callsConfigurationId string) ApiGetCallsHistoryRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetCallsHistoryRequest) ApplicationId(applicationId string) ApiGetCallsHistoryRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Caller identifier.
+func (r ApiGetCallsHistoryRequest) From(from string) ApiGetCallsHistoryRequest {
+	r.from = &from
+	return r
+}
+
+// Callee identifier.
+func (r ApiGetCallsHistoryRequest) To(to string) ApiGetCallsHistoryRequest {
+	r.to = &to
+	return r
+}
+
+// Call direction.
+func (r ApiGetCallsHistoryRequest) Direction(direction CallDirection) ApiGetCallsHistoryRequest {
+	r.direction = &direction
+	return r
+}
+
+// Call state.
+func (r ApiGetCallsHistoryRequest) Status(status CallState) ApiGetCallsHistoryRequest {
+	r.status = &status
+	return r
+}
+
+// Date and time for when the call has been created. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetCallsHistoryRequest) StartTimeAfter(startTimeAfter Time) ApiGetCallsHistoryRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Date and time for when the call has been finished. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetCallsHistoryRequest) EndTimeBefore(endTimeBefore Time) ApiGetCallsHistoryRequest {
+	r.endTimeBefore = &endTimeBefore
+	return r
+}
+
+// Conference ID.
+func (r ApiGetCallsHistoryRequest) ConferenceId(conferenceId string) ApiGetCallsHistoryRequest {
+	r.conferenceId = &conferenceId
+	return r
+}
+
+// Dialog ID.
+func (r ApiGetCallsHistoryRequest) DialogId(dialogId string) ApiGetCallsHistoryRequest {
+	r.dialogId = &dialogId
+	return r
+}
+
+// Bulk ID.
+func (r ApiGetCallsHistoryRequest) BulkId(bulkId string) ApiGetCallsHistoryRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetCallsHistoryRequest) Page(page int32) ApiGetCallsHistoryRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetCallsHistoryRequest) Size(size int32) ApiGetCallsHistoryRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetCallsHistoryRequest) Execute() (*CallLogPage, *http.Response, error) {
+	return r.ApiService.GetCallsHistoryExecute(r)
+}
+
+/*
+GetCallsHistory Get calls history
+
+Get calls history with pagination. Calls history retention period is 5 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCallsHistoryRequest
+*/
+func (a *CallsAPIService) GetCallsHistory(ctx context.Context) ApiGetCallsHistoryRequest {
+	return ApiGetCallsHistoryRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallLogPage
+func (a *CallsAPIService) GetCallsHistoryExecute(r ApiGetCallsHistoryRequest) (*CallLogPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallLogPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallsHistory")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/history"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.type_ != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "type", r.type_, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.from != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "from", r.from, "form", "")
+	}
+	if r.to != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "to", r.to, "form", "")
+	}
+	if r.direction != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "direction", r.direction, "form", "")
+	}
+	if r.status != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "status", r.status, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.endTimeBefore != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endTimeBefore", r.endTimeBefore, "form", "")
+	}
+	if r.conferenceId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "conferenceId", r.conferenceId, "form", "")
+	}
+	if r.dialogId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "dialogId", r.dialogId, "form", "")
+	}
+	if r.bulkId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCallsRecordingsRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	callId               *string
+	callsConfigurationId *string
+	applicationId        *string
+	entityId             *string
+	endpointIdentifier   *string
+	startTimeAfter       *Time
+	endTimeBefore        *Time
+	direction            *CallDirection
+	endpointType         *CallEndpointType
+	location             *RecordingLocation
+	page                 *int32
+	size                 *int32
+}
+
+// Call ID.
+func (r ApiGetCallsRecordingsRequest) CallId(callId string) ApiGetCallsRecordingsRequest {
+	r.callId = &callId
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetCallsRecordingsRequest) CallsConfigurationId(callsConfigurationId string) ApiGetCallsRecordingsRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetCallsRecordingsRequest) ApplicationId(applicationId string) ApiGetCallsRecordingsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Entity ID.
+func (r ApiGetCallsRecordingsRequest) EntityId(entityId string) ApiGetCallsRecordingsRequest {
+	r.entityId = &entityId
+	return r
+}
+
+// Endpoint identifier.
+func (r ApiGetCallsRecordingsRequest) EndpointIdentifier(endpointIdentifier string) ApiGetCallsRecordingsRequest {
+	r.endpointIdentifier = &endpointIdentifier
+	return r
+}
+
+// Date and time when the (first) call recording started.
+func (r ApiGetCallsRecordingsRequest) StartTimeAfter(startTimeAfter Time) ApiGetCallsRecordingsRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Date and time when the (last) call recording ended.
+func (r ApiGetCallsRecordingsRequest) EndTimeBefore(endTimeBefore Time) ApiGetCallsRecordingsRequest {
+	r.endTimeBefore = &endTimeBefore
+	return r
+}
+
+// Call direction.
+func (r ApiGetCallsRecordingsRequest) Direction(direction CallDirection) ApiGetCallsRecordingsRequest {
+	r.direction = &direction
+	return r
+}
+
+// Endpoint type.
+func (r ApiGetCallsRecordingsRequest) EndpointType(endpointType CallEndpointType) ApiGetCallsRecordingsRequest {
+	r.endpointType = &endpointType
+	return r
+}
+
+// Recording location.
+func (r ApiGetCallsRecordingsRequest) Location(location RecordingLocation) ApiGetCallsRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetCallsRecordingsRequest) Page(page int32) ApiGetCallsRecordingsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetCallsRecordingsRequest) Size(size int32) ApiGetCallsRecordingsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetCallsRecordingsRequest) Execute() (*CallRecordingPage, *http.Response, error) {
+	return r.ApiService.GetCallsRecordingsExecute(r)
+}
+
+/*
+GetCallsRecordings Get calls recordings
+
+Get the recordings of calls with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCallsRecordingsRequest
+*/
+func (a *CallsAPIService) GetCallsRecordings(ctx context.Context) ApiGetCallsRecordingsRequest {
+	return ApiGetCallsRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallRecordingPage
+func (a *CallsAPIService) GetCallsRecordingsExecute(r ApiGetCallsRecordingsRequest) (*CallRecordingPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallRecordingPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCallsRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/calls"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.callId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callId", r.callId, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.entityId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "entityId", r.entityId, "form", "")
+	}
+	if r.endpointIdentifier != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endpointIdentifier", r.endpointIdentifier, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.endTimeBefore != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endTimeBefore", r.endTimeBefore, "form", "")
+	}
+	if r.direction != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "direction", r.direction, "form", "")
+	}
+	if r.endpointType != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endpointType", r.endpointType, "form", "")
+	}
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetConferenceRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+}
+
+func (r ApiGetConferenceRequest) Execute() (*Conference, *http.Response, error) {
+	return r.ApiService.GetConferenceExecute(r)
+}
+
+/*
+GetConference Get conference
+
+Get a single conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiGetConferenceRequest
+*/
+func (a *CallsAPIService) GetConference(ctx context.Context, conferenceId string) ApiGetConferenceRequest {
+	return ApiGetConferenceRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Conference
+func (a *CallsAPIService) GetConferenceExecute(r ApiGetConferenceRequest) (*Conference, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Conference
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetConference")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetConferenceHistoryRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+}
+
+func (r ApiGetConferenceHistoryRequest) Execute() (*ConferenceLogResponse, *http.Response, error) {
+	return r.ApiService.GetConferenceHistoryExecute(r)
+}
+
+/*
+GetConferenceHistory Get conference history
+
+Get a single conference history. Conference history retention period is 5 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiGetConferenceHistoryRequest
+*/
+func (a *CallsAPIService) GetConferenceHistory(ctx context.Context, conferenceId string) ApiGetConferenceHistoryRequest {
+	return ApiGetConferenceHistoryRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceLogResponse
+func (a *CallsAPIService) GetConferenceHistoryExecute(r ApiGetConferenceHistoryRequest) (*ConferenceLogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceLogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetConferenceHistory")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/history"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetConferenceRecordingsRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+	location     *RecordingLocation
+}
+
+// Recording location.
+func (r ApiGetConferenceRecordingsRequest) Location(location RecordingLocation) ApiGetConferenceRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiGetConferenceRecordingsRequest) Execute() (*ConferenceRecording, *http.Response, error) {
+	return r.ApiService.GetConferenceRecordingsExecute(r)
+}
+
+/*
+GetConferenceRecordings Get conference recordings
+
+Get the recordings for a single conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiGetConferenceRecordingsRequest
+*/
+func (a *CallsAPIService) GetConferenceRecordings(ctx context.Context, conferenceId string) ApiGetConferenceRecordingsRequest {
+	return ApiGetConferenceRecordingsRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceRecording
+func (a *CallsAPIService) GetConferenceRecordingsExecute(r ApiGetConferenceRecordingsRequest) (*ConferenceRecording, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceRecording
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetConferenceRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/conferences/{conferenceId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetConferencesRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	name                 *string
+	callId               *string
+	callsConfigurationId *string
+	applicationId        *string
+	startTimeAfter       *Time
+	page                 *int32
+	size                 *int32
+}
+
+// Conference name.
+func (r ApiGetConferencesRequest) Name(name string) ApiGetConferencesRequest {
+	r.name = &name
+	return r
+}
+
+// Call ID.
+func (r ApiGetConferencesRequest) CallId(callId string) ApiGetConferencesRequest {
+	r.callId = &callId
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetConferencesRequest) CallsConfigurationId(callsConfigurationId string) ApiGetConferencesRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetConferencesRequest) ApplicationId(applicationId string) ApiGetConferencesRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Date and time for when the conference has been created. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetConferencesRequest) StartTimeAfter(startTimeAfter Time) ApiGetConferencesRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetConferencesRequest) Page(page int32) ApiGetConferencesRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetConferencesRequest) Size(size int32) ApiGetConferencesRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetConferencesRequest) Execute() (*ConferencePage, *http.Response, error) {
+	return r.ApiService.GetConferencesExecute(r)
+}
+
+/*
+GetConferences Get conferences
+
+Get conferences with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetConferencesRequest
+*/
+func (a *CallsAPIService) GetConferences(ctx context.Context) ApiGetConferencesRequest {
+	return ApiGetConferencesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferencePage
+func (a *CallsAPIService) GetConferencesExecute(r ApiGetConferencesRequest) (*ConferencePage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferencePage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetConferences")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.name != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "name", r.name, "form", "")
+	}
+	if r.callId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callId", r.callId, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetConferencesHistoryRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	name                 *string
+	callId               *string
+	callsConfigurationId *string
+	applicationId        *string
+	startTimeAfter       *Time
+	endTimeBefore        *Time
+	page                 *int32
+	size                 *int32
+}
+
+// Conference name.
+func (r ApiGetConferencesHistoryRequest) Name(name string) ApiGetConferencesHistoryRequest {
+	r.name = &name
+	return r
+}
+
+// Call ID.
+func (r ApiGetConferencesHistoryRequest) CallId(callId string) ApiGetConferencesHistoryRequest {
+	r.callId = &callId
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetConferencesHistoryRequest) CallsConfigurationId(callsConfigurationId string) ApiGetConferencesHistoryRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetConferencesHistoryRequest) ApplicationId(applicationId string) ApiGetConferencesHistoryRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Date and time for when the conference has been created. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetConferencesHistoryRequest) StartTimeAfter(startTimeAfter Time) ApiGetConferencesHistoryRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Date and time for when the conference has been finished. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetConferencesHistoryRequest) EndTimeBefore(endTimeBefore Time) ApiGetConferencesHistoryRequest {
+	r.endTimeBefore = &endTimeBefore
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetConferencesHistoryRequest) Page(page int32) ApiGetConferencesHistoryRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetConferencesHistoryRequest) Size(size int32) ApiGetConferencesHistoryRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetConferencesHistoryRequest) Execute() (*ConferenceLogPage, *http.Response, error) {
+	return r.ApiService.GetConferencesHistoryExecute(r)
+}
+
+/*
+GetConferencesHistory Get conferences history
+
+Get conferences history with pagination. Conferences history retention period is 5 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetConferencesHistoryRequest
+*/
+func (a *CallsAPIService) GetConferencesHistory(ctx context.Context) ApiGetConferencesHistoryRequest {
+	return ApiGetConferencesHistoryRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceLogPage
+func (a *CallsAPIService) GetConferencesHistoryExecute(r ApiGetConferencesHistoryRequest) (*ConferenceLogPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceLogPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetConferencesHistory")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/history"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.name != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "name", r.name, "form", "")
+	}
+	if r.callId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callId", r.callId, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.endTimeBefore != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endTimeBefore", r.endTimeBefore, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetConferencesRecordingsRequest struct {
+	ctx                    context.Context
+	ApiService             *CallsAPIService
+	conferenceId           *string
+	callsConfigurationId   *string
+	applicationId          *string
+	entityId               *string
+	conferenceName         *string
+	callId                 *string
+	callEndpointType       *CallEndpointType
+	callEndpointIdentifier *string
+	startTimeAfter         *Time
+	endTimeBefore          *Time
+	composition            *bool
+	location               *RecordingLocation
+	page                   *int32
+	size                   *int32
+}
+
+// Conference ID.
+func (r ApiGetConferencesRecordingsRequest) ConferenceId(conferenceId string) ApiGetConferencesRecordingsRequest {
+	r.conferenceId = &conferenceId
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetConferencesRecordingsRequest) CallsConfigurationId(callsConfigurationId string) ApiGetConferencesRecordingsRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetConferencesRecordingsRequest) ApplicationId(applicationId string) ApiGetConferencesRecordingsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Entity ID.
+func (r ApiGetConferencesRecordingsRequest) EntityId(entityId string) ApiGetConferencesRecordingsRequest {
+	r.entityId = &entityId
+	return r
+}
+
+// Conference name.
+func (r ApiGetConferencesRecordingsRequest) ConferenceName(conferenceName string) ApiGetConferencesRecordingsRequest {
+	r.conferenceName = &conferenceName
+	return r
+}
+
+// Filter all conference recordings where call ID was included in the recording.
+func (r ApiGetConferencesRecordingsRequest) CallId(callId string) ApiGetConferencesRecordingsRequest {
+	r.callId = &callId
+	return r
+}
+
+// Filter all conference recordings where calls with endpoint type were included in the recording.
+func (r ApiGetConferencesRecordingsRequest) CallEndpointType(callEndpointType CallEndpointType) ApiGetConferencesRecordingsRequest {
+	r.callEndpointType = &callEndpointType
+	return r
+}
+
+// Filter all conference recordings where calls with endpoint identifier were included in the recording.
+func (r ApiGetConferencesRecordingsRequest) CallEndpointIdentifier(callEndpointIdentifier string) ApiGetConferencesRecordingsRequest {
+	r.callEndpointIdentifier = &callEndpointIdentifier
+	return r
+}
+
+// Date and time when the (first) conference recording started.
+func (r ApiGetConferencesRecordingsRequest) StartTimeAfter(startTimeAfter Time) ApiGetConferencesRecordingsRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Date and time when the (last) conference recording ended.
+func (r ApiGetConferencesRecordingsRequest) EndTimeBefore(endTimeBefore Time) ApiGetConferencesRecordingsRequest {
+	r.endTimeBefore = &endTimeBefore
+	return r
+}
+
+// Flag indicating whether auto-compose feature was turned on for the recording.
+func (r ApiGetConferencesRecordingsRequest) Composition(composition bool) ApiGetConferencesRecordingsRequest {
+	r.composition = &composition
+	return r
+}
+
+// Recording location.
+func (r ApiGetConferencesRecordingsRequest) Location(location RecordingLocation) ApiGetConferencesRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetConferencesRecordingsRequest) Page(page int32) ApiGetConferencesRecordingsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetConferencesRecordingsRequest) Size(size int32) ApiGetConferencesRecordingsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetConferencesRecordingsRequest) Execute() (*ConferenceRecordingPage, *http.Response, error) {
+	return r.ApiService.GetConferencesRecordingsExecute(r)
+}
+
+/*
+GetConferencesRecordings Get conferences recordings
+
+Get the recordings of conferences with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetConferencesRecordingsRequest
+*/
+func (a *CallsAPIService) GetConferencesRecordings(ctx context.Context) ApiGetConferencesRecordingsRequest {
+	return ApiGetConferencesRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ConferenceRecordingPage
+func (a *CallsAPIService) GetConferencesRecordingsExecute(r ApiGetConferencesRecordingsRequest) (*ConferenceRecordingPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ConferenceRecordingPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetConferencesRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/conferences"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.conferenceId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "conferenceId", r.conferenceId, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.entityId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "entityId", r.entityId, "form", "")
+	}
+	if r.conferenceName != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "conferenceName", r.conferenceName, "form", "")
+	}
+	if r.callId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callId", r.callId, "form", "")
+	}
+	if r.callEndpointType != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callEndpointType", r.callEndpointType, "form", "")
+	}
+	if r.callEndpointIdentifier != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callEndpointIdentifier", r.callEndpointIdentifier, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.endTimeBefore != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endTimeBefore", r.endTimeBefore, "form", "")
+	}
+	if r.composition != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "composition", r.composition, "form", "")
+	}
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetCountriesRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+}
+
+func (r ApiGetCountriesRequest) Execute() (*CountryList, *http.Response, error) {
+	return r.ApiService.GetCountriesExecute(r)
+}
+
+/*
+GetCountries Get countries
+
+Get countries with shortcodes you'd need for a SIP trunk address.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetCountriesRequest
+*/
+func (a *CallsAPIService) GetCountries(ctx context.Context) ApiGetCountriesRequest {
+	return ApiGetCountriesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CountryList
+func (a *CallsAPIService) GetCountriesExecute(r ApiGetCountriesRequest) (*CountryList, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CountryList
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetCountries")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses/countries"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDialogRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+}
+
+func (r ApiGetDialogRequest) Execute() (*DialogResponse, *http.Response, error) {
+	return r.ApiService.GetDialogExecute(r)
+}
+
+/*
+GetDialog Get dialog
+
+Get a single dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiGetDialogRequest
+*/
+func (a *CallsAPIService) GetDialog(ctx context.Context, dialogId string) ApiGetDialogRequest {
+	return ApiGetDialogRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogResponse
+func (a *CallsAPIService) GetDialogExecute(r ApiGetDialogRequest) (*DialogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetDialog")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDialogHistoryRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+}
+
+func (r ApiGetDialogHistoryRequest) Execute() (*DialogLogResponse, *http.Response, error) {
+	return r.ApiService.GetDialogHistoryExecute(r)
+}
+
+/*
+GetDialogHistory Get dialog history
+
+Get a single dialog history. Dialog history retention period is 5 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiGetDialogHistoryRequest
+*/
+func (a *CallsAPIService) GetDialogHistory(ctx context.Context, dialogId string) ApiGetDialogHistoryRequest {
+	return ApiGetDialogHistoryRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogLogResponse
+func (a *CallsAPIService) GetDialogHistoryExecute(r ApiGetDialogHistoryRequest) (*DialogLogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogLogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetDialogHistory")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/history"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDialogRecordingsRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+	location   *RecordingLocation
+}
+
+// Recording location.
+func (r ApiGetDialogRecordingsRequest) Location(location RecordingLocation) ApiGetDialogRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+func (r ApiGetDialogRecordingsRequest) Execute() (*DialogRecordingResponse, *http.Response, error) {
+	return r.ApiService.GetDialogRecordingsExecute(r)
+}
+
+/*
+GetDialogRecordings Get dialog recordings
+
+Get the recordings for a single dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiGetDialogRecordingsRequest
+*/
+func (a *CallsAPIService) GetDialogRecordings(ctx context.Context, dialogId string) ApiGetDialogRecordingsRequest {
+	return ApiGetDialogRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogRecordingResponse
+func (a *CallsAPIService) GetDialogRecordingsExecute(r ApiGetDialogRecordingsRequest) (*DialogRecordingResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogRecordingResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetDialogRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/dialogs/{dialogId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDialogsRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	callsConfigurationId *string
+	applicationId        *string
+	state                *DialogState
+	parentCallId         *string
+	childCallId          *string
+	startTimeAfter       *Time
+	page                 *int32
+	size                 *int32
+}
+
+// Calls Configuration ID.
+func (r ApiGetDialogsRequest) CallsConfigurationId(callsConfigurationId string) ApiGetDialogsRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetDialogsRequest) ApplicationId(applicationId string) ApiGetDialogsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Dialog state.
+func (r ApiGetDialogsRequest) State(state DialogState) ApiGetDialogsRequest {
+	r.state = &state
+	return r
+}
+
+// Parent call ID.
+func (r ApiGetDialogsRequest) ParentCallId(parentCallId string) ApiGetDialogsRequest {
+	r.parentCallId = &parentCallId
+	return r
+}
+
+// Child call ID.
+func (r ApiGetDialogsRequest) ChildCallId(childCallId string) ApiGetDialogsRequest {
+	r.childCallId = &childCallId
+	return r
+}
+
+// Date and time for when the dialog has been created. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetDialogsRequest) StartTimeAfter(startTimeAfter Time) ApiGetDialogsRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetDialogsRequest) Page(page int32) ApiGetDialogsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetDialogsRequest) Size(size int32) ApiGetDialogsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetDialogsRequest) Execute() (*DialogPage, *http.Response, error) {
+	return r.ApiService.GetDialogsExecute(r)
+}
+
+/*
+GetDialogs Get dialogs
+
+Get dialogs with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetDialogsRequest
+*/
+func (a *CallsAPIService) GetDialogs(ctx context.Context) ApiGetDialogsRequest {
+	return ApiGetDialogsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogPage
+func (a *CallsAPIService) GetDialogsExecute(r ApiGetDialogsRequest) (*DialogPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetDialogs")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.state != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "state", r.state, "form", "")
+	}
+	if r.parentCallId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "parentCallId", r.parentCallId, "form", "")
+	}
+	if r.childCallId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "childCallId", r.childCallId, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDialogsHistoryRequest struct {
+	ctx                  context.Context
+	ApiService           *CallsAPIService
+	callsConfigurationId *string
+	applicationId        *string
+	state                *DialogState
+	parentCallId         *string
+	childCallId          *string
+	startTimeAfter       *Time
+	endTimeBefore        *Time
+	page                 *int32
+	size                 *int32
+}
+
+// Calls Configuration ID.
+func (r ApiGetDialogsHistoryRequest) CallsConfigurationId(callsConfigurationId string) ApiGetDialogsHistoryRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetDialogsHistoryRequest) ApplicationId(applicationId string) ApiGetDialogsHistoryRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Dialog state.
+func (r ApiGetDialogsHistoryRequest) State(state DialogState) ApiGetDialogsHistoryRequest {
+	r.state = &state
+	return r
+}
+
+// Parent call ID.
+func (r ApiGetDialogsHistoryRequest) ParentCallId(parentCallId string) ApiGetDialogsHistoryRequest {
+	r.parentCallId = &parentCallId
+	return r
+}
+
+// Child call ID.
+func (r ApiGetDialogsHistoryRequest) ChildCallId(childCallId string) ApiGetDialogsHistoryRequest {
+	r.childCallId = &childCallId
+	return r
+}
+
+// Date and time for when the dialog has been created. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetDialogsHistoryRequest) StartTimeAfter(startTimeAfter Time) ApiGetDialogsHistoryRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Date and time for when the dialog has been finished. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS+ZZZZ&#x60;.
+func (r ApiGetDialogsHistoryRequest) EndTimeBefore(endTimeBefore Time) ApiGetDialogsHistoryRequest {
+	r.endTimeBefore = &endTimeBefore
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetDialogsHistoryRequest) Page(page int32) ApiGetDialogsHistoryRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetDialogsHistoryRequest) Size(size int32) ApiGetDialogsHistoryRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetDialogsHistoryRequest) Execute() (*DialogLogPage, *http.Response, error) {
+	return r.ApiService.GetDialogsHistoryExecute(r)
+}
+
+/*
+GetDialogsHistory Get dialogs history
+
+Get dialogs history with pagination. Dialogs history retention period is 5 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetDialogsHistoryRequest
+*/
+func (a *CallsAPIService) GetDialogsHistory(ctx context.Context) ApiGetDialogsHistoryRequest {
+	return ApiGetDialogsHistoryRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogLogPage
+func (a *CallsAPIService) GetDialogsHistoryExecute(r ApiGetDialogsHistoryRequest) (*DialogLogPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogLogPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetDialogsHistory")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/history"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.state != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "state", r.state, "form", "")
+	}
+	if r.parentCallId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "parentCallId", r.parentCallId, "form", "")
+	}
+	if r.childCallId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "childCallId", r.childCallId, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.endTimeBefore != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endTimeBefore", r.endTimeBefore, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDialogsRecordingsRequest struct {
+	ctx                    context.Context
+	ApiService             *CallsAPIService
+	dialogId               *string
+	callsConfigurationId   *string
+	applicationId          *string
+	entityId               *string
+	callId                 *string
+	callEndpointType       *CallEndpointType
+	callEndpointIdentifier *string
+	startTimeAfter         *Time
+	endTimeBefore          *Time
+	composition            *bool
+	location               *RecordingLocation
+	page                   *int32
+	size                   *int32
+}
+
+// Dialog ID.
+func (r ApiGetDialogsRecordingsRequest) DialogId(dialogId string) ApiGetDialogsRecordingsRequest {
+	r.dialogId = &dialogId
+	return r
+}
+
+// Calls Configuration ID.
+func (r ApiGetDialogsRecordingsRequest) CallsConfigurationId(callsConfigurationId string) ApiGetDialogsRecordingsRequest {
+	r.callsConfigurationId = &callsConfigurationId
+	return r
+}
+
+// Application ID.
+func (r ApiGetDialogsRecordingsRequest) ApplicationId(applicationId string) ApiGetDialogsRecordingsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Entity ID.
+func (r ApiGetDialogsRecordingsRequest) EntityId(entityId string) ApiGetDialogsRecordingsRequest {
+	r.entityId = &entityId
+	return r
+}
+
+// Filter all dialog recordings where call ID was included in the recording.
+func (r ApiGetDialogsRecordingsRequest) CallId(callId string) ApiGetDialogsRecordingsRequest {
+	r.callId = &callId
+	return r
+}
+
+// Filter all dialog recordings where calls with endpoint type were included in the recording.
+func (r ApiGetDialogsRecordingsRequest) CallEndpointType(callEndpointType CallEndpointType) ApiGetDialogsRecordingsRequest {
+	r.callEndpointType = &callEndpointType
+	return r
+}
+
+// Filter all dialog recordings where calls with endpoint identifier were included in the recording.
+func (r ApiGetDialogsRecordingsRequest) CallEndpointIdentifier(callEndpointIdentifier string) ApiGetDialogsRecordingsRequest {
+	r.callEndpointIdentifier = &callEndpointIdentifier
+	return r
+}
+
+// Date and time when the (first) dialog recording started.
+func (r ApiGetDialogsRecordingsRequest) StartTimeAfter(startTimeAfter Time) ApiGetDialogsRecordingsRequest {
+	r.startTimeAfter = &startTimeAfter
+	return r
+}
+
+// Date and time when the (last) dialog recording ended.
+func (r ApiGetDialogsRecordingsRequest) EndTimeBefore(endTimeBefore Time) ApiGetDialogsRecordingsRequest {
+	r.endTimeBefore = &endTimeBefore
+	return r
+}
+
+// Flag indicating whether auto-compose feature was turned on for the recording.
+func (r ApiGetDialogsRecordingsRequest) Composition(composition bool) ApiGetDialogsRecordingsRequest {
+	r.composition = &composition
+	return r
+}
+
+// Recording location.
+func (r ApiGetDialogsRecordingsRequest) Location(location RecordingLocation) ApiGetDialogsRecordingsRequest {
+	r.location = &location
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetDialogsRecordingsRequest) Page(page int32) ApiGetDialogsRecordingsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetDialogsRecordingsRequest) Size(size int32) ApiGetDialogsRecordingsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetDialogsRecordingsRequest) Execute() (*DialogRecordingPage, *http.Response, error) {
+	return r.ApiService.GetDialogsRecordingsExecute(r)
+}
+
+/*
+GetDialogsRecordings Get dialogs recordings
+
+Get the recordings of dialogs with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetDialogsRecordingsRequest
+*/
+func (a *CallsAPIService) GetDialogsRecordings(ctx context.Context) ApiGetDialogsRecordingsRequest {
+	return ApiGetDialogsRecordingsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogRecordingPage
+func (a *CallsAPIService) GetDialogsRecordingsExecute(r ApiGetDialogsRecordingsRequest) (*DialogRecordingPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogRecordingPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetDialogsRecordings")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/recordings/dialogs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.dialogId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "dialogId", r.dialogId, "form", "")
+	}
+	if r.callsConfigurationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callsConfigurationId", r.callsConfigurationId, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.entityId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "entityId", r.entityId, "form", "")
+	}
+	if r.callId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callId", r.callId, "form", "")
+	}
+	if r.callEndpointType != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callEndpointType", r.callEndpointType, "form", "")
+	}
+	if r.callEndpointIdentifier != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "callEndpointIdentifier", r.callEndpointIdentifier, "form", "")
+	}
+	if r.startTimeAfter != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "startTimeAfter", r.startTimeAfter, "form", "")
+	}
+	if r.endTimeBefore != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "endTimeBefore", r.endTimeBefore, "form", "")
+	}
+	if r.composition != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "composition", r.composition, "form", "")
+	}
+	if r.location != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "location", r.location, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetMediaStreamConfigRequest struct {
+	ctx                 context.Context
+	ApiService          *CallsAPIService
+	mediaStreamConfigId string
+}
+
+func (r ApiGetMediaStreamConfigRequest) Execute() (*MediaStreamConfigResponse, *http.Response, error) {
+	return r.ApiService.GetMediaStreamConfigExecute(r)
+}
+
+/*
+GetMediaStreamConfig Get media-stream configuration
+
+Get a single media-stream configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param mediaStreamConfigId Media-stream configuration ID.
+	@return ApiGetMediaStreamConfigRequest
+*/
+func (a *CallsAPIService) GetMediaStreamConfig(ctx context.Context, mediaStreamConfigId string) ApiGetMediaStreamConfigRequest {
+	return ApiGetMediaStreamConfigRequest{
+		ApiService:          a,
+		ctx:                 ctx,
+		mediaStreamConfigId: mediaStreamConfigId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return MediaStreamConfigResponse
+func (a *CallsAPIService) GetMediaStreamConfigExecute(r ApiGetMediaStreamConfigRequest) (*MediaStreamConfigResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *MediaStreamConfigResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetMediaStreamConfig")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/media-stream-configs/{mediaStreamConfigId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"mediaStreamConfigId"+"}", url.PathEscape(parameterValueToString(r.mediaStreamConfigId, "mediaStreamConfigId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetMediaStreamConfigsRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	page       *int32
+	size       *int32
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetMediaStreamConfigsRequest) Page(page int32) ApiGetMediaStreamConfigsRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetMediaStreamConfigsRequest) Size(size int32) ApiGetMediaStreamConfigsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetMediaStreamConfigsRequest) Execute() (*MediaStreamConfigPage, *http.Response, error) {
+	return r.ApiService.GetMediaStreamConfigsExecute(r)
+}
+
+/*
+GetMediaStreamConfigs Get media-stream configs
+
+Get media-stream configs.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetMediaStreamConfigsRequest
+*/
+func (a *CallsAPIService) GetMediaStreamConfigs(ctx context.Context) ApiGetMediaStreamConfigsRequest {
+	return ApiGetMediaStreamConfigsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return MediaStreamConfigPage
+func (a *CallsAPIService) GetMediaStreamConfigsExecute(r ApiGetMediaStreamConfigsRequest) (*MediaStreamConfigPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *MediaStreamConfigPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetMediaStreamConfigs")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/media-stream-configs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetRegionsRequest struct {
+	ctx         context.Context
+	ApiService  *CallsAPIService
+	countryCode *string
+}
+
+// Country code.
+func (r ApiGetRegionsRequest) CountryCode(countryCode string) ApiGetRegionsRequest {
+	r.countryCode = &countryCode
+	return r
+}
+
+func (r ApiGetRegionsRequest) Execute() (*RegionList, *http.Response, error) {
+	return r.ApiService.GetRegionsExecute(r)
+}
+
+/*
+GetRegions Get regions
+
+Get regions with shortcodes you'd need for a SIP trunk address.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetRegionsRequest
+*/
+func (a *CallsAPIService) GetRegions(ctx context.Context) ApiGetRegionsRequest {
+	return ApiGetRegionsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return RegionList
+func (a *CallsAPIService) GetRegionsExecute(r ApiGetRegionsRequest) (*RegionList, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *RegionList
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetRegions")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses/countries/regions"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.countryCode == nil {
+		return localVarReturnValue, nil, reportError("countryCode is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "countryCode", r.countryCode, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSipTrunkRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	sipTrunkId string
+}
+
+func (r ApiGetSipTrunkRequest) Execute() (*SipTrunkResponse, *http.Response, error) {
+	return r.ApiService.GetSipTrunkExecute(r)
+}
+
+/*
+GetSipTrunk Get SIP trunk
+
+Get a single SIP trunk.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkId SIP trunk ID.
+	@return ApiGetSipTrunkRequest
+*/
+func (a *CallsAPIService) GetSipTrunk(ctx context.Context, sipTrunkId string) ApiGetSipTrunkRequest {
+	return ApiGetSipTrunkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		sipTrunkId: sipTrunkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkResponse
+func (a *CallsAPIService) GetSipTrunkExecute(r ApiGetSipTrunkRequest) (*SipTrunkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetSipTrunk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/{sipTrunkId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkId, "sipTrunkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSipTrunkServiceAddressRequest struct {
+	ctx                      context.Context
+	ApiService               *CallsAPIService
+	sipTrunkServiceAddressId string
+}
+
+func (r ApiGetSipTrunkServiceAddressRequest) Execute() (*SipTrunkServiceAddress, *http.Response, error) {
+	return r.ApiService.GetSipTrunkServiceAddressExecute(r)
+}
+
+/*
+GetSipTrunkServiceAddress Get SIP trunk service address
+
+Get SIP trunk service address.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkServiceAddressId SIP trunk service address ID.
+	@return ApiGetSipTrunkServiceAddressRequest
+*/
+func (a *CallsAPIService) GetSipTrunkServiceAddress(ctx context.Context, sipTrunkServiceAddressId string) ApiGetSipTrunkServiceAddressRequest {
+	return ApiGetSipTrunkServiceAddressRequest{
+		ApiService:               a,
+		ctx:                      ctx,
+		sipTrunkServiceAddressId: sipTrunkServiceAddressId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkServiceAddress
+func (a *CallsAPIService) GetSipTrunkServiceAddressExecute(r ApiGetSipTrunkServiceAddressRequest) (*SipTrunkServiceAddress, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkServiceAddress
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetSipTrunkServiceAddress")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses/{sipTrunkServiceAddressId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkServiceAddressId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkServiceAddressId, "sipTrunkServiceAddressId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSipTrunkServiceAddressesRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	page       *int32
+	size       *int32
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetSipTrunkServiceAddressesRequest) Page(page int32) ApiGetSipTrunkServiceAddressesRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetSipTrunkServiceAddressesRequest) Size(size int32) ApiGetSipTrunkServiceAddressesRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetSipTrunkServiceAddressesRequest) Execute() (*SipTrunkServiceAddressPage, *http.Response, error) {
+	return r.ApiService.GetSipTrunkServiceAddressesExecute(r)
+}
+
+/*
+GetSipTrunkServiceAddresses Get SIP trunk service addresses
+
+Get SIP trunk service addresses.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetSipTrunkServiceAddressesRequest
+*/
+func (a *CallsAPIService) GetSipTrunkServiceAddresses(ctx context.Context) ApiGetSipTrunkServiceAddressesRequest {
+	return ApiGetSipTrunkServiceAddressesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkServiceAddressPage
+func (a *CallsAPIService) GetSipTrunkServiceAddressesExecute(r ApiGetSipTrunkServiceAddressesRequest) (*SipTrunkServiceAddressPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkServiceAddressPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetSipTrunkServiceAddresses")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSipTrunkStatusRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	sipTrunkId string
+}
+
+func (r ApiGetSipTrunkStatusRequest) Execute() (*ExtendedSipTrunkStatusResponse, *http.Response, error) {
+	return r.ApiService.GetSipTrunkStatusExecute(r)
+}
+
+/*
+GetSipTrunkStatus Get SIP trunk status
+
+Get a SIP trunk status. Successfully deleted SIP trunk does not have status.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkId Sip Trunk ID.
+	@return ApiGetSipTrunkStatusRequest
+*/
+func (a *CallsAPIService) GetSipTrunkStatus(ctx context.Context, sipTrunkId string) ApiGetSipTrunkStatusRequest {
+	return ApiGetSipTrunkStatusRequest{
+		ApiService: a,
+		ctx:        ctx,
+		sipTrunkId: sipTrunkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ExtendedSipTrunkStatusResponse
+func (a *CallsAPIService) GetSipTrunkStatusExecute(r ApiGetSipTrunkStatusRequest) (*ExtendedSipTrunkStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ExtendedSipTrunkStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetSipTrunkStatus")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/{sipTrunkId}/status"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkId, "sipTrunkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSipTrunksRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	name       *string
+	page       *int32
+	size       *int32
+}
+
+// SIP trunk name.
+func (r ApiGetSipTrunksRequest) Name(name string) ApiGetSipTrunksRequest {
+	r.name = &name
+	return r
+}
+
+// Results page to retrieve (0..N).
+func (r ApiGetSipTrunksRequest) Page(page int32) ApiGetSipTrunksRequest {
+	r.page = &page
+	return r
+}
+
+// Number of records per page.
+func (r ApiGetSipTrunksRequest) Size(size int32) ApiGetSipTrunksRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetSipTrunksRequest) Execute() (*SipTrunkPage, *http.Response, error) {
+	return r.ApiService.GetSipTrunksExecute(r)
+}
+
+/*
+GetSipTrunks Get SIP trunks
+
+Get SIP trunks with pagination.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetSipTrunksRequest
+*/
+func (a *CallsAPIService) GetSipTrunks(ctx context.Context) ApiGetSipTrunksRequest {
+	return ApiGetSipTrunksRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkPage
+func (a *CallsAPIService) GetSipTrunksExecute(r ApiGetSipTrunksRequest) (*SipTrunkPage, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkPage
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.GetSipTrunks")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.name != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "name", r.name, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 20
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiHangupCallRequest struct {
+	ctx           context.Context
+	ApiService    *CallsAPIService
+	callId        string
+	hangupRequest *HangupRequest
+}
+
+func (r ApiHangupCallRequest) HangupRequest(hangupRequest HangupRequest) ApiHangupCallRequest {
+	r.hangupRequest = &hangupRequest
+	return r
+}
+
+func (r ApiHangupCallRequest) Execute() (*Call, *http.Response, error) {
+	return r.ApiService.HangupCallExecute(r)
+}
+
+/*
+HangupCall Hangup
+
+Hang up a call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiHangupCallRequest
+*/
+func (a *CallsAPIService) HangupCall(ctx context.Context, callId string) ApiHangupCallRequest {
+	return ApiHangupCallRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Call
+func (a *CallsAPIService) HangupCallExecute(r ApiHangupCallRequest) (*Call, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Call
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.HangupCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/hangup"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.hangupRequest == nil {
+		return localVarReturnValue, nil, reportError("hangupRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.hangupRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiHangupConferenceRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+}
+
+func (r ApiHangupConferenceRequest) Execute() (*Conference, *http.Response, error) {
+	return r.ApiService.HangupConferenceExecute(r)
+}
+
+/*
+HangupConference Hangup conference
+
+Hang up a conference. This action also hangs up all calls in the conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiHangupConferenceRequest
+*/
+func (a *CallsAPIService) HangupConference(ctx context.Context, conferenceId string) ApiHangupConferenceRequest {
+	return ApiHangupConferenceRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return Conference
+func (a *CallsAPIService) HangupConferenceExecute(r ApiHangupConferenceRequest) (*Conference, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *Conference
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.HangupConference")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/hangup"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiHangupDialogRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	dialogId   string
+}
+
+func (r ApiHangupDialogRequest) Execute() (*DialogResponse, *http.Response, error) {
+	return r.ApiService.HangupDialogExecute(r)
+}
+
+/*
+HangupDialog Hangup dialog
+
+Hang up a dialog. This action also hangs up all calls in the dialog.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param dialogId Dialog ID.
+	@return ApiHangupDialogRequest
+*/
+func (a *CallsAPIService) HangupDialog(ctx context.Context, dialogId string) ApiHangupDialogRequest {
+	return ApiHangupDialogRequest{
+		ApiService: a,
+		ctx:        ctx,
+		dialogId:   dialogId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DialogResponse
+func (a *CallsAPIService) HangupDialogExecute(r ApiHangupDialogRequest) (*DialogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DialogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.HangupDialog")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/dialogs/{dialogId}/hangup"
+	localVarPath = strings.Replace(localVarPath, "{"+"dialogId"+"}", url.PathEscape(parameterValueToString(r.dialogId, "dialogId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiPauseBulkRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	bulkId     string
+}
+
+func (r ApiPauseBulkRequest) Execute() (*BulkStatus, *http.Response, error) {
+	return r.ApiService.PauseBulkExecute(r)
+}
+
+/*
+PauseBulk Pause
+
+Pause a bulk. Bulk can be paused if it is in progress and was created with scheduling options.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param bulkId Bulk ID.
+	@return ApiPauseBulkRequest
+*/
+func (a *CallsAPIService) PauseBulk(ctx context.Context, bulkId string) ApiPauseBulkRequest {
+	return ApiPauseBulkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		bulkId:     bulkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatus
+func (a *CallsAPIService) PauseBulkExecute(r ApiPauseBulkRequest) (*BulkStatus, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatus
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.PauseBulk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/bulks/{bulkId}/pause"
+	localVarPath = strings.Replace(localVarPath, "{"+"bulkId"+"}", url.PathEscape(parameterValueToString(r.bulkId, "bulkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiPreAnswerCallRequest struct {
+	ctx              context.Context
+	ApiService       *CallsAPIService
+	callId           string
+	preAnswerRequest *PreAnswerRequest
+}
+
+func (r ApiPreAnswerCallRequest) PreAnswerRequest(preAnswerRequest PreAnswerRequest) ApiPreAnswerCallRequest {
+	r.preAnswerRequest = &preAnswerRequest
+	return r
+}
+
+func (r ApiPreAnswerCallRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.PreAnswerCallExecute(r)
+}
+
+/*
+PreAnswerCall Pre-answer
+
+Pre-answer a call to handle early media.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiPreAnswerCallRequest
+*/
+func (a *CallsAPIService) PreAnswerCall(ctx context.Context, callId string) ApiPreAnswerCallRequest {
+	return ApiPreAnswerCallRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) PreAnswerCallExecute(r ApiPreAnswerCallRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.PreAnswerCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/pre-answer"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.preAnswerRequest == nil {
+		return localVarReturnValue, nil, reportError("preAnswerRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.preAnswerRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiRemoveConferenceCallRequest struct {
+	ctx          context.Context
+	ApiService   *CallsAPIService
+	conferenceId string
+	callId       string
+}
+
+func (r ApiRemoveConferenceCallRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.RemoveConferenceCallExecute(r)
+}
+
+/*
+RemoveConferenceCall Remove call
+
+Remove a call from a conference. The call stays active after this action.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@param callId Call ID.
+	@return ApiRemoveConferenceCallRequest
+*/
+func (a *CallsAPIService) RemoveConferenceCall(ctx context.Context, conferenceId string, callId string) ApiRemoveConferenceCallRequest {
+	return ApiRemoveConferenceCallRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+		callId:       callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) RemoveConferenceCallExecute(r ApiRemoveConferenceCallRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodDelete
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.RemoveConferenceCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/call/{callId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiRescheduleBulkRequest struct {
+	ctx               context.Context
+	ApiService        *CallsAPIService
+	bulkId            string
+	rescheduleRequest *RescheduleRequest
+}
+
+func (r ApiRescheduleBulkRequest) RescheduleRequest(rescheduleRequest RescheduleRequest) ApiRescheduleBulkRequest {
+	r.rescheduleRequest = &rescheduleRequest
+	return r
+}
+
+func (r ApiRescheduleBulkRequest) Execute() (*BulkStatus, *http.Response, error) {
+	return r.ApiService.RescheduleBulkExecute(r)
+}
+
+/*
+RescheduleBulk Reschedule
+
+Reschedule a bulk. Rescheduling is possible only if the bulk was created with scheduling options and has not started yet.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param bulkId Bulk ID.
+	@return ApiRescheduleBulkRequest
+*/
+func (a *CallsAPIService) RescheduleBulk(ctx context.Context, bulkId string) ApiRescheduleBulkRequest {
+	return ApiRescheduleBulkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		bulkId:     bulkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatus
+func (a *CallsAPIService) RescheduleBulkExecute(r ApiRescheduleBulkRequest) (*BulkStatus, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatus
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.RescheduleBulk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/bulks/{bulkId}/reschedule"
+	localVarPath = strings.Replace(localVarPath, "{"+"bulkId"+"}", url.PathEscape(parameterValueToString(r.bulkId, "bulkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.rescheduleRequest == nil {
+		return localVarReturnValue, nil, reportError("rescheduleRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.rescheduleRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiResetSipTrunkPasswordRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	sipTrunkId string
+}
+
+func (r ApiResetSipTrunkPasswordRequest) Execute() (*SipTrunkRegistrationCredentials, *http.Response, error) {
+	return r.ApiService.ResetSipTrunkPasswordExecute(r)
+}
+
+/*
+ResetSipTrunkPassword Reset registered SIP trunk password
+
+Reset password. Applicable only for `REGISTERED` SIP trunks.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkId Sip Trunk ID.
+	@return ApiResetSipTrunkPasswordRequest
+*/
+func (a *CallsAPIService) ResetSipTrunkPassword(ctx context.Context, sipTrunkId string) ApiResetSipTrunkPasswordRequest {
+	return ApiResetSipTrunkPasswordRequest{
+		ApiService: a,
+		ctx:        ctx,
+		sipTrunkId: sipTrunkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkRegistrationCredentials
+func (a *CallsAPIService) ResetSipTrunkPasswordExecute(r ApiResetSipTrunkPasswordRequest) (*SipTrunkRegistrationCredentials, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkRegistrationCredentials
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ResetSipTrunkPassword")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/{sipTrunkId}/reset-password"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkId, "sipTrunkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiResumeBulkRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	bulkId     string
+}
+
+func (r ApiResumeBulkRequest) Execute() (*BulkStatus, *http.Response, error) {
+	return r.ApiService.ResumeBulkExecute(r)
+}
+
+/*
+ResumeBulk Resume
+
+Resume a bulk. Bulk can be resumed if it is paused and was created with scheduling options.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param bulkId Bulk ID.
+	@return ApiResumeBulkRequest
+*/
+func (a *CallsAPIService) ResumeBulk(ctx context.Context, bulkId string) ApiResumeBulkRequest {
+	return ApiResumeBulkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		bulkId:     bulkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatus
+func (a *CallsAPIService) ResumeBulkExecute(r ApiResumeBulkRequest) (*BulkStatus, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatus
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.ResumeBulk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/bulks/{bulkId}/resume"
+	localVarPath = strings.Replace(localVarPath, "{"+"bulkId"+"}", url.PathEscape(parameterValueToString(r.bulkId, "bulkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSendRingingRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+}
+
+func (r ApiSendRingingRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.SendRingingExecute(r)
+}
+
+/*
+SendRinging Send ringing
+
+Send SIP ringtone to an unanswered inbound call.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiSendRingingRequest
+*/
+func (a *CallsAPIService) SendRinging(ctx context.Context, callId string) ApiSendRingingRequest {
+	return ApiSendRingingRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) SendRingingExecute(r ApiSendRingingRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.SendRinging")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/send-ringing"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSetSipTrunkStatusRequest struct {
+	ctx                   context.Context
+	ApiService            *CallsAPIService
+	sipTrunkId            string
+	sipTrunkStatusRequest *SipTrunkStatusRequest
+}
+
+func (r ApiSetSipTrunkStatusRequest) SipTrunkStatusRequest(sipTrunkStatusRequest SipTrunkStatusRequest) ApiSetSipTrunkStatusRequest {
+	r.sipTrunkStatusRequest = &sipTrunkStatusRequest
+	return r
+}
+
+func (r ApiSetSipTrunkStatusRequest) Execute() (*SipTrunkStatusResponse, *http.Response, error) {
+	return r.ApiService.SetSipTrunkStatusExecute(r)
+}
+
+/*
+SetSipTrunkStatus Set SIP trunk status
+
+Set a SIP trunk's status.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkId Sip Trunk ID.
+	@return ApiSetSipTrunkStatusRequest
+*/
+func (a *CallsAPIService) SetSipTrunkStatus(ctx context.Context, sipTrunkId string) ApiSetSipTrunkStatusRequest {
+	return ApiSetSipTrunkStatusRequest{
+		ApiService: a,
+		ctx:        ctx,
+		sipTrunkId: sipTrunkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkStatusResponse
+func (a *CallsAPIService) SetSipTrunkStatusExecute(r ApiSetSipTrunkStatusRequest) (*SipTrunkStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.SetSipTrunkStatus")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/{sipTrunkId}/status"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkId, "sipTrunkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.sipTrunkStatusRequest == nil {
+		return localVarReturnValue, nil, reportError("sipTrunkStatusRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.sipTrunkStatusRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiStartMediaStreamRequest struct {
+	ctx                     context.Context
+	ApiService              *CallsAPIService
+	callId                  string
+	startMediaStreamRequest *StartMediaStreamRequest
+}
+
+func (r ApiStartMediaStreamRequest) StartMediaStreamRequest(startMediaStreamRequest StartMediaStreamRequest) ApiStartMediaStreamRequest {
+	r.startMediaStreamRequest = &startMediaStreamRequest
+	return r
+}
+
+func (r ApiStartMediaStreamRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.StartMediaStreamExecute(r)
+}
+
+/*
+StartMediaStream Start streaming media
+
+Start streaming media.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiStartMediaStreamRequest
+*/
+func (a *CallsAPIService) StartMediaStream(ctx context.Context, callId string) ApiStartMediaStreamRequest {
+	return ApiStartMediaStreamRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) StartMediaStreamExecute(r ApiStartMediaStreamRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.StartMediaStream")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/start-media-stream"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.startMediaStreamRequest == nil {
+		return localVarReturnValue, nil, reportError("startMediaStreamRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.startMediaStreamRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiStopMediaStreamRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	callId     string
+}
+
+func (r ApiStopMediaStreamRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.StopMediaStreamExecute(r)
+}
+
+/*
+StopMediaStream Stop streaming media
+
+Stop streaming media.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callId Call ID.
+	@return ApiStopMediaStreamRequest
+*/
+func (a *CallsAPIService) StopMediaStream(ctx context.Context, callId string) ApiStopMediaStreamRequest {
+	return ApiStopMediaStreamRequest{
+		ApiService: a,
+		ctx:        ctx,
+		callId:     callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) StopMediaStreamExecute(r ApiStopMediaStreamRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.StopMediaStream")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/calls/{callId}/stop-media-stream"
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateCallsConfigurationRequest struct {
+	ctx                             context.Context
+	ApiService                      *CallsAPIService
+	callsConfigurationId            string
+	callsConfigurationUpdateRequest *CallsConfigurationUpdateRequest
+}
+
+func (r ApiUpdateCallsConfigurationRequest) CallsConfigurationUpdateRequest(callsConfigurationUpdateRequest CallsConfigurationUpdateRequest) ApiUpdateCallsConfigurationRequest {
+	r.callsConfigurationUpdateRequest = &callsConfigurationUpdateRequest
+	return r
+}
+
+func (r ApiUpdateCallsConfigurationRequest) Execute() (*CallsConfigurationResponse, *http.Response, error) {
+	return r.ApiService.UpdateCallsConfigurationExecute(r)
+}
+
+/*
+UpdateCallsConfiguration Update calls configuration
+
+Update calls configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param callsConfigurationId Calls configuration ID.
+	@return ApiUpdateCallsConfigurationRequest
+*/
+func (a *CallsAPIService) UpdateCallsConfiguration(ctx context.Context, callsConfigurationId string) ApiUpdateCallsConfigurationRequest {
+	return ApiUpdateCallsConfigurationRequest{
+		ApiService:           a,
+		ctx:                  ctx,
+		callsConfigurationId: callsConfigurationId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return CallsConfigurationResponse
+func (a *CallsAPIService) UpdateCallsConfigurationExecute(r ApiUpdateCallsConfigurationRequest) (*CallsConfigurationResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *CallsConfigurationResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UpdateCallsConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/configurations/{callsConfigurationId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"callsConfigurationId"+"}", url.PathEscape(parameterValueToString(r.callsConfigurationId, "callsConfigurationId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.callsConfigurationUpdateRequest == nil {
+		return localVarReturnValue, nil, reportError("callsConfigurationUpdateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.callsConfigurationUpdateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateConferenceRequest struct {
+	ctx           context.Context
+	ApiService    *CallsAPIService
+	conferenceId  string
+	updateRequest *UpdateRequest
+}
+
+func (r ApiUpdateConferenceRequest) UpdateRequest(updateRequest UpdateRequest) ApiUpdateConferenceRequest {
+	r.updateRequest = &updateRequest
+	return r
+}
+
+func (r ApiUpdateConferenceRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.UpdateConferenceExecute(r)
+}
+
+/*
+UpdateConference Update all calls
+
+Update all calls in a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@return ApiUpdateConferenceRequest
+*/
+func (a *CallsAPIService) UpdateConference(ctx context.Context, conferenceId string) ApiUpdateConferenceRequest {
+	return ApiUpdateConferenceRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) UpdateConferenceExecute(r ApiUpdateConferenceRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPatch
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UpdateConference")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.updateRequest == nil {
+		return localVarReturnValue, nil, reportError("updateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.updateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateConferenceCallRequest struct {
+	ctx           context.Context
+	ApiService    *CallsAPIService
+	conferenceId  string
+	callId        string
+	updateRequest *UpdateRequest
+}
+
+func (r ApiUpdateConferenceCallRequest) UpdateRequest(updateRequest UpdateRequest) ApiUpdateConferenceCallRequest {
+	r.updateRequest = &updateRequest
+	return r
+}
+
+func (r ApiUpdateConferenceCallRequest) Execute() (*ActionResponse, *http.Response, error) {
+	return r.ApiService.UpdateConferenceCallExecute(r)
+}
+
+/*
+UpdateConferenceCall Update call
+
+Update a call in a conference.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param conferenceId Conference ID.
+	@param callId Call ID.
+	@return ApiUpdateConferenceCallRequest
+*/
+func (a *CallsAPIService) UpdateConferenceCall(ctx context.Context, conferenceId string, callId string) ApiUpdateConferenceCallRequest {
+	return ApiUpdateConferenceCallRequest{
+		ApiService:   a,
+		ctx:          ctx,
+		conferenceId: conferenceId,
+		callId:       callId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ActionResponse
+func (a *CallsAPIService) UpdateConferenceCallExecute(r ApiUpdateConferenceCallRequest) (*ActionResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPatch
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ActionResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UpdateConferenceCall")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/conferences/{conferenceId}/call/{callId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"conferenceId"+"}", url.PathEscape(parameterValueToString(r.conferenceId, "conferenceId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"callId"+"}", url.PathEscape(parameterValueToString(r.callId, "callId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.updateRequest == nil {
+		return localVarReturnValue, nil, reportError("updateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.updateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateMediaStreamConfigRequest struct {
+	ctx                      context.Context
+	ApiService               *CallsAPIService
+	mediaStreamConfigId      string
+	mediaStreamConfigRequest *MediaStreamConfigRequest
+}
+
+func (r ApiUpdateMediaStreamConfigRequest) MediaStreamConfigRequest(mediaStreamConfigRequest MediaStreamConfigRequest) ApiUpdateMediaStreamConfigRequest {
+	r.mediaStreamConfigRequest = &mediaStreamConfigRequest
+	return r
+}
+
+func (r ApiUpdateMediaStreamConfigRequest) Execute() (*MediaStreamConfigResponse, *http.Response, error) {
+	return r.ApiService.UpdateMediaStreamConfigExecute(r)
+}
+
+/*
+UpdateMediaStreamConfig Update a media-stream configuration
+
+Update a media-stream configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param mediaStreamConfigId Media-stream configuration ID.
+	@return ApiUpdateMediaStreamConfigRequest
+*/
+func (a *CallsAPIService) UpdateMediaStreamConfig(ctx context.Context, mediaStreamConfigId string) ApiUpdateMediaStreamConfigRequest {
+	return ApiUpdateMediaStreamConfigRequest{
+		ApiService:          a,
+		ctx:                 ctx,
+		mediaStreamConfigId: mediaStreamConfigId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return MediaStreamConfigResponse
+func (a *CallsAPIService) UpdateMediaStreamConfigExecute(r ApiUpdateMediaStreamConfigRequest) (*MediaStreamConfigResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *MediaStreamConfigResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UpdateMediaStreamConfig")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/media-stream-configs/{mediaStreamConfigId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"mediaStreamConfigId"+"}", url.PathEscape(parameterValueToString(r.mediaStreamConfigId, "mediaStreamConfigId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.mediaStreamConfigRequest == nil {
+		return localVarReturnValue, nil, reportError("mediaStreamConfigRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.mediaStreamConfigRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateSipTrunkRequest struct {
+	ctx             context.Context
+	ApiService      *CallsAPIService
+	sipTrunkId      string
+	sipTrunkRequest *SipTrunkRequest
+}
+
+func (r ApiUpdateSipTrunkRequest) SipTrunkRequest(sipTrunkRequest SipTrunkRequest) ApiUpdateSipTrunkRequest {
+	r.sipTrunkRequest = &sipTrunkRequest
+	return r
+}
+
+func (r ApiUpdateSipTrunkRequest) Execute() (*SipTrunkResponse, *http.Response, error) {
+	return r.ApiService.UpdateSipTrunkExecute(r)
+}
+
+/*
+UpdateSipTrunk Update SIP trunk
+
+Update a SIP trunk. Fields not sent in request body will take default values and overwrite the existing ones. This operation is asynchronous. The SIP trunk will be updated in the background.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkId Sip Trunk ID.
+	@return ApiUpdateSipTrunkRequest
+*/
+func (a *CallsAPIService) UpdateSipTrunk(ctx context.Context, sipTrunkId string) ApiUpdateSipTrunkRequest {
+	return ApiUpdateSipTrunkRequest{
+		ApiService: a,
+		ctx:        ctx,
+		sipTrunkId: sipTrunkId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkResponse
+func (a *CallsAPIService) UpdateSipTrunkExecute(r ApiUpdateSipTrunkRequest) (*SipTrunkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UpdateSipTrunk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/{sipTrunkId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkId, "sipTrunkId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.sipTrunkRequest == nil {
+		return localVarReturnValue, nil, reportError("sipTrunkRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.sipTrunkRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateSipTrunkServiceAddressRequest struct {
+	ctx                           context.Context
+	ApiService                    *CallsAPIService
+	sipTrunkServiceAddressId      string
+	sipTrunkServiceAddressRequest *SipTrunkServiceAddressRequest
+}
+
+func (r ApiUpdateSipTrunkServiceAddressRequest) SipTrunkServiceAddressRequest(sipTrunkServiceAddressRequest SipTrunkServiceAddressRequest) ApiUpdateSipTrunkServiceAddressRequest {
+	r.sipTrunkServiceAddressRequest = &sipTrunkServiceAddressRequest
+	return r
+}
+
+func (r ApiUpdateSipTrunkServiceAddressRequest) Execute() (*SipTrunkServiceAddress, *http.Response, error) {
+	return r.ApiService.UpdateSipTrunkServiceAddressExecute(r)
+}
+
+/*
+UpdateSipTrunkServiceAddress Update SIP trunk service address
+
+Update SIP trunk service address.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param sipTrunkServiceAddressId SIP trunk service address ID.
+	@return ApiUpdateSipTrunkServiceAddressRequest
+*/
+func (a *CallsAPIService) UpdateSipTrunkServiceAddress(ctx context.Context, sipTrunkServiceAddressId string) ApiUpdateSipTrunkServiceAddressRequest {
+	return ApiUpdateSipTrunkServiceAddressRequest{
+		ApiService:               a,
+		ctx:                      ctx,
+		sipTrunkServiceAddressId: sipTrunkServiceAddressId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SipTrunkServiceAddress
+func (a *CallsAPIService) UpdateSipTrunkServiceAddressExecute(r ApiUpdateSipTrunkServiceAddressRequest) (*SipTrunkServiceAddress, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SipTrunkServiceAddress
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UpdateSipTrunkServiceAddress")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/sip-trunks/service-addresses/{sipTrunkServiceAddressId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"sipTrunkServiceAddressId"+"}", url.PathEscape(parameterValueToString(r.sipTrunkServiceAddressId, "sipTrunkServiceAddressId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.sipTrunkServiceAddressRequest == nil {
+		return localVarReturnValue, nil, reportError("sipTrunkServiceAddressRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.sipTrunkServiceAddressRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUploadCallsAudioFileRequest struct {
+	ctx        context.Context
+	ApiService *CallsAPIService
+	file       *os.File
+}
+
+func (r ApiUploadCallsAudioFileRequest) File(file *os.File) ApiUploadCallsAudioFileRequest {
+	r.file = file
+	return r
+}
+
+func (r ApiUploadCallsAudioFileRequest) Execute() (*File, *http.Response, error) {
+	return r.ApiService.UploadCallsAudioFileExecute(r)
+}
+
+/*
+UploadCallsAudioFile Upload audio file
+
+Upload an audio file. Uploaded files can be played on calls, dialogs or conferences. The file will be removed if it is not used for 90 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiUploadCallsAudioFileRequest
+*/
+func (a *CallsAPIService) UploadCallsAudioFile(ctx context.Context) ApiUploadCallsAudioFileRequest {
+	return ApiUploadCallsAudioFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return File
+func (a *CallsAPIService) UploadCallsAudioFileExecute(r ApiUploadCallsAudioFileRequest) (*File, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *File
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CallsAPIService.UploadCallsAudioFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/calls/1/files"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.file == nil {
+		return localVarReturnValue, nil, reportError("file is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"multipart/form-data"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	var fileLocalVarFormFileName string
+	var fileLocalVarFileName string
+	var fileLocalVarFileBytes []byte
+
+	fileLocalVarFormFileName = "file"
+	fileLocalVarFile := r.file
+
+	if fileLocalVarFile != nil {
+		fbs, _ := io.ReadAll(fileLocalVarFile)
+
+		fileLocalVarFileBytes = fbs
+		fileLocalVarFileName = fileLocalVarFile.Name()
+		fileLocalVarFile.Close()
+		formFiles = append(formFiles, formFile{fileBytes: fileLocalVarFileBytes, fileName: fileLocalVarFileName, formFileName: fileLocalVarFormFileName})
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/click_to_call_api.go b/pkg/infobip/api/click_to_call_api.go
new file mode 100644
index 0000000..2462fea
--- /dev/null
+++ b/pkg/infobip/api/click_to_call_api.go
@@ -0,0 +1,229 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+)
+
+// ClickToCallAPIService ClickToCallAPI service
+type ClickToCallAPIService service
+
+// ApiClickToCallAPIRequest[T any] interface
+type ClickToCallAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiSendClickToCallMessageRequest struct {
+	ctx                       context.Context
+	ApiService                *ClickToCallAPIService
+	clickToCallMessageRequest *ClickToCallMessageRequest
+}
+
+func (r ApiSendClickToCallMessageRequest) ClickToCallMessageRequest(clickToCallMessageRequest ClickToCallMessageRequest) ApiSendClickToCallMessageRequest {
+	r.clickToCallMessageRequest = &clickToCallMessageRequest
+	return r
+}
+
+func (r ApiSendClickToCallMessageRequest) Execute() (*StandardVoiceResponse, *http.Response, error) {
+	return r.ApiService.SendClickToCallMessageExecute(r)
+}
+
+/*
+SendClickToCallMessage Send click-to-call message
+
+This method allows you to send click-to-call voice messages.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSendClickToCallMessageRequest
+*/
+func (a *ClickToCallAPIService) SendClickToCallMessage(ctx context.Context) ApiSendClickToCallMessageRequest {
+	return ApiSendClickToCallMessageRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return StandardVoiceResponse
+func (a *ClickToCallAPIService) SendClickToCallMessageExecute(r ApiSendClickToCallMessageRequest) (*StandardVoiceResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *StandardVoiceResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ClickToCallAPIService.SendClickToCallMessage")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ctc/1/send"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.clickToCallMessageRequest == nil {
+		return localVarReturnValue, nil, reportError("clickToCallMessageRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.clickToCallMessageRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v StandardVoiceResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/client.go b/pkg/infobip/api/client.go
index 5648204..d245ba2 100644
--- a/pkg/infobip/api/client.go
+++ b/pkg/infobip/api/client.go
@@ -52,9 +52,25 @@ type APIClient struct {
 
 	MessagesAPI *MessagesAPIService
 
+	CallRoutingAPI *CallRoutingAPIService
+
 	SmsAPI *SmsAPIService
 
+	EmailAPI *EmailAPIService
+
+	CallsAPI *CallsAPIService
+
+	FormsAPI *FormsAPIService
+
 	TfaAPI *TfaAPIService
+
+	ClickToCallAPI *ClickToCallAPIService
+
+	NumberMaskingAPI *NumberMaskingAPIService
+
+	FlowAPI *FlowAPIService
+
+	VoiceAPI *VoiceAPIService
 }
 
 type service struct {
@@ -74,8 +90,16 @@ func NewAPIClient(cfg *Configuration) *APIClient {
 
 	// API Services
 	c.MessagesAPI = (*MessagesAPIService)(&c.common)
+	c.CallRoutingAPI = (*CallRoutingAPIService)(&c.common)
 	c.SmsAPI = (*SmsAPIService)(&c.common)
+	c.EmailAPI = (*EmailAPIService)(&c.common)
+	c.CallsAPI = (*CallsAPIService)(&c.common)
+	c.FormsAPI = (*FormsAPIService)(&c.common)
 	c.TfaAPI = (*TfaAPIService)(&c.common)
+	c.ClickToCallAPI = (*ClickToCallAPIService)(&c.common)
+	c.NumberMaskingAPI = (*NumberMaskingAPIService)(&c.common)
+	c.FlowAPI = (*FlowAPIService)(&c.common)
+	c.VoiceAPI = (*VoiceAPIService)(&c.common)
 
 	return c
 }
diff --git a/pkg/infobip/api/email_api.go b/pkg/infobip/api/email_api.go
new file mode 100644
index 0000000..45deb0a
--- /dev/null
+++ b/pkg/infobip/api/email_api.go
@@ -0,0 +1,6272 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"os"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/email"
+)
+
+// EmailAPIService EmailAPI service
+type EmailAPIService service
+
+// ApiEmailAPIRequest[T any] interface
+type EmailAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiAddDomainRequest struct {
+	ctx              context.Context
+	ApiService       *EmailAPIService
+	addDomainRequest *AddDomainRequest
+}
+
+func (r ApiAddDomainRequest) AddDomainRequest(addDomainRequest AddDomainRequest) ApiAddDomainRequest {
+	r.addDomainRequest = &addDomainRequest
+	return r
+}
+
+func (r ApiAddDomainRequest) Execute() (*DomainResponse, *http.Response, error) {
+	return r.ApiService.AddDomainExecute(r)
+}
+
+/*
+AddDomain Add new domain
+
+This method allows you to add new domains with a limit to create a maximum of 1000 domains in a day.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiAddDomainRequest
+*/
+func (a *EmailAPIService) AddDomain(ctx context.Context) ApiAddDomainRequest {
+	return ApiAddDomainRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DomainResponse
+func (a *EmailAPIService) AddDomainExecute(r ApiAddDomainRequest) (*DomainResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DomainResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.AddDomain")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.addDomainRequest == nil {
+		return localVarReturnValue, nil, reportError("addDomainRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.addDomainRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 409 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiAddSuppressionsRequest struct {
+	ctx                   context.Context
+	ApiService            *EmailAPIService
+	addSuppressionRequest *AddSuppressionRequest
+}
+
+func (r ApiAddSuppressionsRequest) AddSuppressionRequest(addSuppressionRequest AddSuppressionRequest) ApiAddSuppressionsRequest {
+	r.addSuppressionRequest = &addSuppressionRequest
+	return r
+}
+
+func (r ApiAddSuppressionsRequest) Execute() (*http.Response, error) {
+	return r.ApiService.AddSuppressionsExecute(r)
+}
+
+/*
+AddSuppressions Add suppressions
+
+This method allows you to add email addresses to the suppression list. It accepts suppression requests, saves them asynchronously, and automatically ignores any duplicate entries.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiAddSuppressionsRequest
+*/
+func (a *EmailAPIService) AddSuppressions(ctx context.Context) ApiAddSuppressionsRequest {
+	return ApiAddSuppressionsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) AddSuppressionsExecute(r ApiAddSuppressionsRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodPost
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.AddSuppressions")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/suppressions"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.addSuppressionRequest == nil {
+		return nil, reportError("addSuppressionRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.addSuppressionRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiAssignIpToPoolRequest struct {
+	ctx                   context.Context
+	ApiService            *EmailAPIService
+	poolId                string
+	ipPoolAssignIpRequest *IpPoolAssignIpRequest
+}
+
+func (r ApiAssignIpToPoolRequest) IpPoolAssignIpRequest(ipPoolAssignIpRequest IpPoolAssignIpRequest) ApiAssignIpToPoolRequest {
+	r.ipPoolAssignIpRequest = &ipPoolAssignIpRequest
+	return r
+}
+
+func (r ApiAssignIpToPoolRequest) Execute() (*http.Response, error) {
+	return r.ApiService.AssignIpToPoolExecute(r)
+}
+
+/*
+AssignIpToPool Assign IP to pool
+
+Assign provided dedicated IP to the provided IP pool.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param poolId IP pool identifier.
+	@return ApiAssignIpToPoolRequest
+*/
+func (a *EmailAPIService) AssignIpToPool(ctx context.Context, poolId string) ApiAssignIpToPoolRequest {
+	return ApiAssignIpToPoolRequest{
+		ApiService: a,
+		ctx:        ctx,
+		poolId:     poolId,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) AssignIpToPoolExecute(r ApiAssignIpToPoolRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodPost
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.AssignIpToPool")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools/{poolId}/ips"
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.ipPoolAssignIpRequest == nil {
+		return nil, reportError("ipPoolAssignIpRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.ipPoolAssignIpRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiAssignPoolToDomainRequest struct {
+	ctx                       context.Context
+	ApiService                *EmailAPIService
+	domainId                  int64
+	domainIpPoolAssignRequest *DomainIpPoolAssignRequest
+}
+
+func (r ApiAssignPoolToDomainRequest) DomainIpPoolAssignRequest(domainIpPoolAssignRequest DomainIpPoolAssignRequest) ApiAssignPoolToDomainRequest {
+	r.domainIpPoolAssignRequest = &domainIpPoolAssignRequest
+	return r
+}
+
+func (r ApiAssignPoolToDomainRequest) Execute() (*http.Response, error) {
+	return r.ApiService.AssignPoolToDomainExecute(r)
+}
+
+/*
+AssignPoolToDomain Assign IP pool to domain
+
+Assign an IP pool to the provided domain.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainId Domain identifier.
+	@return ApiAssignPoolToDomainRequest
+*/
+func (a *EmailAPIService) AssignPoolToDomain(ctx context.Context, domainId int64) ApiAssignPoolToDomainRequest {
+	return ApiAssignPoolToDomainRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainId:   domainId,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) AssignPoolToDomainExecute(r ApiAssignPoolToDomainRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodPost
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.AssignPoolToDomain")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/domains/{domainId}/pools"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainId"+"}", url.PathEscape(parameterValueToString(r.domainId, "domainId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.domainId < 1 {
+		return nil, reportError("domainId must be greater than 1")
+	}
+	if r.domainIpPoolAssignRequest == nil {
+		return nil, reportError("domainIpPoolAssignRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.domainIpPoolAssignRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiCreateIpPoolRequest struct {
+	ctx                 context.Context
+	ApiService          *EmailAPIService
+	ipPoolCreateRequest *IpPoolCreateRequest
+}
+
+func (r ApiCreateIpPoolRequest) IpPoolCreateRequest(ipPoolCreateRequest IpPoolCreateRequest) ApiCreateIpPoolRequest {
+	r.ipPoolCreateRequest = &ipPoolCreateRequest
+	return r
+}
+
+func (r ApiCreateIpPoolRequest) Execute() (*IpPoolResponse, *http.Response, error) {
+	return r.ApiService.CreateIpPoolExecute(r)
+}
+
+/*
+CreateIpPool Create IP pool
+
+Create a new IP pool.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateIpPoolRequest
+*/
+func (a *EmailAPIService) CreateIpPool(ctx context.Context) ApiCreateIpPoolRequest {
+	return ApiCreateIpPoolRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return IpPoolResponse
+func (a *EmailAPIService) CreateIpPoolExecute(r ApiCreateIpPoolRequest) (*IpPoolResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *IpPoolResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.CreateIpPool")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.ipPoolCreateRequest == nil {
+		return localVarReturnValue, nil, reportError("ipPoolCreateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.ipPoolCreateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteDomainRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	domainName string
+}
+
+func (r ApiDeleteDomainRequest) Execute() (*http.Response, error) {
+	return r.ApiService.DeleteDomainExecute(r)
+}
+
+/*
+DeleteDomain Delete existing domain
+
+This method allows you to delete an existing domain.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainName Domain name which needs to be deleted.
+	@return ApiDeleteDomainRequest
+*/
+func (a *EmailAPIService) DeleteDomain(ctx context.Context, domainName string) ApiDeleteDomainRequest {
+	return ApiDeleteDomainRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainName: domainName,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) DeleteDomainExecute(r ApiDeleteDomainRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.DeleteDomain")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains/{domainName}"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainName"+"}", url.PathEscape(parameterValueToString(r.domainName, "domainName")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiDeleteIpPoolRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	poolId     string
+}
+
+func (r ApiDeleteIpPoolRequest) Execute() (*http.Response, error) {
+	return r.ApiService.DeleteIpPoolExecute(r)
+}
+
+/*
+DeleteIpPool Delete IP pool
+
+Delete provided IP pool. Deleting an IP pool also deletes any assigned IPs and any assignments to domains.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param poolId IP pool identifier.
+	@return ApiDeleteIpPoolRequest
+*/
+func (a *EmailAPIService) DeleteIpPool(ctx context.Context, poolId string) ApiDeleteIpPoolRequest {
+	return ApiDeleteIpPoolRequest{
+		ApiService: a,
+		ctx:        ctx,
+		poolId:     poolId,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) DeleteIpPoolExecute(r ApiDeleteIpPoolRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.DeleteIpPool")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools/{poolId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiDeleteSuppressionsRequest struct {
+	ctx                      context.Context
+	ApiService               *EmailAPIService
+	deleteSuppressionRequest *DeleteSuppressionRequest
+}
+
+func (r ApiDeleteSuppressionsRequest) DeleteSuppressionRequest(deleteSuppressionRequest DeleteSuppressionRequest) ApiDeleteSuppressionsRequest {
+	r.deleteSuppressionRequest = &deleteSuppressionRequest
+	return r
+}
+
+func (r ApiDeleteSuppressionsRequest) Execute() (*http.Response, error) {
+	return r.ApiService.DeleteSuppressionsExecute(r)
+}
+
+/*
+DeleteSuppressions Delete suppressions
+
+This method allows you to delete email addresses from the suppression list. It accepts delete suppression requests and asynchronously deletes them.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiDeleteSuppressionsRequest
+*/
+func (a *EmailAPIService) DeleteSuppressions(ctx context.Context) ApiDeleteSuppressionsRequest {
+	return ApiDeleteSuppressionsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) DeleteSuppressionsExecute(r ApiDeleteSuppressionsRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.DeleteSuppressions")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/suppressions"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.deleteSuppressionRequest == nil {
+		return nil, reportError("deleteSuppressionRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.deleteSuppressionRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiGetAllDomainsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	size       *int32
+	page       *int32
+}
+
+// Maximum number of domains to be viewed per page. Default value is 10 with a maximum of 20 records per page.
+func (r ApiGetAllDomainsRequest) Size(size int32) ApiGetAllDomainsRequest {
+	r.size = &size
+	return r
+}
+
+// Page number you want to see. Default is 0.
+func (r ApiGetAllDomainsRequest) Page(page int32) ApiGetAllDomainsRequest {
+	r.page = &page
+	return r
+}
+
+func (r ApiGetAllDomainsRequest) Execute() (*AllDomainsResponse, *http.Response, error) {
+	return r.ApiService.GetAllDomainsExecute(r)
+}
+
+/*
+GetAllDomains Get all domains for the account
+
+This API is to get all domain associated with the account. It also provides details of the retrieved domain like the DNS records, Tracking details, Active/Blocked status,etc.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetAllDomainsRequest
+*/
+func (a *EmailAPIService) GetAllDomains(ctx context.Context) ApiGetAllDomainsRequest {
+	return ApiGetAllDomainsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return AllDomainsResponse
+func (a *EmailAPIService) GetAllDomainsExecute(r ApiGetAllDomainsRequest) (*AllDomainsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *AllDomainsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetAllDomains")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 10
+		r.size = &defaultValue
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetAllIpsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+}
+
+func (r ApiGetAllIpsRequest) Execute() ([]IpResponse, *http.Response, error) {
+	return r.ApiService.GetAllIpsExecute(r)
+}
+
+/*
+GetAllIps Get IPs
+
+Returns all the dedicated IP addresses owned by this account.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetAllIpsRequest
+*/
+func (a *EmailAPIService) GetAllIps(ctx context.Context) ApiGetAllIpsRequest {
+	return ApiGetAllIpsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return []IpResponse
+func (a *EmailAPIService) GetAllIpsExecute(r ApiGetAllIpsRequest) ([]IpResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue []IpResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetAllIps")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/ips"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDomainDetailsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	domainName string
+}
+
+func (r ApiGetDomainDetailsRequest) Execute() (*DomainResponse, *http.Response, error) {
+	return r.ApiService.GetDomainDetailsExecute(r)
+}
+
+/*
+GetDomainDetails Get domain details
+
+This API provides with the details of the domain like the DNS records, Tracking details, Active/Blocked status,etc.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainName Domain for which the details need to be viewed.
+	@return ApiGetDomainDetailsRequest
+*/
+func (a *EmailAPIService) GetDomainDetails(ctx context.Context, domainName string) ApiGetDomainDetailsRequest {
+	return ApiGetDomainDetailsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainName: domainName,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DomainResponse
+func (a *EmailAPIService) GetDomainDetailsExecute(r ApiGetDomainDetailsRequest) (*DomainResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DomainResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetDomainDetails")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains/{domainName}"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainName"+"}", url.PathEscape(parameterValueToString(r.domainName, "domainName")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetDomainsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	page       *int32
+	size       *int32
+}
+
+// Requested page number.
+func (r ApiGetDomainsRequest) Page(page int32) ApiGetDomainsRequest {
+	r.page = &page
+	return r
+}
+
+// Requested page size.
+func (r ApiGetDomainsRequest) Size(size int32) ApiGetDomainsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetDomainsRequest) Execute() (*DomainInfoPageResponse, *http.Response, error) {
+	return r.ApiService.GetDomainsExecute(r)
+}
+
+/*
+GetDomains Get suppression domains
+
+This method allows you to get domains that can be managed for suppressions and are either owned or have granted permissions.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetDomainsRequest
+*/
+func (a *EmailAPIService) GetDomains(ctx context.Context) ApiGetDomainsRequest {
+	return ApiGetDomainsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DomainInfoPageResponse
+func (a *EmailAPIService) GetDomainsExecute(r ApiGetDomainsRequest) (*DomainInfoPageResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DomainInfoPageResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetDomains")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/suppressions/domains"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 100
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetEmailDeliveryReportsRequest struct {
+	ctx                 context.Context
+	ApiService          *EmailAPIService
+	bulkId              *string
+	messageId           *string
+	campaignReferenceId *string
+	limit               *int32
+	applicationId       *string
+	entityId            *string
+}
+
+// Bulk ID for which report is requested.
+func (r ApiGetEmailDeliveryReportsRequest) BulkId(bulkId string) ApiGetEmailDeliveryReportsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// The ID that uniquely identifies the sent email.
+func (r ApiGetEmailDeliveryReportsRequest) MessageId(messageId string) ApiGetEmailDeliveryReportsRequest {
+	r.messageId = &messageId
+	return r
+}
+
+// The ID that allows you to track, analyze, and show an aggregated overview and the performance of individual campaigns.
+func (r ApiGetEmailDeliveryReportsRequest) CampaignReferenceId(campaignReferenceId string) ApiGetEmailDeliveryReportsRequest {
+	r.campaignReferenceId = &campaignReferenceId
+	return r
+}
+
+// Maximum number of reports.
+func (r ApiGetEmailDeliveryReportsRequest) Limit(limit int32) ApiGetEmailDeliveryReportsRequest {
+	r.limit = &limit
+	return r
+}
+
+// [Application](https://www.infobip.com/docs/cpaas-x/application-and-entity-management#application) identifier used for filtering.
+func (r ApiGetEmailDeliveryReportsRequest) ApplicationId(applicationId string) ApiGetEmailDeliveryReportsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// [Entity](https://www.infobip.com/docs/cpaas-x/application-and-entity-management#entity) identifier used for filtering.
+func (r ApiGetEmailDeliveryReportsRequest) EntityId(entityId string) ApiGetEmailDeliveryReportsRequest {
+	r.entityId = &entityId
+	return r
+}
+
+func (r ApiGetEmailDeliveryReportsRequest) Execute() (*ApiReportsResponse, *http.Response, error) {
+	return r.ApiService.GetEmailDeliveryReportsExecute(r)
+}
+
+/*
+GetEmailDeliveryReports Email delivery reports
+
+Get one-time delivery reports for all sent emails.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetEmailDeliveryReportsRequest
+*/
+func (a *EmailAPIService) GetEmailDeliveryReports(ctx context.Context) ApiGetEmailDeliveryReportsRequest {
+	return ApiGetEmailDeliveryReportsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ApiReportsResponse
+func (a *EmailAPIService) GetEmailDeliveryReportsExecute(r ApiGetEmailDeliveryReportsRequest) (*ApiReportsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ApiReportsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetEmailDeliveryReports")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/reports"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.bulkId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	}
+	if r.messageId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "messageId", r.messageId, "form", "")
+	}
+	if r.campaignReferenceId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "campaignReferenceId", r.campaignReferenceId, "form", "")
+	}
+	if r.limit != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "limit", r.limit, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.entityId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "entityId", r.entityId, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetEmailLogsRequest struct {
+	ctx                 context.Context
+	ApiService          *EmailAPIService
+	messageId           *string
+	from                *string
+	to                  *string
+	bulkId              *string
+	campaignReferenceId *string
+	generalStatus       *string
+	sentSince           *Time
+	sentUntil           *Time
+	limit               *int32
+	applicationId       *string
+	entityId            *string
+}
+
+// The ID that uniquely identifies the sent email.
+func (r ApiGetEmailLogsRequest) MessageId(messageId string) ApiGetEmailLogsRequest {
+	r.messageId = &messageId
+	return r
+}
+
+// From email address.
+func (r ApiGetEmailLogsRequest) From(from string) ApiGetEmailLogsRequest {
+	r.from = &from
+	return r
+}
+
+// The recipient email address.
+func (r ApiGetEmailLogsRequest) To(to string) ApiGetEmailLogsRequest {
+	r.to = &to
+	return r
+}
+
+// Bulk ID that uniquely identifies the request.
+func (r ApiGetEmailLogsRequest) BulkId(bulkId string) ApiGetEmailLogsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// The ID that allows you to track, analyze, and show an aggregated overview and the performance of individual campaigns.
+func (r ApiGetEmailLogsRequest) CampaignReferenceId(campaignReferenceId string) ApiGetEmailLogsRequest {
+	r.campaignReferenceId = &campaignReferenceId
+	return r
+}
+
+// Indicates whether the initiated email has been successfully sent, not sent, delivered, not delivered, waiting for delivery or any other possible status.
+func (r ApiGetEmailLogsRequest) GeneralStatus(generalStatus string) ApiGetEmailLogsRequest {
+	r.generalStatus = &generalStatus
+	return r
+}
+
+// Tells when the email was initiated. Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#x60;.
+func (r ApiGetEmailLogsRequest) SentSince(sentSince Time) ApiGetEmailLogsRequest {
+	r.sentSince = &sentSince
+	return r
+}
+
+// Tells when the email request was processed by Infobip.Has the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#x60;.
+func (r ApiGetEmailLogsRequest) SentUntil(sentUntil Time) ApiGetEmailLogsRequest {
+	r.sentUntil = &sentUntil
+	return r
+}
+
+// Maximum number of logs.
+func (r ApiGetEmailLogsRequest) Limit(limit int32) ApiGetEmailLogsRequest {
+	r.limit = &limit
+	return r
+}
+
+// [Application](https://www.infobip.com/docs/cpaas-x/application-and-entity-management#application) identifier used for filtering.
+func (r ApiGetEmailLogsRequest) ApplicationId(applicationId string) ApiGetEmailLogsRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// [Entity](https://www.infobip.com/docs/cpaas-x/application-and-entity-management#entity) identifier used for filtering.
+func (r ApiGetEmailLogsRequest) EntityId(entityId string) ApiGetEmailLogsRequest {
+	r.entityId = &entityId
+	return r
+}
+
+func (r ApiGetEmailLogsRequest) Execute() (*LogResponse, *http.Response, error) {
+	return r.ApiService.GetEmailLogsExecute(r)
+}
+
+/*
+GetEmailLogs Get email logs
+
+This method allows you to get logs for sent emails using their messageId. Email logs are available for the last 48 hours.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetEmailLogsRequest
+*/
+func (a *EmailAPIService) GetEmailLogs(ctx context.Context) ApiGetEmailLogsRequest {
+	return ApiGetEmailLogsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return LogResponse
+func (a *EmailAPIService) GetEmailLogsExecute(r ApiGetEmailLogsRequest) (*LogResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *LogResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetEmailLogs")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/logs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.messageId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "messageId", r.messageId, "form", "")
+	}
+	if r.from != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "from", r.from, "form", "")
+	}
+	if r.to != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "to", r.to, "form", "")
+	}
+	if r.bulkId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	}
+	if r.campaignReferenceId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "campaignReferenceId", r.campaignReferenceId, "form", "")
+	}
+	if r.generalStatus != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "generalStatus", r.generalStatus, "form", "")
+	}
+	if r.sentSince != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "sentSince", r.sentSince, "form", "")
+	}
+	if r.sentUntil != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "sentUntil", r.sentUntil, "form", "")
+	}
+	if r.limit != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "limit", r.limit, "form", "")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "applicationId", r.applicationId, "form", "")
+	}
+	if r.entityId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "entityId", r.entityId, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetIpDetailsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	ipId       string
+}
+
+func (r ApiGetIpDetailsRequest) Execute() (*IpDetailResponse, *http.Response, error) {
+	return r.ApiService.GetIpDetailsExecute(r)
+}
+
+/*
+GetIpDetails Get IP
+
+Get detailed information about provided dedicated IP.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param ipId Dedicated IP identifier.
+	@return ApiGetIpDetailsRequest
+*/
+func (a *EmailAPIService) GetIpDetails(ctx context.Context, ipId string) ApiGetIpDetailsRequest {
+	return ApiGetIpDetailsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		ipId:       ipId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return IpDetailResponse
+func (a *EmailAPIService) GetIpDetailsExecute(r ApiGetIpDetailsRequest) (*IpDetailResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *IpDetailResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetIpDetails")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/ips/{ipId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"ipId"+"}", url.PathEscape(parameterValueToString(r.ipId, "ipId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetIpDomainRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	domainId   int64
+}
+
+func (r ApiGetIpDomainRequest) Execute() (*IpDomainResponse, *http.Response, error) {
+	return r.ApiService.GetIpDomainExecute(r)
+}
+
+/*
+GetIpDomain Get domain
+
+Get detailed information for provided domain such as assigned pools and their IPs.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainId Domain identifier.
+	@return ApiGetIpDomainRequest
+*/
+func (a *EmailAPIService) GetIpDomain(ctx context.Context, domainId int64) ApiGetIpDomainRequest {
+	return ApiGetIpDomainRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainId:   domainId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return IpDomainResponse
+func (a *EmailAPIService) GetIpDomainExecute(r ApiGetIpDomainRequest) (*IpDomainResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *IpDomainResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetIpDomain")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/domains/{domainId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainId"+"}", url.PathEscape(parameterValueToString(r.domainId, "domainId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.domainId < 1 {
+		return localVarReturnValue, nil, reportError("domainId must be greater than 1")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetIpPoolRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	poolId     string
+}
+
+func (r ApiGetIpPoolRequest) Execute() (*IpPoolDetailResponse, *http.Response, error) {
+	return r.ApiService.GetIpPoolExecute(r)
+}
+
+/*
+GetIpPool Get IP pool
+
+Get detailed information about a provided IP pool.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param poolId IP pool identifier.
+	@return ApiGetIpPoolRequest
+*/
+func (a *EmailAPIService) GetIpPool(ctx context.Context, poolId string) ApiGetIpPoolRequest {
+	return ApiGetIpPoolRequest{
+		ApiService: a,
+		ctx:        ctx,
+		poolId:     poolId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return IpPoolDetailResponse
+func (a *EmailAPIService) GetIpPoolExecute(r ApiGetIpPoolRequest) (*IpPoolDetailResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *IpPoolDetailResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetIpPool")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools/{poolId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetIpPoolsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	name       *string
+}
+
+// IP pool name.
+func (r ApiGetIpPoolsRequest) Name(name string) ApiGetIpPoolsRequest {
+	r.name = &name
+	return r
+}
+
+func (r ApiGetIpPoolsRequest) Execute() ([]IpPoolResponse, *http.Response, error) {
+	return r.ApiService.GetIpPoolsExecute(r)
+}
+
+/*
+GetIpPools Get IP pools
+
+Returns all the pools that are owned (created) by this account.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetIpPoolsRequest
+*/
+func (a *EmailAPIService) GetIpPools(ctx context.Context) ApiGetIpPoolsRequest {
+	return ApiGetIpPoolsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return []IpPoolResponse
+func (a *EmailAPIService) GetIpPoolsExecute(r ApiGetIpPoolsRequest) ([]IpPoolResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue []IpPoolResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetIpPools")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.name != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "name", r.name, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetScheduledEmailStatusesRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	bulkId     *string
+}
+
+// The ID uniquely identifies the sent email request.
+func (r ApiGetScheduledEmailStatusesRequest) BulkId(bulkId string) ApiGetScheduledEmailStatusesRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiGetScheduledEmailStatusesRequest) Execute() (*BulkStatusResponse, *http.Response, error) {
+	return r.ApiService.GetScheduledEmailStatusesExecute(r)
+}
+
+/*
+GetScheduledEmailStatuses Get sent email bulks status
+
+See the status of scheduled email messages.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetScheduledEmailStatusesRequest
+*/
+func (a *EmailAPIService) GetScheduledEmailStatuses(ctx context.Context) ApiGetScheduledEmailStatusesRequest {
+	return ApiGetScheduledEmailStatusesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatusResponse
+func (a *EmailAPIService) GetScheduledEmailStatusesExecute(r ApiGetScheduledEmailStatusesRequest) (*BulkStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetScheduledEmailStatuses")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/bulks/status"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetScheduledEmailsRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	bulkId     *string
+}
+
+// The ID uniquely identifies the sent email request.
+func (r ApiGetScheduledEmailsRequest) BulkId(bulkId string) ApiGetScheduledEmailsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiGetScheduledEmailsRequest) Execute() (*BulkScheduleResponse, *http.Response, error) {
+	return r.ApiService.GetScheduledEmailsExecute(r)
+}
+
+/*
+GetScheduledEmails Get sent email bulks
+
+See the scheduled time of your Email messages.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetScheduledEmailsRequest
+*/
+func (a *EmailAPIService) GetScheduledEmails(ctx context.Context) ApiGetScheduledEmailsRequest {
+	return ApiGetScheduledEmailsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkScheduleResponse
+func (a *EmailAPIService) GetScheduledEmailsExecute(r ApiGetScheduledEmailsRequest) (*BulkScheduleResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkScheduleResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetScheduledEmails")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/bulks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSuppressionsRequest struct {
+	ctx             context.Context
+	ApiService      *EmailAPIService
+	domainName      *string
+	type_           *ApiSuppressionType
+	emailAddress    *string
+	recipientDomain *string
+	createdDateFrom *Time
+	createdDateTo   *Time
+	page            *int32
+	size            *int32
+}
+
+// Name of the requested domain.
+func (r ApiGetSuppressionsRequest) DomainName(domainName string) ApiGetSuppressionsRequest {
+	r.domainName = &domainName
+	return r
+}
+
+// Type of suppression.
+func (r ApiGetSuppressionsRequest) Type_(type_ ApiSuppressionType) ApiGetSuppressionsRequest {
+	r.type_ = &type_
+	return r
+}
+
+// Email address that is suppressed.
+func (r ApiGetSuppressionsRequest) EmailAddress(emailAddress string) ApiGetSuppressionsRequest {
+	r.emailAddress = &emailAddress
+	return r
+}
+
+// Recipient domain that is suppressed.
+func (r ApiGetSuppressionsRequest) RecipientDomain(recipientDomain string) ApiGetSuppressionsRequest {
+	r.recipientDomain = &recipientDomain
+	return r
+}
+
+// Start date for searching suppressions.
+func (r ApiGetSuppressionsRequest) CreatedDateFrom(createdDateFrom Time) ApiGetSuppressionsRequest {
+	r.createdDateFrom = &createdDateFrom
+	return r
+}
+
+// End date for searching suppressions.
+func (r ApiGetSuppressionsRequest) CreatedDateTo(createdDateTo Time) ApiGetSuppressionsRequest {
+	r.createdDateTo = &createdDateTo
+	return r
+}
+
+// Requested page number.
+func (r ApiGetSuppressionsRequest) Page(page int32) ApiGetSuppressionsRequest {
+	r.page = &page
+	return r
+}
+
+// Requested page size.
+func (r ApiGetSuppressionsRequest) Size(size int32) ApiGetSuppressionsRequest {
+	r.size = &size
+	return r
+}
+
+func (r ApiGetSuppressionsRequest) Execute() (*SuppressionInfoPageResponse, *http.Response, error) {
+	return r.ApiService.GetSuppressionsExecute(r)
+}
+
+/*
+GetSuppressions Get suppressions
+
+This method retrieves the suppressions for domains that are owned or have permissions granted.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetSuppressionsRequest
+*/
+func (a *EmailAPIService) GetSuppressions(ctx context.Context) ApiGetSuppressionsRequest {
+	return ApiGetSuppressionsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SuppressionInfoPageResponse
+func (a *EmailAPIService) GetSuppressionsExecute(r ApiGetSuppressionsRequest) (*SuppressionInfoPageResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SuppressionInfoPageResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.GetSuppressions")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/suppressions"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.domainName == nil {
+		return localVarReturnValue, nil, reportError("domainName is required and must be specified")
+	}
+	if r.type_ == nil {
+		return localVarReturnValue, nil, reportError("type_ is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "domainName", r.domainName, "form", "")
+	parameterAddToHeaderOrQuery(localVarQueryParams, "type", r.type_, "form", "")
+	if r.emailAddress != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "emailAddress", r.emailAddress, "form", "")
+	}
+	if r.recipientDomain != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "recipientDomain", r.recipientDomain, "form", "")
+	}
+	if r.createdDateFrom != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "createdDateFrom", r.createdDateFrom, "form", "")
+	}
+	if r.createdDateTo != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "createdDateTo", r.createdDateTo, "form", "")
+	}
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.page = &defaultValue
+	}
+	if r.size != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "size", r.size, "form", "")
+	} else {
+		var defaultValue int32 = 100
+		r.size = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiRemoveIpFromPoolRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	poolId     string
+	ipId       string
+}
+
+func (r ApiRemoveIpFromPoolRequest) Execute() (*http.Response, error) {
+	return r.ApiService.RemoveIpFromPoolExecute(r)
+}
+
+/*
+RemoveIpFromPool Unassign IP from pool
+
+Unassign provided IP from the specific pool.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param poolId IP pool identifier.
+	@param ipId Dedicated IP identifier.
+	@return ApiRemoveIpFromPoolRequest
+*/
+func (a *EmailAPIService) RemoveIpFromPool(ctx context.Context, poolId string, ipId string) ApiRemoveIpFromPoolRequest {
+	return ApiRemoveIpFromPoolRequest{
+		ApiService: a,
+		ctx:        ctx,
+		poolId:     poolId,
+		ipId:       ipId,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) RemoveIpFromPoolExecute(r ApiRemoveIpFromPoolRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.RemoveIpFromPool")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools/{poolId}/ips/{ipId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"ipId"+"}", url.PathEscape(parameterValueToString(r.ipId, "ipId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiRemoveIpPoolFromDomainRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	domainId   int64
+	poolId     string
+}
+
+func (r ApiRemoveIpPoolFromDomainRequest) Execute() (*http.Response, error) {
+	return r.ApiService.RemoveIpPoolFromDomainExecute(r)
+}
+
+/*
+RemoveIpPoolFromDomain Unassign IP pool from domain
+
+Unassign a specified pool from the provided domain.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainId Domain identifier.
+	@param poolId IP pool identifier.
+	@return ApiRemoveIpPoolFromDomainRequest
+*/
+func (a *EmailAPIService) RemoveIpPoolFromDomain(ctx context.Context, domainId int64, poolId string) ApiRemoveIpPoolFromDomainRequest {
+	return ApiRemoveIpPoolFromDomainRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainId:   domainId,
+		poolId:     poolId,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) RemoveIpPoolFromDomainExecute(r ApiRemoveIpPoolFromDomainRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.RemoveIpPoolFromDomain")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/domains/{domainId}/pools/{poolId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainId"+"}", url.PathEscape(parameterValueToString(r.domainId, "domainId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.domainId < 1 {
+		return nil, reportError("domainId must be greater than 1")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiRescheduleEmailsRequest struct {
+	ctx                   context.Context
+	ApiService            *EmailAPIService
+	bulkId                *string
+	bulkRescheduleRequest *BulkRescheduleRequest
+}
+
+func (r ApiRescheduleEmailsRequest) BulkId(bulkId string) ApiRescheduleEmailsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiRescheduleEmailsRequest) BulkRescheduleRequest(bulkRescheduleRequest BulkRescheduleRequest) ApiRescheduleEmailsRequest {
+	r.bulkRescheduleRequest = &bulkRescheduleRequest
+	return r
+}
+
+func (r ApiRescheduleEmailsRequest) Execute() (*BulkRescheduleResponse, *http.Response, error) {
+	return r.ApiService.RescheduleEmailsExecute(r)
+}
+
+/*
+RescheduleEmails Reschedule Email messages
+
+Change the date and time for sending scheduled messages.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiRescheduleEmailsRequest
+*/
+func (a *EmailAPIService) RescheduleEmails(ctx context.Context) ApiRescheduleEmailsRequest {
+	return ApiRescheduleEmailsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkRescheduleResponse
+func (a *EmailAPIService) RescheduleEmailsExecute(r ApiRescheduleEmailsRequest) (*BulkRescheduleResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkRescheduleResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.RescheduleEmails")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/bulks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+	if r.bulkRescheduleRequest == nil {
+		return localVarReturnValue, nil, reportError("bulkRescheduleRequest is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.bulkRescheduleRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSendEmailRequest struct {
+	ctx                     context.Context
+	ApiService              *EmailAPIService
+	to                      *[]string
+	from                    *string
+	cc                      *[]string
+	bcc                     *[]string
+	subject                 *string
+	text                    *string
+	html                    *string
+	ampHtml                 *string
+	templateId              *int64
+	attachment              []*os.File
+	inlineImage             []*os.File
+	intermediateReport      *bool
+	notifyUrl               *string
+	notifyContentType       *string
+	callbackData            *string
+	track                   *bool
+	trackClicks             *bool
+	trackOpens              *bool
+	trackingUrl             *string
+	bulkId                  *string
+	messageId               *string
+	campaignReferenceId     *string
+	replyTo                 *string
+	defaultPlaceholders     *string
+	preserveRecipients      *bool
+	sendAt                  *Time
+	landingPagePlaceholders *string
+	landingPageId           *string
+	templateLanguageVersion *string
+	clientPriority          *string
+	applicationId           *string
+	entityId                *string
+	headers                 *string
+}
+
+// Email address of the recipient in a form of &#x60;To&#x3D;\\\&quot;john.smith@somecompany.com\\\&quot;&#x60;. As optional feature on this field, a specific placeholder can be defined whose value will apply only for this destination. Given &#x60;To&#x60; value should look like: &#x60;To&#x3D; {\\\&quot;to\\\&quot;: \\\&quot;john.smith@somecompany.com\\\&quot;,\\\&quot;placeholders\\\&quot;: {\\\&quot;name\\\&quot;: \\\&quot;John\\\&quot;}}&#x60; &#x60;To&#x3D; {\\\&quot;to\\\&quot;: \\\&quot;alice.grey@somecompany.com\\\&quot;,\\\&quot;placeholders\\\&quot;: {\\\&quot;name\\\&quot;: \\\&quot;Alice\\\&quot;}}&#x60;.  Note: Maximum number of recipients per request is 1000 overall including to, cc and bcc field.
+func (r ApiSendEmailRequest) To(to []string) ApiSendEmailRequest {
+	r.to = &to
+	return r
+}
+
+// Email address with optional sender name.  Note: This field is required if &#x60;templateId&#x60; is not present.
+func (r ApiSendEmailRequest) From(from string) ApiSendEmailRequest {
+	r.from = &from
+	return r
+}
+
+// CC recipient email address. As optional feature on this field, a specific placeholder can be defined whose value will apply only for this destination.  Note: Maximum number of recipients per request is 1000 overall including to, cc and bcc field.
+func (r ApiSendEmailRequest) Cc(cc []string) ApiSendEmailRequest {
+	r.cc = &cc
+	return r
+}
+
+// BCC recipient email address. As optional feature on this field, a specific placeholder can be defined whose value will apply only for this destination.  Note: Maximum number of recipients per request is 1000 overall including to, cc and bcc field.
+func (r ApiSendEmailRequest) Bcc(bcc []string) ApiSendEmailRequest {
+	r.bcc = &bcc
+	return r
+}
+
+// Message subject.  Note: This field is required if &#x60;templateId&#x60; is not present.
+func (r ApiSendEmailRequest) Subject(subject string) ApiSendEmailRequest {
+	r.subject = &subject
+	return r
+}
+
+// Body of the message.
+func (r ApiSendEmailRequest) Text(text string) ApiSendEmailRequest {
+	r.text = &text
+	return r
+}
+
+// HTML body of the message. If &#x60;html&#x60; and &#x60;text&#x60; fields are present, the &#x60;text&#x60; field will be ignored and &#x60;html&#x60; will be delivered as a message body.
+func (r ApiSendEmailRequest) Html(html string) ApiSendEmailRequest {
+	r.html = &html
+	return r
+}
+
+// Amp HTML body of the message. If &#x60;ampHtml&#x60; is present, &#x60;html&#x60; is mandatory. Amp HTML is not supported by all the email clients. Please check this link for configuring gmail client https://developers.google.com/gmail/ampemail/.
+func (r ApiSendEmailRequest) AmpHtml(ampHtml string) ApiSendEmailRequest {
+	r.ampHtml = &ampHtml
+	return r
+}
+
+// Template ID used for generating email content. The template is created over Infobip web interface. If &#x60;templateId&#x60; is present, then &#x60;html&#x60; and &#x60;text&#x60; values are ignored.  Note: &#x60;templateId&#x60; only supports the value of &#x60;Broadcast&#x60;. &#x60;Content&#x60; and &#x60;Flow&#x60; are not supported.
+func (r ApiSendEmailRequest) TemplateId(templateId int64) ApiSendEmailRequest {
+	r.templateId = &templateId
+	return r
+}
+
+// File attachment.
+func (r ApiSendEmailRequest) Attachment(attachment []*os.File) ApiSendEmailRequest {
+	r.attachment = attachment
+	return r
+}
+
+// Allows for inserting an image file inside the HTML code of the email by using &#x60;cid:FILENAME&#x60; instead of providing an external link to the image.
+func (r ApiSendEmailRequest) InlineImage(inlineImage []*os.File) ApiSendEmailRequest {
+	r.inlineImage = inlineImage
+	return r
+}
+
+// The real-time Intermediate delivery report that will be sent on your callback server.
+func (r ApiSendEmailRequest) IntermediateReport(intermediateReport bool) ApiSendEmailRequest {
+	r.intermediateReport = &intermediateReport
+	return r
+}
+
+// The URL on your callback server on which the Delivery report will be sent.
+func (r ApiSendEmailRequest) NotifyUrl(notifyUrl string) ApiSendEmailRequest {
+	r.notifyUrl = &notifyUrl
+	return r
+}
+
+// Preferred Delivery report content type. Can be &#x60;application/json&#x60; or &#x60;application/xml&#x60;.
+func (r ApiSendEmailRequest) NotifyContentType(notifyContentType string) ApiSendEmailRequest {
+	r.notifyContentType = &notifyContentType
+	return r
+}
+
+// Additional client data that will be sent on the notifyUrl.
+func (r ApiSendEmailRequest) CallbackData(callbackData string) ApiSendEmailRequest {
+	r.callbackData = &callbackData
+	return r
+}
+
+// Enable or disable open and click tracking. Passing true will only enable tracking and the statistics would be visible in the web interface alone. This can be explicitly overridden by &#x60;trackClicks&#x60; and &#x60;trackOpens&#x60;.
+func (r ApiSendEmailRequest) Track(track bool) ApiSendEmailRequest {
+	r.track = &track
+	return r
+}
+
+// This parameter enables or disables track click feature.  Note: Option to disable click tracking per URL is available. For detailed usage, please refer to the [documentation](https://www.infobip.com/docs/email/tracking-service#disable-click-tracking-on-urls).
+func (r ApiSendEmailRequest) TrackClicks(trackClicks bool) ApiSendEmailRequest {
+	r.trackClicks = &trackClicks
+	return r
+}
+
+// This parameter enables or disables track open feature.
+func (r ApiSendEmailRequest) TrackOpens(trackOpens bool) ApiSendEmailRequest {
+	r.trackOpens = &trackOpens
+	return r
+}
+
+// The URL on your callback server on which the open and click notifications will be sent. See [Tracking Notifications](https://www.infobip.com/docs/email/send-email-over-api#tracking-notifications) for details.
+func (r ApiSendEmailRequest) TrackingUrl(trackingUrl string) ApiSendEmailRequest {
+	r.trackingUrl = &trackingUrl
+	return r
+}
+
+// The ID uniquely identifies the sent email request. This filter will enable you to query delivery reports for all the messages using just one request. You will receive a &#x60;bulkId&#x60; in the response after sending an email request. If you don&#39;t set your own &#x60;bulkId&#x60;, unique ID will be generated by our system and returned in the API response. (Optional Field)
+func (r ApiSendEmailRequest) BulkId(bulkId string) ApiSendEmailRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// The ID that uniquely identifies the message sent to a recipient. (Optional Field)
+func (r ApiSendEmailRequest) MessageId(messageId string) ApiSendEmailRequest {
+	r.messageId = &messageId
+	return r
+}
+
+// The ID that allows you to track, analyze, and show an aggregated overview and the performance of individual campaigns.
+func (r ApiSendEmailRequest) CampaignReferenceId(campaignReferenceId string) ApiSendEmailRequest {
+	r.campaignReferenceId = &campaignReferenceId
+	return r
+}
+
+// Email address to which recipients of the email can reply.
+func (r ApiSendEmailRequest) ReplyTo(replyTo string) ApiSendEmailRequest {
+	r.replyTo = &replyTo
+	return r
+}
+
+// General placeholder, given in a form of json example: &#x60;defaultPlaceholders&#x3D;{\\\&quot;ph1\\\&quot;: \\\&quot;Success\\\&quot;}&#x60;, which will replace given key &#x60;{{ph1}}&#x60; with given value &#x60;Success&#x60; anywhere in the email (subject, text, html...). In case of more destinations in &#x60;To&#x60; field, this placeholder will resolve the same value for key &#x60;ph1&#x60;.
+func (r ApiSendEmailRequest) DefaultPlaceholders(defaultPlaceholders string) ApiSendEmailRequest {
+	r.defaultPlaceholders = &defaultPlaceholders
+	return r
+}
+
+// If set to &#x60;true&#x60;, the &#x60;to&#x60; recipients will see the list of all other recipients to get the email and the response will return only one &#x60;messageId&#x60;. Otherwise, each recipient will see just their own email and the response will return a unique &#x60;messageId&#x60; for each email recipient.
+func (r ApiSendEmailRequest) PreserveRecipients(preserveRecipients bool) ApiSendEmailRequest {
+	r.preserveRecipients = &preserveRecipients
+	return r
+}
+
+// To schedule message at a given time. Time provided should be in UTC in the following format: &#x60;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#x60; and cannot exceed 30 days in the future.
+func (r ApiSendEmailRequest) SendAt(sendAt Time) ApiSendEmailRequest {
+	r.sendAt = &sendAt
+	return r
+}
+
+// Personalize opt out landing page by inserting placeholders. Insert placeholder or tag while designing landing page.
+func (r ApiSendEmailRequest) LandingPagePlaceholders(landingPagePlaceholders string) ApiSendEmailRequest {
+	r.landingPagePlaceholders = &landingPagePlaceholders
+	return r
+}
+
+// The ID of an opt out landing page to be used and displayed once an end user clicks the unsubscribe link. If not present, default opt out landing page will be displayed. Create a landing page in your Infobip account and use its ID, e.g., &#x60;1_23456&#x60;.
+func (r ApiSendEmailRequest) LandingPageId(landingPageId string) ApiSendEmailRequest {
+	r.landingPageId = &landingPageId
+	return r
+}
+
+// Specifies template language version that will be used in the current message template. Use version 1 for previous version of template language. Use version 2 for features of the new template language. If not present version 1 will be used as default version.
+func (r ApiSendEmailRequest) TemplateLanguageVersion(templateLanguageVersion string) ApiSendEmailRequest {
+	r.templateLanguageVersion = &templateLanguageVersion
+	return r
+}
+
+// Adds a priority rating to this email message. Allowed values are &#x60;HIGH&#x60;, &#x60;STANDARD&#x60; and &#x60;LOW&#x60;. Messages with a higher priority value sent by your account are prioritized over messages with a lower priority value sent by your account. If no priority value is provided, messages will be treated with &#x60;STANDARD&#x60; priority by default.
+func (r ApiSendEmailRequest) ClientPriority(clientPriority string) ApiSendEmailRequest {
+	r.clientPriority = &clientPriority
+	return r
+}
+
+// Required for application use in a send request for outbound traffic. Returned in notification events.
+func (r ApiSendEmailRequest) ApplicationId(applicationId string) ApiSendEmailRequest {
+	r.applicationId = &applicationId
+	return r
+}
+
+// Required for entity use in a send request for outbound traffic. Returned in notification events.
+func (r ApiSendEmailRequest) EntityId(entityId string) ApiSendEmailRequest {
+	r.entityId = &entityId
+	return r
+}
+
+// Additional email headers for customization that can be provided in a form of JSON. Example: &#x60;headers&#x3D;{\\\&quot;X-CustomHeader\\\&quot;: \\\&quot;Header value\\\&quot;}&#x60;.  There are a few exceptions of headers which are not adjustable through this option: &#x60;To&#x60;, &#x60;Cc&#x60;, &#x60;Bcc&#x60;, &#x60;From&#x60;, &#x60;Subject&#x60;,&#x60;Content-Type&#x60;, &#x60;DKIM-Signature&#x60;, &#x60;Content-Transfer-Encoding&#x60;, &#x60;Return-Path&#x60;, &#x60;MIME-Version&#x60;
+func (r ApiSendEmailRequest) Headers(headers string) ApiSendEmailRequest {
+	r.headers = &headers
+	return r
+}
+
+func (r ApiSendEmailRequest) Execute() (*SendResponse, *http.Response, error) {
+	return r.ApiService.SendEmailExecute(r)
+}
+
+/*
+SendEmail Send fully featured email
+
+Send an email or multiple emails to a recipient or multiple recipients with CC/BCC enabled.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSendEmailRequest
+*/
+func (a *EmailAPIService) SendEmail(ctx context.Context) ApiSendEmailRequest {
+	return ApiSendEmailRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return SendResponse
+func (a *EmailAPIService) SendEmailExecute(r ApiSendEmailRequest) (*SendResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *SendResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.SendEmail")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/3/send"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.to == nil {
+		return localVarReturnValue, nil, reportError("to is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"multipart/form-data"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.from != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "from", r.from, "", "multi")
+	}
+	parameterAddToHeaderOrQuery(localVarFormParams, "to", r.to, "", "multi")
+	if r.cc != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "cc", r.cc, "", "multi")
+	}
+	if r.bcc != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "bcc", r.bcc, "", "multi")
+	}
+	if r.subject != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "subject", r.subject, "", "multi")
+	}
+	if r.text != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "text", r.text, "", "multi")
+	}
+	if r.html != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "html", r.html, "", "multi")
+	}
+	if r.ampHtml != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "ampHtml", r.ampHtml, "", "multi")
+	}
+	if r.templateId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "templateId", r.templateId, "", "multi")
+	}
+	var attachmentLocalVarFormFileName string
+	var attachmentLocalVarFileName string
+	var attachmentLocalVarFileBytes []byte
+
+	attachmentLocalVarFormFileName = "attachment"
+	attachmentLocalVarFile := r.attachment
+
+	if attachmentLocalVarFile != nil {
+		// loop through the array to prepare multiple files upload
+		for _, attachmentLocalVarFileValue := range attachmentLocalVarFile {
+			fbs, _ := io.ReadAll(attachmentLocalVarFileValue)
+
+			attachmentLocalVarFileBytes = fbs
+			attachmentLocalVarFileName = attachmentLocalVarFileValue.Name()
+			attachmentLocalVarFileValue.Close()
+			formFiles = append(formFiles, formFile{fileBytes: attachmentLocalVarFileBytes, fileName: attachmentLocalVarFileName, formFileName: attachmentLocalVarFormFileName})
+		}
+	}
+	var inlineImageLocalVarFormFileName string
+	var inlineImageLocalVarFileName string
+	var inlineImageLocalVarFileBytes []byte
+
+	inlineImageLocalVarFormFileName = "inlineImage"
+	inlineImageLocalVarFile := r.inlineImage
+
+	if inlineImageLocalVarFile != nil {
+		// loop through the array to prepare multiple files upload
+		for _, inlineImageLocalVarFileValue := range inlineImageLocalVarFile {
+			fbs, _ := io.ReadAll(inlineImageLocalVarFileValue)
+
+			inlineImageLocalVarFileBytes = fbs
+			inlineImageLocalVarFileName = inlineImageLocalVarFileValue.Name()
+			inlineImageLocalVarFileValue.Close()
+			formFiles = append(formFiles, formFile{fileBytes: inlineImageLocalVarFileBytes, fileName: inlineImageLocalVarFileName, formFileName: inlineImageLocalVarFormFileName})
+		}
+	}
+	if r.intermediateReport != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "intermediateReport", r.intermediateReport, "", "multi")
+	}
+	if r.notifyUrl != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "notifyUrl", r.notifyUrl, "", "multi")
+	}
+	if r.notifyContentType != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "notifyContentType", r.notifyContentType, "", "multi")
+	}
+	if r.callbackData != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "callbackData", r.callbackData, "", "multi")
+	}
+	if r.track != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "track", r.track, "", "multi")
+	}
+	if r.trackClicks != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "trackClicks", r.trackClicks, "", "multi")
+	}
+	if r.trackOpens != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "trackOpens", r.trackOpens, "", "multi")
+	}
+	if r.trackingUrl != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "trackingUrl", r.trackingUrl, "", "multi")
+	}
+	if r.bulkId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "bulkId", r.bulkId, "", "multi")
+	}
+	if r.messageId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "messageId", r.messageId, "", "multi")
+	}
+	if r.campaignReferenceId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "campaignReferenceId", r.campaignReferenceId, "", "multi")
+	}
+	if r.replyTo != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "replyTo", r.replyTo, "", "multi")
+	}
+	if r.defaultPlaceholders != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "defaultPlaceholders", r.defaultPlaceholders, "", "multi")
+	}
+	if r.preserveRecipients != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "preserveRecipients", r.preserveRecipients, "", "multi")
+	}
+	if r.sendAt != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "sendAt", r.sendAt, "", "multi")
+	}
+	if r.landingPagePlaceholders != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "landingPagePlaceholders", r.landingPagePlaceholders, "", "multi")
+	}
+	if r.landingPageId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "landingPageId", r.landingPageId, "", "multi")
+	}
+	if r.templateLanguageVersion != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "templateLanguageVersion", r.templateLanguageVersion, "", "multi")
+	}
+	if r.clientPriority != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "clientPriority", r.clientPriority, "", "multi")
+	}
+	if r.applicationId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "applicationId", r.applicationId, "", "multi")
+	}
+	if r.entityId != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "entityId", r.entityId, "", "multi")
+	}
+	if r.headers != nil {
+		parameterAddToHeaderOrQuery(localVarFormParams, "headers", r.headers, "", "multi")
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateDomainPoolPriorityRequest struct {
+	ctx                       context.Context
+	ApiService                *EmailAPIService
+	domainId                  int64
+	poolId                    string
+	domainIpPoolUpdateRequest *DomainIpPoolUpdateRequest
+}
+
+func (r ApiUpdateDomainPoolPriorityRequest) DomainIpPoolUpdateRequest(domainIpPoolUpdateRequest DomainIpPoolUpdateRequest) ApiUpdateDomainPoolPriorityRequest {
+	r.domainIpPoolUpdateRequest = &domainIpPoolUpdateRequest
+	return r
+}
+
+func (r ApiUpdateDomainPoolPriorityRequest) Execute() (*http.Response, error) {
+	return r.ApiService.UpdateDomainPoolPriorityExecute(r)
+}
+
+/*
+UpdateDomainPoolPriority Update IP pool sending priority
+
+Update specified pool's sending priority for the provided domain.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainId Domain identifier.
+	@param poolId IP pool identifier.
+	@return ApiUpdateDomainPoolPriorityRequest
+*/
+func (a *EmailAPIService) UpdateDomainPoolPriority(ctx context.Context, domainId int64, poolId string) ApiUpdateDomainPoolPriorityRequest {
+	return ApiUpdateDomainPoolPriorityRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainId:   domainId,
+		poolId:     poolId,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) UpdateDomainPoolPriorityExecute(r ApiUpdateDomainPoolPriorityRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodPut
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.UpdateDomainPoolPriority")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/domains/{domainId}/pools/{poolId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainId"+"}", url.PathEscape(parameterValueToString(r.domainId, "domainId")), -1)
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.domainId < 1 {
+		return nil, reportError("domainId must be greater than 1")
+	}
+	if r.domainIpPoolUpdateRequest == nil {
+		return nil, reportError("domainIpPoolUpdateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.domainIpPoolUpdateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiUpdateIpPoolRequest struct {
+	ctx                 context.Context
+	ApiService          *EmailAPIService
+	poolId              string
+	ipPoolCreateRequest *IpPoolCreateRequest
+}
+
+func (r ApiUpdateIpPoolRequest) IpPoolCreateRequest(ipPoolCreateRequest IpPoolCreateRequest) ApiUpdateIpPoolRequest {
+	r.ipPoolCreateRequest = &ipPoolCreateRequest
+	return r
+}
+
+func (r ApiUpdateIpPoolRequest) Execute() (*IpPoolResponse, *http.Response, error) {
+	return r.ApiService.UpdateIpPoolExecute(r)
+}
+
+/*
+UpdateIpPool Update IP pool
+
+Update a provided IP pool.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param poolId IP pool identifier.
+	@return ApiUpdateIpPoolRequest
+*/
+func (a *EmailAPIService) UpdateIpPool(ctx context.Context, poolId string) ApiUpdateIpPoolRequest {
+	return ApiUpdateIpPoolRequest{
+		ApiService: a,
+		ctx:        ctx,
+		poolId:     poolId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return IpPoolResponse
+func (a *EmailAPIService) UpdateIpPoolExecute(r ApiUpdateIpPoolRequest) (*IpPoolResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *IpPoolResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.UpdateIpPool")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/ip-management/pools/{poolId}"
+	localVarPath = strings.Replace(localVarPath, "{"+"poolId"+"}", url.PathEscape(parameterValueToString(r.poolId, "poolId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.ipPoolCreateRequest == nil {
+		return localVarReturnValue, nil, reportError("ipPoolCreateRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.ipPoolCreateRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateReturnPathRequest struct {
+	ctx                      context.Context
+	ApiService               *EmailAPIService
+	domainName               string
+	returnPathAddressRequest *ReturnPathAddressRequest
+}
+
+func (r ApiUpdateReturnPathRequest) ReturnPathAddressRequest(returnPathAddressRequest ReturnPathAddressRequest) ApiUpdateReturnPathRequest {
+	r.returnPathAddressRequest = &returnPathAddressRequest
+	return r
+}
+
+func (r ApiUpdateReturnPathRequest) Execute() (*DomainResponse, *http.Response, error) {
+	return r.ApiService.UpdateReturnPathExecute(r)
+}
+
+/*
+UpdateReturnPath Update return path
+
+API to update return path for the provided domain. The mailbox used for return path should be based on the same domain.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainName Domain for which the return path address needs to be updated.
+	@return ApiUpdateReturnPathRequest
+*/
+func (a *EmailAPIService) UpdateReturnPath(ctx context.Context, domainName string) ApiUpdateReturnPathRequest {
+	return ApiUpdateReturnPathRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainName: domainName,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DomainResponse
+func (a *EmailAPIService) UpdateReturnPathExecute(r ApiUpdateReturnPathRequest) (*DomainResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DomainResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.UpdateReturnPath")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains/{domainName}/return-path"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainName"+"}", url.PathEscape(parameterValueToString(r.domainName, "domainName")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.returnPathAddressRequest == nil {
+		return localVarReturnValue, nil, reportError("returnPathAddressRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.returnPathAddressRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateScheduledEmailStatusesRequest struct {
+	ctx                     context.Context
+	ApiService              *EmailAPIService
+	bulkId                  *string
+	bulkUpdateStatusRequest *BulkUpdateStatusRequest
+}
+
+// The ID uniquely identifies the sent email request.
+func (r ApiUpdateScheduledEmailStatusesRequest) BulkId(bulkId string) ApiUpdateScheduledEmailStatusesRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiUpdateScheduledEmailStatusesRequest) BulkUpdateStatusRequest(bulkUpdateStatusRequest BulkUpdateStatusRequest) ApiUpdateScheduledEmailStatusesRequest {
+	r.bulkUpdateStatusRequest = &bulkUpdateStatusRequest
+	return r
+}
+
+func (r ApiUpdateScheduledEmailStatusesRequest) Execute() (*BulkUpdateStatusResponse, *http.Response, error) {
+	return r.ApiService.UpdateScheduledEmailStatusesExecute(r)
+}
+
+/*
+UpdateScheduledEmailStatuses Update scheduled Email messages status
+
+Change status or completely cancel sending of scheduled messages.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiUpdateScheduledEmailStatusesRequest
+*/
+func (a *EmailAPIService) UpdateScheduledEmailStatuses(ctx context.Context) ApiUpdateScheduledEmailStatusesRequest {
+	return ApiUpdateScheduledEmailStatusesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkUpdateStatusResponse
+func (a *EmailAPIService) UpdateScheduledEmailStatusesExecute(r ApiUpdateScheduledEmailStatusesRequest) (*BulkUpdateStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkUpdateStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.UpdateScheduledEmailStatuses")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/bulks/status"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+	if r.bulkUpdateStatusRequest == nil {
+		return localVarReturnValue, nil, reportError("bulkUpdateStatusRequest is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.bulkUpdateStatusRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateTrackingEventsRequest struct {
+	ctx                  context.Context
+	ApiService           *EmailAPIService
+	domainName           string
+	trackingEventRequest *TrackingEventRequest
+}
+
+func (r ApiUpdateTrackingEventsRequest) TrackingEventRequest(trackingEventRequest TrackingEventRequest) ApiUpdateTrackingEventsRequest {
+	r.trackingEventRequest = &trackingEventRequest
+	return r
+}
+
+func (r ApiUpdateTrackingEventsRequest) Execute() (*DomainResponse, *http.Response, error) {
+	return r.ApiService.UpdateTrackingEventsExecute(r)
+}
+
+/*
+UpdateTrackingEvents Update tracking events
+
+API to update tracking events for the provided domain. Tracking events can be updated only for CLICKS, OPENS and UNSUBSCRIBES.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainName Domain for which the tracking events need to be updated.
+	@return ApiUpdateTrackingEventsRequest
+*/
+func (a *EmailAPIService) UpdateTrackingEvents(ctx context.Context, domainName string) ApiUpdateTrackingEventsRequest {
+	return ApiUpdateTrackingEventsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainName: domainName,
+	}
+}
+
+// Execute executes the request
+//
+//	@return DomainResponse
+func (a *EmailAPIService) UpdateTrackingEventsExecute(r ApiUpdateTrackingEventsRequest) (*DomainResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *DomainResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.UpdateTrackingEvents")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains/{domainName}/tracking"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainName"+"}", url.PathEscape(parameterValueToString(r.domainName, "domainName")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.trackingEventRequest == nil {
+		return localVarReturnValue, nil, reportError("trackingEventRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.trackingEventRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiValidateEmailAddressesRequest struct {
+	ctx               context.Context
+	ApiService        *EmailAPIService
+	validationRequest *ValidationRequest
+}
+
+func (r ApiValidateEmailAddressesRequest) ValidationRequest(validationRequest ValidationRequest) ApiValidateEmailAddressesRequest {
+	r.validationRequest = &validationRequest
+	return r
+}
+
+func (r ApiValidateEmailAddressesRequest) Execute() (*ValidationResponse, *http.Response, error) {
+	return r.ApiService.ValidateEmailAddressesExecute(r)
+}
+
+/*
+ValidateEmailAddresses Validate email addresses
+
+Run validation to identify poor quality emails to clean up your recipient list.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiValidateEmailAddressesRequest
+*/
+func (a *EmailAPIService) ValidateEmailAddresses(ctx context.Context) ApiValidateEmailAddressesRequest {
+	return ApiValidateEmailAddressesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ValidationResponse
+func (a *EmailAPIService) ValidateEmailAddressesExecute(r ApiValidateEmailAddressesRequest) (*ValidationResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ValidationResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.ValidateEmailAddresses")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/2/validation"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.validationRequest == nil {
+		return localVarReturnValue, nil, reportError("validationRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.validationRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiVerifyDomainRequest struct {
+	ctx        context.Context
+	ApiService *EmailAPIService
+	domainName string
+}
+
+func (r ApiVerifyDomainRequest) Execute() (*http.Response, error) {
+	return r.ApiService.VerifyDomainExecute(r)
+}
+
+/*
+VerifyDomain Verify Domain
+
+API request to verify records(TXT, MX, DKIM) associated with the provided domain.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param domainName Name of the domain that has to be verified.
+	@return ApiVerifyDomainRequest
+*/
+func (a *EmailAPIService) VerifyDomain(ctx context.Context, domainName string) ApiVerifyDomainRequest {
+	return ApiVerifyDomainRequest{
+		ApiService: a,
+		ctx:        ctx,
+		domainName: domainName,
+	}
+}
+
+// Execute executes the request
+func (a *EmailAPIService) VerifyDomainExecute(r ApiVerifyDomainRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodPost
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "EmailAPIService.VerifyDomain")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/email/1/domains/{domainName}/verify"
+	localVarPath = strings.Replace(localVarPath, "{"+"domainName"+"}", url.PathEscape(parameterValueToString(r.domainName, "domainName")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/flow_api.go b/pkg/infobip/api/flow_api.go
new file mode 100644
index 0000000..2bc4573
--- /dev/null
+++ b/pkg/infobip/api/flow_api.go
@@ -0,0 +1,607 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/moments"
+)
+
+// FlowAPIService FlowAPI service
+type FlowAPIService service
+
+// ApiFlowAPIRequest[T any] interface
+type FlowAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiAddFlowParticipantsRequest struct {
+	ctx                            context.Context
+	ApiService                     *FlowAPIService
+	campaignId                     int64
+	flowAddFlowParticipantsRequest *FlowAddFlowParticipantsRequest
+}
+
+func (r ApiAddFlowParticipantsRequest) FlowAddFlowParticipantsRequest(flowAddFlowParticipantsRequest FlowAddFlowParticipantsRequest) ApiAddFlowParticipantsRequest {
+	r.flowAddFlowParticipantsRequest = &flowAddFlowParticipantsRequest
+	return r
+}
+
+func (r ApiAddFlowParticipantsRequest) Execute() (*FlowAddFlowParticipantsResponse, *http.Response, error) {
+	return r.ApiService.AddFlowParticipantsExecute(r)
+}
+
+/*
+AddFlowParticipants Add participants to flow
+
+Use this endpoint to add participants to a flow, accommodating anywhere from 1 to 1000 persons.
+
+	               When participants are added, their profiles in People are automatically created, updated or merged based on the identifiers provided.<br>
+	               If identifiers are unique, a new profile is created.<br>
+	               If identifiers match an existing profile, then that profile is updated.<br>
+	               If identifiers refer to multiple existing profiles or are not unique within the request, profiles are merged.<br>
+	               To prevent unwanted merges, ensure each participant's identifiers
+	               (<code>identifyBy</code>, <code>externalId</code> and <code>contactInformation</code>) are unique.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param campaignId Unique identifier of the flow that participant will be added to.
+	@return ApiAddFlowParticipantsRequest
+*/
+func (a *FlowAPIService) AddFlowParticipants(ctx context.Context, campaignId int64) ApiAddFlowParticipantsRequest {
+	return ApiAddFlowParticipantsRequest{
+		ApiService: a,
+		ctx:        ctx,
+		campaignId: campaignId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FlowAddFlowParticipantsResponse
+func (a *FlowAPIService) AddFlowParticipantsExecute(r ApiAddFlowParticipantsRequest) (*FlowAddFlowParticipantsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FlowAddFlowParticipantsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FlowAPIService.AddFlowParticipants")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/moments/1/flows/{campaignId}/participants"
+	localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.flowAddFlowParticipantsRequest == nil {
+		return localVarReturnValue, nil, reportError("flowAddFlowParticipantsRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.flowAddFlowParticipantsRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetFlowParticipantsAddedReportRequest struct {
+	ctx         context.Context
+	ApiService  *FlowAPIService
+	campaignId  int64
+	operationId *string
+}
+
+// Unique identifier of the operation.
+func (r ApiGetFlowParticipantsAddedReportRequest) OperationId(operationId string) ApiGetFlowParticipantsAddedReportRequest {
+	r.operationId = &operationId
+	return r
+}
+
+func (r ApiGetFlowParticipantsAddedReportRequest) Execute() (*FlowParticipantsReportResponse, *http.Response, error) {
+	return r.ApiService.GetFlowParticipantsAddedReportExecute(r)
+}
+
+/*
+GetFlowParticipantsAddedReport Get a report on participants added to flow
+
+Use this API endpoint to fetch a report to confirm that all persons have been successfully added to the flow.
+
+	               Please note that report is stored for 30 days.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param campaignId Unique identifier of the flow that participant will be added to.
+	@return ApiGetFlowParticipantsAddedReportRequest
+*/
+func (a *FlowAPIService) GetFlowParticipantsAddedReport(ctx context.Context, campaignId int64) ApiGetFlowParticipantsAddedReportRequest {
+	return ApiGetFlowParticipantsAddedReportRequest{
+		ApiService: a,
+		ctx:        ctx,
+		campaignId: campaignId,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FlowParticipantsReportResponse
+func (a *FlowAPIService) GetFlowParticipantsAddedReportExecute(r ApiGetFlowParticipantsAddedReportRequest) (*FlowParticipantsReportResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FlowParticipantsReportResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FlowAPIService.GetFlowParticipantsAddedReport")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/moments/1/flows/{campaignId}/participants/report"
+	localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.operationId == nil {
+		return localVarReturnValue, nil, reportError("operationId is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "operationId", r.operationId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiRemovePeopleFromFlowRequest struct {
+	ctx        context.Context
+	ApiService *FlowAPIService
+	campaignId int64
+	phone      *string
+	email      *string
+	externalId *string
+}
+
+// Person&#39;s phone number.
+func (r ApiRemovePeopleFromFlowRequest) Phone(phone string) ApiRemovePeopleFromFlowRequest {
+	r.phone = &phone
+	return r
+}
+
+// Person&#39;s email address.
+func (r ApiRemovePeopleFromFlowRequest) Email(email string) ApiRemovePeopleFromFlowRequest {
+	r.email = &email
+	return r
+}
+
+// Unique ID for the person from an external system.
+func (r ApiRemovePeopleFromFlowRequest) ExternalId(externalId string) ApiRemovePeopleFromFlowRequest {
+	r.externalId = &externalId
+	return r
+}
+
+func (r ApiRemovePeopleFromFlowRequest) Execute() (*http.Response, error) {
+	return r.ApiService.RemovePeopleFromFlowExecute(r)
+}
+
+/*
+RemovePeopleFromFlow Remove person from flow
+
+Removes a participant with given identifier from the flow.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param campaignId Unique identifier of the flow that person will be removed from.
+	@return ApiRemovePeopleFromFlowRequest
+*/
+func (a *FlowAPIService) RemovePeopleFromFlow(ctx context.Context, campaignId int64) ApiRemovePeopleFromFlowRequest {
+	return ApiRemovePeopleFromFlowRequest{
+		ApiService: a,
+		ctx:        ctx,
+		campaignId: campaignId,
+	}
+}
+
+// Execute executes the request
+func (a *FlowAPIService) RemovePeopleFromFlowExecute(r ApiRemovePeopleFromFlowRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FlowAPIService.RemovePeopleFromFlow")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/communication/1/flows/{campaignId}/participants"
+	localVarPath = strings.Replace(localVarPath, "{"+"campaignId"+"}", url.PathEscape(parameterValueToString(r.campaignId, "campaignId")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.phone != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "phone", r.phone, "form", "")
+	}
+	if r.email != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "email", r.email, "form", "")
+	}
+	if r.externalId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "externalId", r.externalId, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v FlowExceptionResponse
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v FlowExceptionResponse
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/forms_api.go b/pkg/infobip/api/forms_api.go
new file mode 100644
index 0000000..0cdc58d
--- /dev/null
+++ b/pkg/infobip/api/forms_api.go
@@ -0,0 +1,771 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/moments"
+)
+
+// FormsAPIService FormsAPI service
+type FormsAPIService service
+
+// ApiFormsAPIRequest[T any] interface
+type FormsAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiGetFormRequest struct {
+	ctx        context.Context
+	ApiService *FormsAPIService
+	id         string
+}
+
+func (r ApiGetFormRequest) Execute() (*FormsResponseContent, *http.Response, error) {
+	return r.ApiService.GetFormExecute(r)
+}
+
+/*
+GetForm Get form
+
+Use this method to get a form by its ID.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id ID of a form
+	@return ApiGetFormRequest
+*/
+func (a *FormsAPIService) GetForm(ctx context.Context, id string) ApiGetFormRequest {
+	return ApiGetFormRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FormsResponseContent
+func (a *FormsAPIService) GetFormExecute(r ApiGetFormRequest) (*FormsResponseContent, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FormsResponseContent
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FormsAPIService.GetForm")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/forms/1/forms/{id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetFormsRequest struct {
+	ctx        context.Context
+	ApiService *FormsAPIService
+	offset     *int32
+	limit      *int32
+	formType   *string
+	formStatus *FormsStatus
+}
+
+// Skip first {offset} forms of the list.
+func (r ApiGetFormsRequest) Offset(offset int32) ApiGetFormsRequest {
+	r.offset = &offset
+	return r
+}
+
+// The maximum number of returned forms. Maximum value is &#x60;100&#x60;.
+func (r ApiGetFormsRequest) Limit(limit int32) ApiGetFormsRequest {
+	r.limit = &limit
+	return r
+}
+
+// The type of returned forms.
+func (r ApiGetFormsRequest) FormType(formType string) ApiGetFormsRequest {
+	r.formType = &formType
+	return r
+}
+
+// The status of returned forms.
+func (r ApiGetFormsRequest) FormStatus(formStatus FormsStatus) ApiGetFormsRequest {
+	r.formStatus = &formStatus
+	return r
+}
+
+func (r ApiGetFormsRequest) Execute() (*FormsResponse, *http.Response, error) {
+	return r.ApiService.GetFormsExecute(r)
+}
+
+/*
+GetForms Get forms
+
+Use this method to get a list of forms.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetFormsRequest
+*/
+func (a *FormsAPIService) GetForms(ctx context.Context) ApiGetFormsRequest {
+	return ApiGetFormsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FormsResponse
+func (a *FormsAPIService) GetFormsExecute(r ApiGetFormsRequest) (*FormsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FormsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FormsAPIService.GetForms")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/forms/1/forms"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.offset != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "offset", r.offset, "form", "")
+	} else {
+		var defaultValue int32 = 0
+		r.offset = &defaultValue
+	}
+	if r.limit != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "limit", r.limit, "form", "")
+	} else {
+		var defaultValue int32 = 25
+		r.limit = &defaultValue
+	}
+	if r.formType != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "formType", r.formType, "form", "")
+	}
+	if r.formStatus != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "formStatus", r.formStatus, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiIncrementViewCountRequest struct {
+	ctx        context.Context
+	ApiService *FormsAPIService
+	id         string
+}
+
+func (r ApiIncrementViewCountRequest) Execute() (*FormsStatusResponse, *http.Response, error) {
+	return r.ApiService.IncrementViewCountExecute(r)
+}
+
+/*
+IncrementViewCount Increment form view count
+
+Use this method to increase the view counter of a specific form. It's used for proper statistics calculation. Statistics are available on the form performance page on the Portal.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id ID of a form
+	@return ApiIncrementViewCountRequest
+*/
+func (a *FormsAPIService) IncrementViewCount(ctx context.Context, id string) ApiIncrementViewCountRequest {
+	return ApiIncrementViewCountRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FormsStatusResponse
+func (a *FormsAPIService) IncrementViewCountExecute(r ApiIncrementViewCountRequest) (*FormsStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FormsStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FormsAPIService.IncrementViewCount")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/forms/1/forms/{id}/views"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSubmitFormDataRequest struct {
+	ctx                      context.Context
+	ApiService               *FormsAPIService
+	id                       string
+	body                     *map[string]interface{}
+	ibSubmissionSource       *string
+	ibSubmissionFormCampaign *string
+}
+
+// Form Data
+func (r ApiSubmitFormDataRequest) Body(body map[string]interface{}) ApiSubmitFormDataRequest {
+	r.body = &body
+	return r
+}
+
+// By sending source information you will be able to see Analytics by Source – It reflects the submission rates by source if your form is present in numerous places.
+func (r ApiSubmitFormDataRequest) IbSubmissionSource(ibSubmissionSource string) ApiSubmitFormDataRequest {
+	r.ibSubmissionSource = &ibSubmissionSource
+	return r
+}
+
+// By sending campaign information you will be able to see Analytics by Campaign – It reflects the submission rates by campaign if your form is included in multiple campaigns.
+func (r ApiSubmitFormDataRequest) IbSubmissionFormCampaign(ibSubmissionFormCampaign string) ApiSubmitFormDataRequest {
+	r.ibSubmissionFormCampaign = &ibSubmissionFormCampaign
+	return r
+}
+
+func (r ApiSubmitFormDataRequest) Execute() (*FormsStatusResponse, *http.Response, error) {
+	return r.ApiService.SubmitFormDataExecute(r)
+}
+
+/*
+SubmitFormData Submit form data
+
+Use this method to submit form data.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id ID of a form
+	@return ApiSubmitFormDataRequest
+*/
+func (a *FormsAPIService) SubmitFormData(ctx context.Context, id string) ApiSubmitFormDataRequest {
+	return ApiSubmitFormDataRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+//
+//	@return FormsStatusResponse
+func (a *FormsAPIService) SubmitFormDataExecute(r ApiSubmitFormDataRequest) (*FormsStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *FormsStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "FormsAPIService.SubmitFormData")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/forms/1/forms/{id}/data"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.body == nil {
+		return localVarReturnValue, nil, reportError("body is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ibSubmissionSource != nil {
+		parameterAddToHeaderOrQuery(localVarHeaderParams, "ib-submission-source", r.ibSubmissionSource, "simple", "")
+	}
+	if r.ibSubmissionFormCampaign != nil {
+		parameterAddToHeaderOrQuery(localVarHeaderParams, "ib-submission-form-campaign", r.ibSubmissionFormCampaign, "simple", "")
+	}
+	// body params
+	localVarPostBody = r.body
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/messages_api.go b/pkg/infobip/api/messages_api.go
index 0dcd381..5f05b16 100644
--- a/pkg/infobip/api/messages_api.go
+++ b/pkg/infobip/api/messages_api.go
@@ -40,7 +40,7 @@ func (r ApiSendMessagesApiEventsRequest) EventRequest(eventRequest EventRequest)
 	return r
 }
 
-func (r ApiSendMessagesApiEventsRequest) Execute() (*ResponseEnvelopeMessageResponseMessageResponseDetails, *http.Response, error) {
+func (r ApiSendMessagesApiEventsRequest) Execute() (*MessageResponse, *http.Response, error) {
 	return r.ApiService.SendMessagesApiEventsExecute(r)
 }
 
@@ -61,13 +61,13 @@ func (a *MessagesAPIService) SendMessagesApiEvents(ctx context.Context) ApiSendM
 
 // Execute executes the request
 //
-//	@return ResponseEnvelopeMessageResponseMessageResponseDetails
-func (a *MessagesAPIService) SendMessagesApiEventsExecute(r ApiSendMessagesApiEventsRequest) (*ResponseEnvelopeMessageResponseMessageResponseDetails, *http.Response, error) {
+//	@return MessageResponse
+func (a *MessagesAPIService) SendMessagesApiEventsExecute(r ApiSendMessagesApiEventsRequest) (*MessageResponse, *http.Response, error) {
 	var (
 		localVarHTTPMethod  = http.MethodPost
 		localVarPostBody    interface{}
 		formFiles           []formFile
-		localVarReturnValue *ResponseEnvelopeMessageResponseMessageResponseDetails
+		localVarReturnValue *MessageResponse
 	)
 
 	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "MessagesAPIService.SendMessagesApiEvents")
@@ -208,7 +208,7 @@ func (r ApiSendMessagesApiMessageRequest) Request(request Request) ApiSendMessag
 	return r
 }
 
-func (r ApiSendMessagesApiMessageRequest) Execute() (*ResponseEnvelopeMessageResponseMessageResponseDetails, *http.Response, error) {
+func (r ApiSendMessagesApiMessageRequest) Execute() (*MessageResponse, *http.Response, error) {
 	return r.ApiService.SendMessagesApiMessageExecute(r)
 }
 
@@ -229,13 +229,13 @@ func (a *MessagesAPIService) SendMessagesApiMessage(ctx context.Context) ApiSend
 
 // Execute executes the request
 //
-//	@return ResponseEnvelopeMessageResponseMessageResponseDetails
-func (a *MessagesAPIService) SendMessagesApiMessageExecute(r ApiSendMessagesApiMessageRequest) (*ResponseEnvelopeMessageResponseMessageResponseDetails, *http.Response, error) {
+//	@return MessageResponse
+func (a *MessagesAPIService) SendMessagesApiMessageExecute(r ApiSendMessagesApiMessageRequest) (*MessageResponse, *http.Response, error) {
 	var (
 		localVarHTTPMethod  = http.MethodPost
 		localVarPostBody    interface{}
 		formFiles           []formFile
-		localVarReturnValue *ResponseEnvelopeMessageResponseMessageResponseDetails
+		localVarReturnValue *MessageResponse
 	)
 
 	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "MessagesAPIService.SendMessagesApiMessage")
@@ -364,3 +364,182 @@ func (a *MessagesAPIService) SendMessagesApiMessageExecute(r ApiSendMessagesApiM
 
 	return localVarReturnValue, localVarHTTPResponse, nil
 }
+
+type ApiValidateMessagesApiMessageRequest struct {
+	ctx        context.Context
+	ApiService *MessagesAPIService
+	request    *Request
+}
+
+func (r ApiValidateMessagesApiMessageRequest) Request(request Request) ApiValidateMessagesApiMessageRequest {
+	r.request = &request
+	return r
+}
+
+func (r ApiValidateMessagesApiMessageRequest) Execute() (*ValidationOkResponse, *http.Response, error) {
+	return r.ApiService.ValidateMessagesApiMessageExecute(r)
+}
+
+/*
+ValidateMessagesApiMessage Validate a Messages API message
+
+Perform a detailed validation of Messages API messages. This endpoint executes more specific checks than the `/messages` endpoint such as: possible channel-specific validations, verification of each failover step and unknown fields. Returns `200 OK` when the request would be accepted by the platform or `400 BAD_REQUEST` when it may fail at any point. Use this endpoint to validate messages before sending them to catch potential issues early.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiValidateMessagesApiMessageRequest
+*/
+func (a *MessagesAPIService) ValidateMessagesApiMessage(ctx context.Context) ApiValidateMessagesApiMessageRequest {
+	return ApiValidateMessagesApiMessageRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ValidationOkResponse
+func (a *MessagesAPIService) ValidateMessagesApiMessageExecute(r ApiValidateMessagesApiMessageRequest) (*ValidationOkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ValidationOkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "MessagesAPIService.ValidateMessagesApiMessage")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/messages-api/1/messages/validate"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.request == nil {
+		return localVarReturnValue, nil, reportError("request is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.request
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ValidationBadResponse
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiError
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/number_masking_api.go b/pkg/infobip/api/number_masking_api.go
new file mode 100644
index 0000000..2b6e349
--- /dev/null
+++ b/pkg/infobip/api/number_masking_api.go
@@ -0,0 +1,1688 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+)
+
+// NumberMaskingAPIService NumberMaskingAPI service
+type NumberMaskingAPIService service
+
+// ApiNumberMaskingAPIRequest[T any] interface
+type NumberMaskingAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiCreateNumberMaskingConfigurationRequest struct {
+	ctx                    context.Context
+	ApiService             *NumberMaskingAPIService
+	numberMaskingSetupBody *NumberMaskingSetupBody
+}
+
+func (r ApiCreateNumberMaskingConfigurationRequest) NumberMaskingSetupBody(numberMaskingSetupBody NumberMaskingSetupBody) ApiCreateNumberMaskingConfigurationRequest {
+	r.numberMaskingSetupBody = &numberMaskingSetupBody
+	return r
+}
+
+func (r ApiCreateNumberMaskingConfigurationRequest) Execute() (*NumberMaskingSetupResponse, *http.Response, error) {
+	return r.ApiService.CreateNumberMaskingConfigurationExecute(r)
+}
+
+/*
+CreateNumberMaskingConfiguration Create number masking configuration
+
+This method allows you to create masking configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateNumberMaskingConfigurationRequest
+*/
+func (a *NumberMaskingAPIService) CreateNumberMaskingConfiguration(ctx context.Context) ApiCreateNumberMaskingConfigurationRequest {
+	return ApiCreateNumberMaskingConfigurationRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingSetupResponse
+func (a *NumberMaskingAPIService) CreateNumberMaskingConfigurationExecute(r ApiCreateNumberMaskingConfigurationRequest) (*NumberMaskingSetupResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingSetupResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.CreateNumberMaskingConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/config"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.numberMaskingSetupBody == nil {
+		return localVarReturnValue, nil, reportError("numberMaskingSetupBody is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.numberMaskingSetupBody
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiCreateNumberMaskingCredentialsRequest struct {
+	ctx                          context.Context
+	ApiService                   *NumberMaskingAPIService
+	numberMaskingCredentialsBody *NumberMaskingCredentialsBody
+}
+
+func (r ApiCreateNumberMaskingCredentialsRequest) NumberMaskingCredentialsBody(numberMaskingCredentialsBody NumberMaskingCredentialsBody) ApiCreateNumberMaskingCredentialsRequest {
+	r.numberMaskingCredentialsBody = &numberMaskingCredentialsBody
+	return r
+}
+
+func (r ApiCreateNumberMaskingCredentialsRequest) Execute() (*NumberMaskingCredentialsResponse, *http.Response, error) {
+	return r.ApiService.CreateNumberMaskingCredentialsExecute(r)
+}
+
+/*
+CreateNumberMaskingCredentials Create number masking credentials
+
+This method allows you to create Voice number masking credentials.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateNumberMaskingCredentialsRequest
+*/
+func (a *NumberMaskingAPIService) CreateNumberMaskingCredentials(ctx context.Context) ApiCreateNumberMaskingCredentialsRequest {
+	return ApiCreateNumberMaskingCredentialsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingCredentialsResponse
+func (a *NumberMaskingAPIService) CreateNumberMaskingCredentialsExecute(r ApiCreateNumberMaskingCredentialsRequest) (*NumberMaskingCredentialsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingCredentialsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.CreateNumberMaskingCredentials")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/credentials"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.numberMaskingCredentialsBody == nil {
+		return localVarReturnValue, nil, reportError("numberMaskingCredentialsBody is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.numberMaskingCredentialsBody
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 409 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteNumberMaskingConfigurationRequest struct {
+	ctx        context.Context
+	ApiService *NumberMaskingAPIService
+	key        string
+}
+
+func (r ApiDeleteNumberMaskingConfigurationRequest) Execute() (*http.Response, error) {
+	return r.ApiService.DeleteNumberMaskingConfigurationExecute(r)
+}
+
+/*
+DeleteNumberMaskingConfiguration Delete number masking configuration
+
+This method allows you to delete a Voice number masking configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param key Masking configuration identifier.
+	@return ApiDeleteNumberMaskingConfigurationRequest
+*/
+func (a *NumberMaskingAPIService) DeleteNumberMaskingConfiguration(ctx context.Context, key string) ApiDeleteNumberMaskingConfigurationRequest {
+	return ApiDeleteNumberMaskingConfigurationRequest{
+		ApiService: a,
+		ctx:        ctx,
+		key:        key,
+	}
+}
+
+// Execute executes the request
+func (a *NumberMaskingAPIService) DeleteNumberMaskingConfigurationExecute(r ApiDeleteNumberMaskingConfigurationRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.DeleteNumberMaskingConfiguration")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/config/{key}"
+	localVarPath = strings.Replace(localVarPath, "{"+"key"+"}", url.PathEscape(parameterValueToString(r.key, "key")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiDeleteNumberMaskingCredentialsRequest struct {
+	ctx        context.Context
+	ApiService *NumberMaskingAPIService
+}
+
+func (r ApiDeleteNumberMaskingCredentialsRequest) Execute() (*http.Response, error) {
+	return r.ApiService.DeleteNumberMaskingCredentialsExecute(r)
+}
+
+/*
+DeleteNumberMaskingCredentials Delete number masking credentials
+
+This method allows you to delete Voice number masking credentials.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiDeleteNumberMaskingCredentialsRequest
+*/
+func (a *NumberMaskingAPIService) DeleteNumberMaskingCredentials(ctx context.Context) ApiDeleteNumberMaskingCredentialsRequest {
+	return ApiDeleteNumberMaskingCredentialsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+func (a *NumberMaskingAPIService) DeleteNumberMaskingCredentialsExecute(r ApiDeleteNumberMaskingCredentialsRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.DeleteNumberMaskingCredentials")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/credentials"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiGetNumberMaskingConfigurationRequest struct {
+	ctx        context.Context
+	ApiService *NumberMaskingAPIService
+	key        string
+}
+
+func (r ApiGetNumberMaskingConfigurationRequest) Execute() (*NumberMaskingSetupResponse, *http.Response, error) {
+	return r.ApiService.GetNumberMaskingConfigurationExecute(r)
+}
+
+/*
+GetNumberMaskingConfiguration Get number masking configuration
+
+This method allows you to get a Voice number masking configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param key Masking configuration identifier.
+	@return ApiGetNumberMaskingConfigurationRequest
+*/
+func (a *NumberMaskingAPIService) GetNumberMaskingConfiguration(ctx context.Context, key string) ApiGetNumberMaskingConfigurationRequest {
+	return ApiGetNumberMaskingConfigurationRequest{
+		ApiService: a,
+		ctx:        ctx,
+		key:        key,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingSetupResponse
+func (a *NumberMaskingAPIService) GetNumberMaskingConfigurationExecute(r ApiGetNumberMaskingConfigurationRequest) (*NumberMaskingSetupResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingSetupResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.GetNumberMaskingConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/config/{key}"
+	localVarPath = strings.Replace(localVarPath, "{"+"key"+"}", url.PathEscape(parameterValueToString(r.key, "key")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetNumberMaskingConfigurationsRequest struct {
+	ctx        context.Context
+	ApiService *NumberMaskingAPIService
+}
+
+func (r ApiGetNumberMaskingConfigurationsRequest) Execute() ([]NumberMaskingSetupResponse, *http.Response, error) {
+	return r.ApiService.GetNumberMaskingConfigurationsExecute(r)
+}
+
+/*
+GetNumberMaskingConfigurations Get number masking configurations
+
+This method allows you to get all voice number masking configurations.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetNumberMaskingConfigurationsRequest
+*/
+func (a *NumberMaskingAPIService) GetNumberMaskingConfigurations(ctx context.Context) ApiGetNumberMaskingConfigurationsRequest {
+	return ApiGetNumberMaskingConfigurationsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return []NumberMaskingSetupResponse
+func (a *NumberMaskingAPIService) GetNumberMaskingConfigurationsExecute(r ApiGetNumberMaskingConfigurationsRequest) ([]NumberMaskingSetupResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue []NumberMaskingSetupResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.GetNumberMaskingConfigurations")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/config"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetNumberMaskingCredentialsRequest struct {
+	ctx        context.Context
+	ApiService *NumberMaskingAPIService
+}
+
+func (r ApiGetNumberMaskingCredentialsRequest) Execute() (*NumberMaskingCredentialsResponse, *http.Response, error) {
+	return r.ApiService.GetNumberMaskingCredentialsExecute(r)
+}
+
+/*
+GetNumberMaskingCredentials Get number masking credentials
+
+This method allows you to get Voice number masking credentials.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetNumberMaskingCredentialsRequest
+*/
+func (a *NumberMaskingAPIService) GetNumberMaskingCredentials(ctx context.Context) ApiGetNumberMaskingCredentialsRequest {
+	return ApiGetNumberMaskingCredentialsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingCredentialsResponse
+func (a *NumberMaskingAPIService) GetNumberMaskingCredentialsExecute(r ApiGetNumberMaskingCredentialsRequest) (*NumberMaskingCredentialsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingCredentialsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.GetNumberMaskingCredentials")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/credentials"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateNumberMaskingConfigurationRequest struct {
+	ctx                    context.Context
+	ApiService             *NumberMaskingAPIService
+	key                    string
+	numberMaskingSetupBody *NumberMaskingSetupBody
+}
+
+func (r ApiUpdateNumberMaskingConfigurationRequest) NumberMaskingSetupBody(numberMaskingSetupBody NumberMaskingSetupBody) ApiUpdateNumberMaskingConfigurationRequest {
+	r.numberMaskingSetupBody = &numberMaskingSetupBody
+	return r
+}
+
+func (r ApiUpdateNumberMaskingConfigurationRequest) Execute() (*NumberMaskingSetupResponse, *http.Response, error) {
+	return r.ApiService.UpdateNumberMaskingConfigurationExecute(r)
+}
+
+/*
+UpdateNumberMaskingConfiguration Update number masking configuration
+
+This method allows you to update a Voice number masking configuration.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param key Masking configuration identifier.
+	@return ApiUpdateNumberMaskingConfigurationRequest
+*/
+func (a *NumberMaskingAPIService) UpdateNumberMaskingConfiguration(ctx context.Context, key string) ApiUpdateNumberMaskingConfigurationRequest {
+	return ApiUpdateNumberMaskingConfigurationRequest{
+		ApiService: a,
+		ctx:        ctx,
+		key:        key,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingSetupResponse
+func (a *NumberMaskingAPIService) UpdateNumberMaskingConfigurationExecute(r ApiUpdateNumberMaskingConfigurationRequest) (*NumberMaskingSetupResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingSetupResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.UpdateNumberMaskingConfiguration")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/config/{key}"
+	localVarPath = strings.Replace(localVarPath, "{"+"key"+"}", url.PathEscape(parameterValueToString(r.key, "key")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.numberMaskingSetupBody == nil {
+		return localVarReturnValue, nil, reportError("numberMaskingSetupBody is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.numberMaskingSetupBody
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateNumberMaskingCredentialsRequest struct {
+	ctx                          context.Context
+	ApiService                   *NumberMaskingAPIService
+	numberMaskingCredentialsBody *NumberMaskingCredentialsBody
+}
+
+func (r ApiUpdateNumberMaskingCredentialsRequest) NumberMaskingCredentialsBody(numberMaskingCredentialsBody NumberMaskingCredentialsBody) ApiUpdateNumberMaskingCredentialsRequest {
+	r.numberMaskingCredentialsBody = &numberMaskingCredentialsBody
+	return r
+}
+
+func (r ApiUpdateNumberMaskingCredentialsRequest) Execute() (*NumberMaskingCredentialsResponse, *http.Response, error) {
+	return r.ApiService.UpdateNumberMaskingCredentialsExecute(r)
+}
+
+/*
+UpdateNumberMaskingCredentials Update number masking credentials
+
+This method allows you to update Voice number masking credentials.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiUpdateNumberMaskingCredentialsRequest
+*/
+func (a *NumberMaskingAPIService) UpdateNumberMaskingCredentials(ctx context.Context) ApiUpdateNumberMaskingCredentialsRequest {
+	return ApiUpdateNumberMaskingCredentialsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingCredentialsResponse
+func (a *NumberMaskingAPIService) UpdateNumberMaskingCredentialsExecute(r ApiUpdateNumberMaskingCredentialsRequest) (*NumberMaskingCredentialsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingCredentialsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.UpdateNumberMaskingCredentials")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/2/credentials"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.numberMaskingCredentialsBody == nil {
+		return localVarReturnValue, nil, reportError("numberMaskingCredentialsBody is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.numberMaskingCredentialsBody
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUploadAudioFilesRequest struct {
+	ctx                     context.Context
+	ApiService              *NumberMaskingAPIService
+	numberMaskingUploadBody *NumberMaskingUploadBody
+}
+
+func (r ApiUploadAudioFilesRequest) NumberMaskingUploadBody(numberMaskingUploadBody NumberMaskingUploadBody) ApiUploadAudioFilesRequest {
+	r.numberMaskingUploadBody = &numberMaskingUploadBody
+	return r
+}
+
+func (r ApiUploadAudioFilesRequest) Execute() (*NumberMaskingUploadResponse, *http.Response, error) {
+	return r.ApiService.UploadAudioFilesExecute(r)
+}
+
+/*
+UploadAudioFiles Upload audio files
+
+This method allows uploading audio files that can be used on Infobip Voice platform. The method accepts either a URL or an uploaded audio file in the request body. Using both or neither will cause the request to be rejected.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiUploadAudioFilesRequest
+*/
+func (a *NumberMaskingAPIService) UploadAudioFiles(ctx context.Context) ApiUploadAudioFilesRequest {
+	return ApiUploadAudioFilesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return NumberMaskingUploadResponse
+func (a *NumberMaskingAPIService) UploadAudioFilesExecute(r ApiUploadAudioFilesRequest) (*NumberMaskingUploadResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *NumberMaskingUploadResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "NumberMaskingAPIService.UploadAudioFiles")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/masking/1/upload"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.numberMaskingUploadBody == nil {
+		return localVarReturnValue, nil, reportError("numberMaskingUploadBody is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.numberMaskingUploadBody
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/api/sms_api.go b/pkg/infobip/api/sms_api.go
index 68396e1..972d09d 100644
--- a/pkg/infobip/api/sms_api.go
+++ b/pkg/infobip/api/sms_api.go
@@ -466,8 +466,8 @@ type ApiGetOutboundSmsMessageLogsRequest struct {
 	bulkId              *[]string
 	messageId           *[]string
 	generalStatus       *MessageGeneralStatus
-	sentSince           *string
-	sentUntil           *string
+	sentSince           *Time
+	sentUntil           *Time
 	limit               *int32
 	entityId            *string
 	applicationId       *string
@@ -516,13 +516,13 @@ func (r ApiGetOutboundSmsMessageLogsRequest) GeneralStatus(generalStatus Message
 }
 
 // The logs will only include messages sent after this date. Use it together with sentUntil to return a time range or if you want to fetch more than 1000 logs allowed per call. Has the following format: yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ.
-func (r ApiGetOutboundSmsMessageLogsRequest) SentSince(sentSince string) ApiGetOutboundSmsMessageLogsRequest {
+func (r ApiGetOutboundSmsMessageLogsRequest) SentSince(sentSince Time) ApiGetOutboundSmsMessageLogsRequest {
 	r.sentSince = &sentSince
 	return r
 }
 
 // The logs will only include messages sent before this date. Use it together with sentSince to return a time range or if you want to fetch more than 1000 logs allowed per call. Has the following format: yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ.
-func (r ApiGetOutboundSmsMessageLogsRequest) SentUntil(sentUntil string) ApiGetOutboundSmsMessageLogsRequest {
+func (r ApiGetOutboundSmsMessageLogsRequest) SentUntil(sentUntil Time) ApiGetOutboundSmsMessageLogsRequest {
 	r.sentUntil = &sentUntil
 	return r
 }
diff --git a/pkg/infobip/api/tfa_api.go b/pkg/infobip/api/tfa_api.go
index 5e2dbb5..a0dd8b4 100644
--- a/pkg/infobip/api/tfa_api.go
+++ b/pkg/infobip/api/tfa_api.go
@@ -466,18 +466,18 @@ func (a *TfaAPIService) CreateTfaEmailMessageTemplateExecute(r ApiCreateTfaEmail
 }
 
 type ApiCreateTfaMessageTemplateRequest struct {
-	ctx                            context.Context
-	ApiService                     *TfaAPIService
-	appId                          string
-	createSmsOrVoiceMessageRequest *CreateSmsOrVoiceMessageRequest
+	ctx                  context.Context
+	ApiService           *TfaAPIService
+	appId                string
+	createMessageRequest *CreateMessageRequest
 }
 
-func (r ApiCreateTfaMessageTemplateRequest) CreateSmsOrVoiceMessageRequest(createSmsOrVoiceMessageRequest CreateSmsOrVoiceMessageRequest) ApiCreateTfaMessageTemplateRequest {
-	r.createSmsOrVoiceMessageRequest = &createSmsOrVoiceMessageRequest
+func (r ApiCreateTfaMessageTemplateRequest) CreateMessageRequest(createMessageRequest CreateMessageRequest) ApiCreateTfaMessageTemplateRequest {
+	r.createMessageRequest = &createMessageRequest
 	return r
 }
 
-func (r ApiCreateTfaMessageTemplateRequest) Execute() (*SmsOrVoiceMessage, *http.Response, error) {
+func (r ApiCreateTfaMessageTemplateRequest) Execute() (*TemplateMessage, *http.Response, error) {
 	return r.ApiService.CreateTfaMessageTemplateExecute(r)
 }
 
@@ -500,13 +500,13 @@ func (a *TfaAPIService) CreateTfaMessageTemplate(ctx context.Context, appId stri
 
 // Execute executes the request
 //
-//	@return SmsOrVoiceMessage
-func (a *TfaAPIService) CreateTfaMessageTemplateExecute(r ApiCreateTfaMessageTemplateRequest) (*SmsOrVoiceMessage, *http.Response, error) {
+//	@return TemplateMessage
+func (a *TfaAPIService) CreateTfaMessageTemplateExecute(r ApiCreateTfaMessageTemplateRequest) (*TemplateMessage, *http.Response, error) {
 	var (
 		localVarHTTPMethod  = http.MethodPost
 		localVarPostBody    interface{}
 		formFiles           []formFile
-		localVarReturnValue *SmsOrVoiceMessage
+		localVarReturnValue *TemplateMessage
 	)
 
 	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "TfaAPIService.CreateTfaMessageTemplate")
@@ -520,8 +520,8 @@ func (a *TfaAPIService) CreateTfaMessageTemplateExecute(r ApiCreateTfaMessageTem
 	localVarHeaderParams := make(map[string]string)
 	localVarQueryParams := url.Values{}
 	localVarFormParams := url.Values{}
-	if r.createSmsOrVoiceMessageRequest == nil {
-		return localVarReturnValue, nil, reportError("createSmsOrVoiceMessageRequest is required and must be specified")
+	if r.createMessageRequest == nil {
+		return localVarReturnValue, nil, reportError("createMessageRequest is required and must be specified")
 	}
 
 	// to determine the Content-Type header
@@ -542,7 +542,7 @@ func (a *TfaAPIService) CreateTfaMessageTemplateExecute(r ApiCreateTfaMessageTem
 		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
 	}
 	// body params
-	localVarPostBody = r.createSmsOrVoiceMessageRequest
+	localVarPostBody = r.createMessageRequest
 	if r.ctx != nil {
 		// API Key Authentication
 		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
@@ -656,7 +656,7 @@ func (a *TfaAPIService) CreateTfaMessageTemplateExecute(r ApiCreateTfaMessageTem
 			newErr.model = v
 			return localVarReturnValue, localVarHTTPResponse, newErr
 		}
-		var v SmsOrVoiceMessage
+		var v TemplateMessage
 		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
 		if err != nil {
 			newErr.error = err.Error()
@@ -3385,19 +3385,19 @@ func (a *TfaAPIService) UpdateTfaEmailMessageTemplateExecute(r ApiUpdateTfaEmail
 }
 
 type ApiUpdateTfaMessageTemplateRequest struct {
-	ctx                            context.Context
-	ApiService                     *TfaAPIService
-	appId                          string
-	msgId                          string
-	updateSmsOrVoiceMessageRequest *UpdateSmsOrVoiceMessageRequest
+	ctx                  context.Context
+	ApiService           *TfaAPIService
+	appId                string
+	msgId                string
+	updateMessageRequest *UpdateMessageRequest
 }
 
-func (r ApiUpdateTfaMessageTemplateRequest) UpdateSmsOrVoiceMessageRequest(updateSmsOrVoiceMessageRequest UpdateSmsOrVoiceMessageRequest) ApiUpdateTfaMessageTemplateRequest {
-	r.updateSmsOrVoiceMessageRequest = &updateSmsOrVoiceMessageRequest
+func (r ApiUpdateTfaMessageTemplateRequest) UpdateMessageRequest(updateMessageRequest UpdateMessageRequest) ApiUpdateTfaMessageTemplateRequest {
+	r.updateMessageRequest = &updateMessageRequest
 	return r
 }
 
-func (r ApiUpdateTfaMessageTemplateRequest) Execute() (*SmsOrVoiceMessage, *http.Response, error) {
+func (r ApiUpdateTfaMessageTemplateRequest) Execute() (*TemplateMessage, *http.Response, error) {
 	return r.ApiService.UpdateTfaMessageTemplateExecute(r)
 }
 
@@ -3422,13 +3422,13 @@ func (a *TfaAPIService) UpdateTfaMessageTemplate(ctx context.Context, appId stri
 
 // Execute executes the request
 //
-//	@return SmsOrVoiceMessage
-func (a *TfaAPIService) UpdateTfaMessageTemplateExecute(r ApiUpdateTfaMessageTemplateRequest) (*SmsOrVoiceMessage, *http.Response, error) {
+//	@return TemplateMessage
+func (a *TfaAPIService) UpdateTfaMessageTemplateExecute(r ApiUpdateTfaMessageTemplateRequest) (*TemplateMessage, *http.Response, error) {
 	var (
 		localVarHTTPMethod  = http.MethodPut
 		localVarPostBody    interface{}
 		formFiles           []formFile
-		localVarReturnValue *SmsOrVoiceMessage
+		localVarReturnValue *TemplateMessage
 	)
 
 	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "TfaAPIService.UpdateTfaMessageTemplate")
@@ -3443,8 +3443,8 @@ func (a *TfaAPIService) UpdateTfaMessageTemplateExecute(r ApiUpdateTfaMessageTem
 	localVarHeaderParams := make(map[string]string)
 	localVarQueryParams := url.Values{}
 	localVarFormParams := url.Values{}
-	if r.updateSmsOrVoiceMessageRequest == nil {
-		return localVarReturnValue, nil, reportError("updateSmsOrVoiceMessageRequest is required and must be specified")
+	if r.updateMessageRequest == nil {
+		return localVarReturnValue, nil, reportError("updateMessageRequest is required and must be specified")
 	}
 
 	// to determine the Content-Type header
@@ -3465,7 +3465,7 @@ func (a *TfaAPIService) UpdateTfaMessageTemplateExecute(r ApiUpdateTfaMessageTem
 		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
 	}
 	// body params
-	localVarPostBody = r.updateSmsOrVoiceMessageRequest
+	localVarPostBody = r.updateMessageRequest
 	if r.ctx != nil {
 		// API Key Authentication
 		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
@@ -3579,7 +3579,7 @@ func (a *TfaAPIService) UpdateTfaMessageTemplateExecute(r ApiUpdateTfaMessageTem
 			newErr.model = v
 			return localVarReturnValue, localVarHTTPResponse, newErr
 		}
-		var v SmsOrVoiceMessage
+		var v TemplateMessage
 		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
 		if err != nil {
 			newErr.error = err.Error()
diff --git a/pkg/infobip/api/voice_api.go b/pkg/infobip/api/voice_api.go
new file mode 100644
index 0000000..407b9a6
--- /dev/null
+++ b/pkg/infobip/api/voice_api.go
@@ -0,0 +1,3785 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package api
+
+import (
+	"bytes"
+	"context"
+	"io"
+	"net/http"
+	"net/url"
+	"os"
+	"reflect"
+	"strings"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+)
+
+// VoiceAPIService VoiceAPI service
+type VoiceAPIService service
+
+// ApiVoiceAPIRequest[T any] interface
+type VoiceAPIRequest[T any] interface {
+	Execute() (*T, *http.Response, error)
+}
+
+type ApiCreateAVoiceIvrScenarioRequest struct {
+	ctx                   context.Context
+	ApiService            *VoiceAPIService
+	updateScenarioRequest *UpdateScenarioRequest
+}
+
+func (r ApiCreateAVoiceIvrScenarioRequest) UpdateScenarioRequest(updateScenarioRequest UpdateScenarioRequest) ApiCreateAVoiceIvrScenarioRequest {
+	r.updateScenarioRequest = &updateScenarioRequest
+	return r
+}
+
+func (r ApiCreateAVoiceIvrScenarioRequest) Execute() (*UpdateScenarioResponse, *http.Response, error) {
+	return r.ApiService.CreateAVoiceIvrScenarioExecute(r)
+}
+
+/*
+CreateAVoiceIvrScenario Create Voice IVR Scenarios
+
+This method allows you to create a Voice IVR Scenario.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiCreateAVoiceIvrScenarioRequest
+*/
+func (a *VoiceAPIService) CreateAVoiceIvrScenario(ctx context.Context) ApiCreateAVoiceIvrScenarioRequest {
+	return ApiCreateAVoiceIvrScenarioRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return UpdateScenarioResponse
+func (a *VoiceAPIService) CreateAVoiceIvrScenarioExecute(r ApiCreateAVoiceIvrScenarioRequest) (*UpdateScenarioResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *UpdateScenarioResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.CreateAVoiceIvrScenario")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/scenarios"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.updateScenarioRequest == nil {
+		return localVarReturnValue, nil, reportError("updateScenarioRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.updateScenarioRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v UpdateScenarioResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiDeleteAVoiceIvrScenarioRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	id         string
+}
+
+func (r ApiDeleteAVoiceIvrScenarioRequest) Execute() (*http.Response, error) {
+	return r.ApiService.DeleteAVoiceIvrScenarioExecute(r)
+}
+
+/*
+DeleteAVoiceIvrScenario Delete Voice IVR Scenarios
+
+This method allows you to delete a Voice IVR Scenario.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id Scenario identifier (for example E83E787CF2613450157ADA3476171E3F).
+	@return ApiDeleteAVoiceIvrScenarioRequest
+*/
+func (a *VoiceAPIService) DeleteAVoiceIvrScenario(ctx context.Context, id string) ApiDeleteAVoiceIvrScenarioRequest {
+	return ApiDeleteAVoiceIvrScenarioRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+func (a *VoiceAPIService) DeleteAVoiceIvrScenarioExecute(r ApiDeleteAVoiceIvrScenarioRequest) (*http.Response, error) {
+	var (
+		localVarHTTPMethod = http.MethodDelete
+		localVarPostBody   interface{}
+		formFiles          []formFile
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.DeleteAVoiceIvrScenario")
+	if err != nil {
+		return nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/scenarios/{id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+		}
+		return localVarHTTPResponse, newErr
+	}
+
+	return localVarHTTPResponse, nil
+}
+
+type ApiDownloadVoiceIvrRecordedFileRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	id         string
+}
+
+func (r ApiDownloadVoiceIvrRecordedFileRequest) Execute() (*os.File, *http.Response, error) {
+	return r.ApiService.DownloadVoiceIvrRecordedFileExecute(r)
+}
+
+/*
+DownloadVoiceIvrRecordedFile Download Voice IVR Recorded File.
+
+This method allows you to download Voice IVR Recorded Audio File. The returned audio data is encoded as PCM 16bit 8kHz WAVE audio. The files are available on Infobip servers for 2 months.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id File ID to download.
+	@return ApiDownloadVoiceIvrRecordedFileRequest
+*/
+func (a *VoiceAPIService) DownloadVoiceIvrRecordedFile(ctx context.Context, id string) ApiDownloadVoiceIvrRecordedFileRequest {
+	return ApiDownloadVoiceIvrRecordedFileRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+//
+//	@return *os.File
+func (a *VoiceAPIService) DownloadVoiceIvrRecordedFileExecute(r ApiDownloadVoiceIvrRecordedFileRequest) (*os.File, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *os.File
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.DownloadVoiceIvrRecordedFile")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/files/{id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/octet-stream", "application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v *os.File
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetAVoiceIvrScenarioRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	id         string
+}
+
+func (r ApiGetAVoiceIvrScenarioRequest) Execute() (*UpdateScenarioResponse, *http.Response, error) {
+	return r.ApiService.GetAVoiceIvrScenarioExecute(r)
+}
+
+/*
+GetAVoiceIvrScenario Get a Voice IVR Scenario
+
+This method allows you to get a Voice IVR Scenario.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id Scenario identifier.
+	@return ApiGetAVoiceIvrScenarioRequest
+*/
+func (a *VoiceAPIService) GetAVoiceIvrScenario(ctx context.Context, id string) ApiGetAVoiceIvrScenarioRequest {
+	return ApiGetAVoiceIvrScenarioRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+//
+//	@return UpdateScenarioResponse
+func (a *VoiceAPIService) GetAVoiceIvrScenarioExecute(r ApiGetAVoiceIvrScenarioRequest) (*UpdateScenarioResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *UpdateScenarioResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.GetAVoiceIvrScenario")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/scenarios/{id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v UpdateScenarioResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSentBulksRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	bulkId     *string
+}
+
+// Unique ID of the bulk.
+func (r ApiGetSentBulksRequest) BulkId(bulkId string) ApiGetSentBulksRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiGetSentBulksRequest) Execute() (*BulkResponse, *http.Response, error) {
+	return r.ApiService.GetSentBulksExecute(r)
+}
+
+/*
+GetSentBulks Get sent bulks
+
+This method will return information about the scheduled time for a unique bulk message. Canceling and rescheduling are supported only when the Fully featured voice message request contains at least one message and the message bulkId is unique.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetSentBulksRequest
+*/
+func (a *VoiceAPIService) GetSentBulks(ctx context.Context) ApiGetSentBulksRequest {
+	return ApiGetSentBulksRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkResponse
+func (a *VoiceAPIService) GetSentBulksExecute(r ApiGetSentBulksRequest) (*BulkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.GetSentBulks")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/bulks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v BulkResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSentBulksStatusRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	bulkId     *string
+}
+
+// Unique ID of the bulk.
+func (r ApiGetSentBulksStatusRequest) BulkId(bulkId string) ApiGetSentBulksStatusRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiGetSentBulksStatusRequest) Execute() (*BulkStatusResponse, *http.Response, error) {
+	return r.ApiService.GetSentBulksStatusExecute(r)
+}
+
+/*
+GetSentBulksStatus Get sent bulk's status
+
+This method allows you to get status of scheduled TTS bulk.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetSentBulksStatusRequest
+*/
+func (a *VoiceAPIService) GetSentBulksStatus(ctx context.Context) ApiGetSentBulksStatusRequest {
+	return ApiGetSentBulksStatusRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatusResponse
+func (a *VoiceAPIService) GetSentBulksStatusExecute(r ApiGetSentBulksStatusRequest) (*BulkStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.GetSentBulksStatus")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/bulks/status"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v BulkStatusResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetSentVoiceLogsRequest struct {
+	ctx           context.Context
+	ApiService    *VoiceAPIService
+	from          *string
+	to            *string
+	bulkId        *[]string
+	messageId     *[]string
+	generalStatus *IpCoreGeneralStatus
+	sentSince     *Time
+	sentUntil     *Time
+	limit         *int32
+	mcc           *string
+	mnc           *string
+}
+
+// The sender ID which can be alphanumeric or numeric.
+func (r ApiGetSentVoiceLogsRequest) From(from string) ApiGetSentVoiceLogsRequest {
+	r.from = &from
+	return r
+}
+
+// Destination address of the voice message.
+func (r ApiGetSentVoiceLogsRequest) To(to string) ApiGetSentVoiceLogsRequest {
+	r.to = &to
+	return r
+}
+
+// The ID which uniquely identifies the request.
+func (r ApiGetSentVoiceLogsRequest) BulkId(bulkId []string) ApiGetSentVoiceLogsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// The ID that uniquely identifies the message sent.
+func (r ApiGetSentVoiceLogsRequest) MessageId(messageId []string) ApiGetSentVoiceLogsRequest {
+	r.messageId = &messageId
+	return r
+}
+
+// Sent voice message status group. Indicates whether the message has been successfully sent, not sent, delivered, not delivered, waiting for delivery or any other possible status.
+func (r ApiGetSentVoiceLogsRequest) GeneralStatus(generalStatus IpCoreGeneralStatus) ApiGetSentVoiceLogsRequest {
+	r.generalStatus = &generalStatus
+	return r
+}
+
+// Lower limit on date and time of sending a Voice message. Has the following format: yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX.
+func (r ApiGetSentVoiceLogsRequest) SentSince(sentSince Time) ApiGetSentVoiceLogsRequest {
+	r.sentSince = &sentSince
+	return r
+}
+
+// Upper limit on date and time of sending a Voice message. Has the following format: yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSXXX.
+func (r ApiGetSentVoiceLogsRequest) SentUntil(sentUntil Time) ApiGetSentVoiceLogsRequest {
+	r.sentUntil = &sentUntil
+	return r
+}
+
+// Maximal number of messages in the returned logs. Default value is 50.
+func (r ApiGetSentVoiceLogsRequest) Limit(limit int32) ApiGetSentVoiceLogsRequest {
+	r.limit = &limit
+	return r
+}
+
+// Mobile country code.
+func (r ApiGetSentVoiceLogsRequest) Mcc(mcc string) ApiGetSentVoiceLogsRequest {
+	r.mcc = &mcc
+	return r
+}
+
+// Mobile network code.
+func (r ApiGetSentVoiceLogsRequest) Mnc(mnc string) ApiGetSentVoiceLogsRequest {
+	r.mnc = &mnc
+	return r
+}
+
+func (r ApiGetSentVoiceLogsRequest) Execute() (*LogsResponse, *http.Response, error) {
+	return r.ApiService.GetSentVoiceLogsExecute(r)
+}
+
+/*
+GetSentVoiceLogs Get sent Voice logs
+
+This method allows you to get logs of sent Voice messages. Voice logs are available for the last 48 hours!
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetSentVoiceLogsRequest
+*/
+func (a *VoiceAPIService) GetSentVoiceLogs(ctx context.Context) ApiGetSentVoiceLogsRequest {
+	return ApiGetSentVoiceLogsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return LogsResponse
+func (a *VoiceAPIService) GetSentVoiceLogsExecute(r ApiGetSentVoiceLogsRequest) (*LogsResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *LogsResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.GetSentVoiceLogs")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/logs"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.from != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "from", r.from, "form", "")
+	}
+	if r.to != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "to", r.to, "form", "")
+	}
+	if r.bulkId != nil {
+		t := *r.bulkId
+		if reflect.TypeOf(t).Kind() == reflect.Slice {
+			s := reflect.ValueOf(t)
+			for i := 0; i < s.Len(); i++ {
+				parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", s.Index(i).Interface(), "form", "multi")
+			}
+		} else {
+			parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", t, "form", "multi")
+		}
+	}
+	if r.messageId != nil {
+		t := *r.messageId
+		if reflect.TypeOf(t).Kind() == reflect.Slice {
+			s := reflect.ValueOf(t)
+			for i := 0; i < s.Len(); i++ {
+				parameterAddToHeaderOrQuery(localVarQueryParams, "messageId", s.Index(i).Interface(), "form", "multi")
+			}
+		} else {
+			parameterAddToHeaderOrQuery(localVarQueryParams, "messageId", t, "form", "multi")
+		}
+	}
+	if r.generalStatus != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "generalStatus", r.generalStatus, "form", "")
+	}
+	if r.sentSince != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "sentSince", r.sentSince, "form", "")
+	}
+	if r.sentUntil != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "sentUntil", r.sentUntil, "form", "")
+	}
+	if r.limit != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "limit", r.limit, "form", "")
+	}
+	if r.mcc != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "mcc", r.mcc, "form", "")
+	}
+	if r.mnc != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "mnc", r.mnc, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v LogsResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetVoiceDeliveryReportsRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	bulkId     *string
+	messageId  *string
+	limit      *int32
+}
+
+// The ID that uniquely identifies the request. Bulk ID will be received only when you send a message to more than one destination addresses.
+func (r ApiGetVoiceDeliveryReportsRequest) BulkId(bulkId string) ApiGetVoiceDeliveryReportsRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+// The ID that uniquely identifies the message sent.
+func (r ApiGetVoiceDeliveryReportsRequest) MessageId(messageId string) ApiGetVoiceDeliveryReportsRequest {
+	r.messageId = &messageId
+	return r
+}
+
+// The maximum number of returned delivery reports. Default value is 50.
+func (r ApiGetVoiceDeliveryReportsRequest) Limit(limit int32) ApiGetVoiceDeliveryReportsRequest {
+	r.limit = &limit
+	return r
+}
+
+func (r ApiGetVoiceDeliveryReportsRequest) Execute() (*ReportResponse, *http.Response, error) {
+	return r.ApiService.GetVoiceDeliveryReportsExecute(r)
+}
+
+/*
+GetVoiceDeliveryReports Get Voice Delivery Reports
+
+This method allows you to get delivery reports for sent Voice messages, outbound IVR or Click-to-call (without notifyUrl request parameter). Delivery reports are returned only once. Additional delivery report request will return an empty collection.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiGetVoiceDeliveryReportsRequest
+*/
+func (a *VoiceAPIService) GetVoiceDeliveryReports(ctx context.Context) ApiGetVoiceDeliveryReportsRequest {
+	return ApiGetVoiceDeliveryReportsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return ReportResponse
+func (a *VoiceAPIService) GetVoiceDeliveryReportsExecute(r ApiGetVoiceDeliveryReportsRequest) (*ReportResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *ReportResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.GetVoiceDeliveryReports")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/1/reports"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.bulkId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	}
+	if r.messageId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "messageId", r.messageId, "form", "")
+	}
+	if r.limit != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "limit", r.limit, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v ReportResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiGetVoicesRequest struct {
+	ctx           context.Context
+	ApiService    *VoiceAPIService
+	language      string
+	includeNeural *bool
+}
+
+// Indicates whether neural voices should be included in the response. If set to &#x60;false&#x60; or omitted, only standard voices will be included in the response. If set to &#x60;true&#x60;, both standard and neural voices will be included in the response.
+func (r ApiGetVoicesRequest) IncludeNeural(includeNeural bool) ApiGetVoicesRequest {
+	r.includeNeural = &includeNeural
+	return r
+}
+
+func (r ApiGetVoicesRequest) Execute() (*GetVoicesResponse, *http.Response, error) {
+	return r.ApiService.GetVoicesExecute(r)
+}
+
+/*
+GetVoices Get Voices
+
+This method allows you to retrieve all voices for the given language
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param language Represents the language abbreviation. (e.g. `en`). You can find the list of supported languages in corresponding section for sending voice message.
+	@return ApiGetVoicesRequest
+*/
+func (a *VoiceAPIService) GetVoices(ctx context.Context, language string) ApiGetVoicesRequest {
+	return ApiGetVoicesRequest{
+		ApiService: a,
+		ctx:        ctx,
+		language:   language,
+	}
+}
+
+// Execute executes the request
+//
+//	@return GetVoicesResponse
+func (a *VoiceAPIService) GetVoicesExecute(r ApiGetVoicesRequest) (*GetVoicesResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *GetVoicesResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.GetVoices")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/voices/{language}"
+	localVarPath = strings.Replace(localVarPath, "{"+"language"+"}", url.PathEscape(parameterValueToString(r.language, "language")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.includeNeural != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "includeNeural", r.includeNeural, "form", "")
+	} else {
+		var defaultValue bool = false
+		r.includeNeural = &defaultValue
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v GetVoicesResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiManageSentBulksStatusRequest struct {
+	ctx               context.Context
+	ApiService        *VoiceAPIService
+	bulkId            *string
+	bulkStatusRequest *BulkStatusRequest
+}
+
+// Unique ID of the bulk.
+func (r ApiManageSentBulksStatusRequest) BulkId(bulkId string) ApiManageSentBulksStatusRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiManageSentBulksStatusRequest) BulkStatusRequest(bulkStatusRequest BulkStatusRequest) ApiManageSentBulksStatusRequest {
+	r.bulkStatusRequest = &bulkStatusRequest
+	return r
+}
+
+func (r ApiManageSentBulksStatusRequest) Execute() (*BulkStatusResponse, *http.Response, error) {
+	return r.ApiService.ManageSentBulksStatusExecute(r)
+}
+
+/*
+ManageSentBulksStatus Manage sent bulk's status
+
+This method allows you to manage statuses of scheduled TTS bulk. Messages scheduled with the sendAt or sending speed parameter can be paused, resumed or canceled by changing the message status, or rescheduled using the bulkId parameter as an identifier. Only voice messages that were not already sent can be canceled.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiManageSentBulksStatusRequest
+*/
+func (a *VoiceAPIService) ManageSentBulksStatus(ctx context.Context) ApiManageSentBulksStatusRequest {
+	return ApiManageSentBulksStatusRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkStatusResponse
+func (a *VoiceAPIService) ManageSentBulksStatusExecute(r ApiManageSentBulksStatusRequest) (*BulkStatusResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkStatusResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.ManageSentBulksStatus")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/bulks/status"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+	if r.bulkStatusRequest == nil {
+		return localVarReturnValue, nil, reportError("bulkStatusRequest is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.bulkStatusRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v BulkStatusResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiRescheduleSentBulkRequest struct {
+	ctx         context.Context
+	ApiService  *VoiceAPIService
+	bulkId      *string
+	bulkRequest *BulkRequest
+}
+
+// Unique ID of the bulk.
+func (r ApiRescheduleSentBulkRequest) BulkId(bulkId string) ApiRescheduleSentBulkRequest {
+	r.bulkId = &bulkId
+	return r
+}
+
+func (r ApiRescheduleSentBulkRequest) BulkRequest(bulkRequest BulkRequest) ApiRescheduleSentBulkRequest {
+	r.bulkRequest = &bulkRequest
+	return r
+}
+
+func (r ApiRescheduleSentBulkRequest) Execute() (*BulkResponse, *http.Response, error) {
+	return r.ApiService.RescheduleSentBulkExecute(r)
+}
+
+/*
+RescheduleSentBulk Reschedule sent bulk
+
+This method allows you to reschedule scheduled TTS bulk. Messages scheduled with the sendAt or Sending speed parameter can be paused, resumed or canceled by changing the message status, or rescheduled using the bulkId parameter as an identifier.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiRescheduleSentBulkRequest
+*/
+func (a *VoiceAPIService) RescheduleSentBulk(ctx context.Context) ApiRescheduleSentBulkRequest {
+	return ApiRescheduleSentBulkRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return BulkResponse
+func (a *VoiceAPIService) RescheduleSentBulkExecute(r ApiRescheduleSentBulkRequest) (*BulkResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *BulkResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.RescheduleSentBulk")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/bulks"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.bulkId == nil {
+		return localVarReturnValue, nil, reportError("bulkId is required and must be specified")
+	}
+	if r.bulkRequest == nil {
+		return localVarReturnValue, nil, reportError("bulkRequest is required and must be specified")
+	}
+
+	parameterAddToHeaderOrQuery(localVarQueryParams, "bulkId", r.bulkId, "form", "")
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.bulkRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v BulkResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSearchVoiceIvrRecordedFilesRequest struct {
+	ctx        context.Context
+	ApiService *VoiceAPIService
+	page       *int32
+	pageSize   *int32
+	messageId  *string
+	number     *string
+}
+
+// Page number you want to see.
+func (r ApiSearchVoiceIvrRecordedFilesRequest) Page(page int32) ApiSearchVoiceIvrRecordedFilesRequest {
+	r.page = &page
+	return r
+}
+
+// Size of the page you want to see.
+func (r ApiSearchVoiceIvrRecordedFilesRequest) PageSize(pageSize int32) ApiSearchVoiceIvrRecordedFilesRequest {
+	r.pageSize = &pageSize
+	return r
+}
+
+// The message ID to search by.
+func (r ApiSearchVoiceIvrRecordedFilesRequest) MessageId(messageId string) ApiSearchVoiceIvrRecordedFilesRequest {
+	r.messageId = &messageId
+	return r
+}
+
+// The called phone number to search by.
+func (r ApiSearchVoiceIvrRecordedFilesRequest) Number(number string) ApiSearchVoiceIvrRecordedFilesRequest {
+	r.number = &number
+	return r
+}
+
+func (r ApiSearchVoiceIvrRecordedFilesRequest) Execute() ([]RecordedAudioFilesResponse, *http.Response, error) {
+	return r.ApiService.SearchVoiceIvrRecordedFilesExecute(r)
+}
+
+/*
+SearchVoiceIvrRecordedFiles Search Voice IVR Recorded Files
+
+This method allows you to search Voice IVR Recorded Audio Files.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSearchVoiceIvrRecordedFilesRequest
+*/
+func (a *VoiceAPIService) SearchVoiceIvrRecordedFiles(ctx context.Context) ApiSearchVoiceIvrRecordedFilesRequest {
+	return ApiSearchVoiceIvrRecordedFilesRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return []RecordedAudioFilesResponse
+func (a *VoiceAPIService) SearchVoiceIvrRecordedFilesExecute(r ApiSearchVoiceIvrRecordedFilesRequest) ([]RecordedAudioFilesResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue []RecordedAudioFilesResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.SearchVoiceIvrRecordedFiles")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/files"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	}
+	if r.pageSize != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "pageSize", r.pageSize, "form", "")
+	}
+	if r.messageId != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "messageId", r.messageId, "form", "")
+	}
+	if r.number != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "number", r.number, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v []RecordedAudioFilesResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSearchVoiceIvrScenariosRequest struct {
+	ctx                context.Context
+	ApiService         *VoiceAPIService
+	page               *int32
+	pageSize           *int32
+	name               *string
+	label              *string
+	lastUsageDateSince *string
+	lastUsageDateUntil *string
+}
+
+// Page number you want to see. Default is 1.
+func (r ApiSearchVoiceIvrScenariosRequest) Page(page int32) ApiSearchVoiceIvrScenariosRequest {
+	r.page = &page
+	return r
+}
+
+// Size of the page you want to see. Default is 50.
+func (r ApiSearchVoiceIvrScenariosRequest) PageSize(pageSize int32) ApiSearchVoiceIvrScenariosRequest {
+	r.pageSize = &pageSize
+	return r
+}
+
+// The name to search by.
+func (r ApiSearchVoiceIvrScenariosRequest) Name(name string) ApiSearchVoiceIvrScenariosRequest {
+	r.name = &name
+	return r
+}
+
+// The label of scenario to search by.
+func (r ApiSearchVoiceIvrScenariosRequest) Label(label string) ApiSearchVoiceIvrScenariosRequest {
+	r.label = &label
+	return r
+}
+
+// Lower limit of last usage date in &#x60;yyyy-MM-dd&#x60; format. Note: For scenarios where &#x60;lastUsageDate&#x60; is &#x60;null&#x60;, filtering matches &#x60;createTime&#x60;.
+func (r ApiSearchVoiceIvrScenariosRequest) LastUsageDateSince(lastUsageDateSince string) ApiSearchVoiceIvrScenariosRequest {
+	r.lastUsageDateSince = &lastUsageDateSince
+	return r
+}
+
+// Upper limit of last usage date &#x60;yyyy-MM-dd&#x60; format. Note: For scenarios where &#x60;lastUsageDate&#x60; is &#x60;null&#x60;, filtering matches &#x60;createTime&#x60;.
+func (r ApiSearchVoiceIvrScenariosRequest) LastUsageDateUntil(lastUsageDateUntil string) ApiSearchVoiceIvrScenariosRequest {
+	r.lastUsageDateUntil = &lastUsageDateUntil
+	return r
+}
+
+func (r ApiSearchVoiceIvrScenariosRequest) Execute() ([]SearchResponse, *http.Response, error) {
+	return r.ApiService.SearchVoiceIvrScenariosExecute(r)
+}
+
+/*
+SearchVoiceIvrScenarios Search Voice IVR Scenarios
+
+This method allows you to search Voice IVR Scenarios by name. To get a list of all IVR Scenarios, make a request without any parameters.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSearchVoiceIvrScenariosRequest
+*/
+func (a *VoiceAPIService) SearchVoiceIvrScenarios(ctx context.Context) ApiSearchVoiceIvrScenariosRequest {
+	return ApiSearchVoiceIvrScenariosRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return []SearchResponse
+func (a *VoiceAPIService) SearchVoiceIvrScenariosExecute(r ApiSearchVoiceIvrScenariosRequest) ([]SearchResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodGet
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue []SearchResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.SearchVoiceIvrScenarios")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/scenarios"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+
+	if r.page != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "page", r.page, "form", "")
+	}
+	if r.pageSize != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "pageSize", r.pageSize, "form", "")
+	}
+	if r.name != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "name", r.name, "form", "")
+	}
+	if r.label != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "label", r.label, "form", "")
+	}
+	if r.lastUsageDateSince != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "lastUsageDateSince", r.lastUsageDateSince, "form", "")
+	}
+	if r.lastUsageDateUntil != nil {
+		parameterAddToHeaderOrQuery(localVarQueryParams, "lastUsageDateUntil", r.lastUsageDateUntil, "form", "")
+	}
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v []SearchResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSendAdvancedVoiceTtsRequest struct {
+	ctx                         context.Context
+	ApiService                  *VoiceAPIService
+	advancedVoiceMessageRequest *AdvancedVoiceMessageRequest
+}
+
+func (r ApiSendAdvancedVoiceTtsRequest) AdvancedVoiceMessageRequest(advancedVoiceMessageRequest AdvancedVoiceMessageRequest) ApiSendAdvancedVoiceTtsRequest {
+	r.advancedVoiceMessageRequest = &advancedVoiceMessageRequest
+	return r
+}
+
+func (r ApiSendAdvancedVoiceTtsRequest) Execute() (*StandardVoiceResponse, *http.Response, error) {
+	return r.ApiService.SendAdvancedVoiceTtsExecute(r)
+}
+
+/*
+SendAdvancedVoiceTts Send advanced voice message
+
+This method allows you to send advanced voice messages to one or more destination addresses.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSendAdvancedVoiceTtsRequest
+*/
+func (a *VoiceAPIService) SendAdvancedVoiceTts(ctx context.Context) ApiSendAdvancedVoiceTtsRequest {
+	return ApiSendAdvancedVoiceTtsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return StandardVoiceResponse
+func (a *VoiceAPIService) SendAdvancedVoiceTtsExecute(r ApiSendAdvancedVoiceTtsRequest) (*StandardVoiceResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *StandardVoiceResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.SendAdvancedVoiceTts")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/advanced"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.advancedVoiceMessageRequest == nil {
+		return localVarReturnValue, nil, reportError("advancedVoiceMessageRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.advancedVoiceMessageRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v StandardVoiceResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSendMultipleVoiceTtsRequest struct {
+	ctx          context.Context
+	ApiService   *VoiceAPIService
+	multiRequest *MultiRequest
+}
+
+func (r ApiSendMultipleVoiceTtsRequest) MultiRequest(multiRequest MultiRequest) ApiSendMultipleVoiceTtsRequest {
+	r.multiRequest = &multiRequest
+	return r
+}
+
+func (r ApiSendMultipleVoiceTtsRequest) Execute() (*StandardVoiceResponse, *http.Response, error) {
+	return r.ApiService.SendMultipleVoiceTtsExecute(r)
+}
+
+/*
+SendMultipleVoiceTts Send multiple voice messages
+
+This method allows you to send multiple voice messages to one or more destination addresses.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSendMultipleVoiceTtsRequest
+*/
+func (a *VoiceAPIService) SendMultipleVoiceTts(ctx context.Context) ApiSendMultipleVoiceTtsRequest {
+	return ApiSendMultipleVoiceTtsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return StandardVoiceResponse
+func (a *VoiceAPIService) SendMultipleVoiceTtsExecute(r ApiSendMultipleVoiceTtsRequest) (*StandardVoiceResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *StandardVoiceResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.SendMultipleVoiceTts")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/multi"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.multiRequest == nil {
+		return localVarReturnValue, nil, reportError("multiRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.multiRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v StandardVoiceResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSendSingleVoiceTtsRequest struct {
+	ctx           context.Context
+	ApiService    *VoiceAPIService
+	singleRequest *SingleRequest
+}
+
+func (r ApiSendSingleVoiceTtsRequest) SingleRequest(singleRequest SingleRequest) ApiSendSingleVoiceTtsRequest {
+	r.singleRequest = &singleRequest
+	return r
+}
+
+func (r ApiSendSingleVoiceTtsRequest) Execute() (*StandardVoiceResponse, *http.Response, error) {
+	return r.ApiService.SendSingleVoiceTtsExecute(r)
+}
+
+/*
+SendSingleVoiceTts Send single voice message
+
+This method allows you to send single voice message to one or more destination addresses.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSendSingleVoiceTtsRequest
+*/
+func (a *VoiceAPIService) SendSingleVoiceTts(ctx context.Context) ApiSendSingleVoiceTtsRequest {
+	return ApiSendSingleVoiceTtsRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return StandardVoiceResponse
+func (a *VoiceAPIService) SendSingleVoiceTtsExecute(r ApiSendSingleVoiceTtsRequest) (*StandardVoiceResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *StandardVoiceResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.SendSingleVoiceTts")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/tts/3/single"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.singleRequest == nil {
+		return localVarReturnValue, nil, reportError("singleRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.singleRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v StandardVoiceResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiSendVoiceMessagesWithAnIvrScenarioRequest struct {
+	ctx                   context.Context
+	ApiService            *VoiceAPIService
+	launchScenarioRequest *LaunchScenarioRequest
+}
+
+func (r ApiSendVoiceMessagesWithAnIvrScenarioRequest) LaunchScenarioRequest(launchScenarioRequest LaunchScenarioRequest) ApiSendVoiceMessagesWithAnIvrScenarioRequest {
+	r.launchScenarioRequest = &launchScenarioRequest
+	return r
+}
+
+func (r ApiSendVoiceMessagesWithAnIvrScenarioRequest) Execute() (*StandardVoiceResponse, *http.Response, error) {
+	return r.ApiService.SendVoiceMessagesWithAnIvrScenarioExecute(r)
+}
+
+/*
+SendVoiceMessagesWithAnIvrScenario Launch IVR Scenario
+
+This method allows you to start an outbound IVR toward a multiple destinations.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@return ApiSendVoiceMessagesWithAnIvrScenarioRequest
+*/
+func (a *VoiceAPIService) SendVoiceMessagesWithAnIvrScenario(ctx context.Context) ApiSendVoiceMessagesWithAnIvrScenarioRequest {
+	return ApiSendVoiceMessagesWithAnIvrScenarioRequest{
+		ApiService: a,
+		ctx:        ctx,
+	}
+}
+
+// Execute executes the request
+//
+//	@return StandardVoiceResponse
+func (a *VoiceAPIService) SendVoiceMessagesWithAnIvrScenarioExecute(r ApiSendVoiceMessagesWithAnIvrScenarioRequest) (*StandardVoiceResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPost
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *StandardVoiceResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.SendVoiceMessagesWithAnIvrScenario")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/messages"
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.launchScenarioRequest == nil {
+		return localVarReturnValue, nil, reportError("launchScenarioRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.launchScenarioRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v StandardVoiceResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
+
+type ApiUpdateVoiceIvrScenarioRequest struct {
+	ctx                   context.Context
+	ApiService            *VoiceAPIService
+	id                    string
+	updateScenarioRequest *UpdateScenarioRequest
+}
+
+func (r ApiUpdateVoiceIvrScenarioRequest) UpdateScenarioRequest(updateScenarioRequest UpdateScenarioRequest) ApiUpdateVoiceIvrScenarioRequest {
+	r.updateScenarioRequest = &updateScenarioRequest
+	return r
+}
+
+func (r ApiUpdateVoiceIvrScenarioRequest) Execute() (*UpdateScenarioResponse, *http.Response, error) {
+	return r.ApiService.UpdateVoiceIvrScenarioExecute(r)
+}
+
+/*
+UpdateVoiceIvrScenario Update Voice IVR Scenarios
+
+This method allows you to update a Voice IVR Scenario.
+
+	@param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
+	@param id Scenario identifier.
+	@return ApiUpdateVoiceIvrScenarioRequest
+*/
+func (a *VoiceAPIService) UpdateVoiceIvrScenario(ctx context.Context, id string) ApiUpdateVoiceIvrScenarioRequest {
+	return ApiUpdateVoiceIvrScenarioRequest{
+		ApiService: a,
+		ctx:        ctx,
+		id:         id,
+	}
+}
+
+// Execute executes the request
+//
+//	@return UpdateScenarioResponse
+func (a *VoiceAPIService) UpdateVoiceIvrScenarioExecute(r ApiUpdateVoiceIvrScenarioRequest) (*UpdateScenarioResponse, *http.Response, error) {
+	var (
+		localVarHTTPMethod  = http.MethodPut
+		localVarPostBody    interface{}
+		formFiles           []formFile
+		localVarReturnValue *UpdateScenarioResponse
+	)
+
+	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VoiceAPIService.UpdateVoiceIvrScenario")
+	if err != nil {
+		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
+	}
+
+	localVarPath := localBasePath + "/voice/ivr/1/scenarios/{id}"
+	localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1)
+
+	localVarHeaderParams := make(map[string]string)
+	localVarQueryParams := url.Values{}
+	localVarFormParams := url.Values{}
+	if r.updateScenarioRequest == nil {
+		return localVarReturnValue, nil, reportError("updateScenarioRequest is required and must be specified")
+	}
+
+	// to determine the Content-Type header
+	localVarHTTPContentTypes := []string{"application/json"}
+
+	// set Content-Type header
+	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
+	if localVarHTTPContentType != "" {
+		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
+	}
+
+	// to determine the Accept header
+	localVarHTTPHeaderAccepts := []string{"application/json"}
+
+	// set Accept header
+	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
+	if localVarHTTPHeaderAccept != "" {
+		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
+	}
+	// body params
+	localVarPostBody = r.updateScenarioRequest
+	if r.ctx != nil {
+		// API Key Authentication
+		if auth, ok := r.ctx.Value(ContextAPIKeys).(map[string]APIKey); ok {
+			if apiKey, ok := auth["APIKeyHeader"]; ok {
+				var key string
+				if apiKey.Prefix != "" {
+					key = apiKey.Prefix + " " + apiKey.Key
+				} else {
+					key = apiKey.Key
+				}
+				localVarHeaderParams["Authorization"] = key
+			}
+		}
+	}
+	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
+	if err != nil {
+		return localVarReturnValue, nil, err
+	}
+
+	localVarHTTPResponse, err := a.client.callAPI(req)
+	if err != nil || localVarHTTPResponse == nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
+	localVarHTTPResponse.Body.Close()
+	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
+	if err != nil {
+		return localVarReturnValue, localVarHTTPResponse, err
+	}
+
+	if localVarHTTPResponse.StatusCode >= 300 {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: localVarHTTPResponse.Status,
+		}
+		if localVarHTTPResponse.StatusCode == 400 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 401 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 403 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 404 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 429 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode == 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 400 && localVarHTTPResponse.StatusCode < 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		if localVarHTTPResponse.StatusCode >= 500 {
+			var v ApiException
+			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+			if err != nil {
+				newErr.error = err.Error()
+				return localVarReturnValue, localVarHTTPResponse, newErr
+			}
+			newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+			newErr.model = v
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		var v UpdateScenarioResponse
+		err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+		if err != nil {
+			newErr.error = err.Error()
+			return localVarReturnValue, localVarHTTPResponse, newErr
+		}
+		newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
+		newErr.model = v
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
+	if err != nil {
+		newErr := &GenericOpenAPIError{
+			body:  localVarBody,
+			error: err.Error(),
+		}
+		return localVarReturnValue, localVarHTTPResponse, newErr
+	}
+
+	return localVarReturnValue, localVarHTTPResponse, nil
+}
diff --git a/pkg/infobip/configuration.go b/pkg/infobip/configuration.go
index ebb29be..bbb8447 100644
--- a/pkg/infobip/configuration.go
+++ b/pkg/infobip/configuration.go
@@ -7,7 +7,6 @@ Contact: support@infobip.com
 */
 
 // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
-
 package infobip
 
 import (
@@ -83,7 +82,7 @@ type Configuration struct {
 func NewConfiguration() *Configuration {
 	cfg := &Configuration{
 		DefaultHeader: make(map[string]string),
-		UserAgent:     "infobip-api-client-go/3.0.0",
+		UserAgent:     "infobip-api-client-go/3.1.0",
 		Debug:         false,
 		Scheme:        "https",
 		Servers: ServerConfigurations{
diff --git a/pkg/infobip/infobip.go b/pkg/infobip/infobip.go
index e8125c4..53ea819 100644
--- a/pkg/infobip/infobip.go
+++ b/pkg/infobip/infobip.go
@@ -10,4 +10,4 @@ Contact: support@infobip.com
 
 package infobip
 
-const Version = "3.0.0"
+const Version = "3.1.0"
diff --git a/pkg/infobip/models/email/add_domain_request.go b/pkg/infobip/models/email/add_domain_request.go
new file mode 100644
index 0000000..46d27a4
--- /dev/null
+++ b/pkg/infobip/models/email/add_domain_request.go
@@ -0,0 +1,302 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AddDomainRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AddDomainRequest{}
+
+// AddDomainRequest struct for AddDomainRequest
+type AddDomainRequest struct {
+	// Unique name for the domain.
+	DomainName string
+	// Value for DKIM key length.
+	DkimKeyLength *int32
+	// Targeted daily traffic.
+	TargetedDailyTraffic int64
+	// Required for application use in a send request for outbound traffic. Returned in notification events.
+	ApplicationId *string
+	// Required for entity use in a send request for outbound traffic. Returned in notification events.
+	EntityId *string
+	// Set a custom return path to customize the mailbox that tells receiving email servers where to route delayed bounces.
+	ReturnPathAddress *string
+}
+
+type _AddDomainRequest AddDomainRequest
+
+// NewAddDomainRequest instantiates a new AddDomainRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAddDomainRequest(domainName string, targetedDailyTraffic int64) *AddDomainRequest {
+	this := AddDomainRequest{}
+	this.DomainName = domainName
+	var dkimKeyLength int32 = 2048
+	this.DkimKeyLength = &dkimKeyLength
+	this.TargetedDailyTraffic = targetedDailyTraffic
+	return &this
+}
+
+// NewAddDomainRequestWithDefaults instantiates a new AddDomainRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAddDomainRequestWithDefaults() *AddDomainRequest {
+	this := AddDomainRequest{}
+
+	var dkimKeyLength int32 = 2048
+	this.DkimKeyLength = &dkimKeyLength
+	return &this
+}
+
+// GetDomainName returns the DomainName field value
+func (o *AddDomainRequest) GetDomainName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DomainName
+}
+
+// GetDomainNameOk returns a tuple with the DomainName field value
+// and a boolean to check if the value has been set.
+func (o *AddDomainRequest) GetDomainNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DomainName, true
+}
+
+// SetDomainName sets field value
+func (o *AddDomainRequest) SetDomainName(v string) {
+	o.DomainName = v
+}
+
+// GetDkimKeyLength returns the DkimKeyLength field value if set, zero value otherwise.
+func (o *AddDomainRequest) GetDkimKeyLength() int32 {
+	if o == nil || IsNil(o.DkimKeyLength) {
+		var ret int32
+		return ret
+	}
+	return *o.DkimKeyLength
+}
+
+// GetDkimKeyLengthOk returns a tuple with the DkimKeyLength field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddDomainRequest) GetDkimKeyLengthOk() (*int32, bool) {
+	if o == nil || IsNil(o.DkimKeyLength) {
+		return nil, false
+	}
+	return o.DkimKeyLength, true
+}
+
+// HasDkimKeyLength returns a boolean if a field has been set.
+func (o *AddDomainRequest) HasDkimKeyLength() bool {
+	if o != nil && !IsNil(o.DkimKeyLength) {
+		return true
+	}
+
+	return false
+}
+
+// SetDkimKeyLength gets a reference to the given int32 and assigns it to the DkimKeyLength field.
+func (o *AddDomainRequest) SetDkimKeyLength(v int32) {
+	o.DkimKeyLength = &v
+}
+
+// GetTargetedDailyTraffic returns the TargetedDailyTraffic field value
+func (o *AddDomainRequest) GetTargetedDailyTraffic() int64 {
+	if o == nil {
+		var ret int64
+		return ret
+	}
+
+	return o.TargetedDailyTraffic
+}
+
+// GetTargetedDailyTrafficOk returns a tuple with the TargetedDailyTraffic field value
+// and a boolean to check if the value has been set.
+func (o *AddDomainRequest) GetTargetedDailyTrafficOk() (*int64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.TargetedDailyTraffic, true
+}
+
+// SetTargetedDailyTraffic sets field value
+func (o *AddDomainRequest) SetTargetedDailyTraffic(v int64) {
+	o.TargetedDailyTraffic = v
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *AddDomainRequest) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddDomainRequest) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *AddDomainRequest) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *AddDomainRequest) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetEntityId returns the EntityId field value if set, zero value otherwise.
+func (o *AddDomainRequest) GetEntityId() string {
+	if o == nil || IsNil(o.EntityId) {
+		var ret string
+		return ret
+	}
+	return *o.EntityId
+}
+
+// GetEntityIdOk returns a tuple with the EntityId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddDomainRequest) GetEntityIdOk() (*string, bool) {
+	if o == nil || IsNil(o.EntityId) {
+		return nil, false
+	}
+	return o.EntityId, true
+}
+
+// HasEntityId returns a boolean if a field has been set.
+func (o *AddDomainRequest) HasEntityId() bool {
+	if o != nil && !IsNil(o.EntityId) {
+		return true
+	}
+
+	return false
+}
+
+// SetEntityId gets a reference to the given string and assigns it to the EntityId field.
+func (o *AddDomainRequest) SetEntityId(v string) {
+	o.EntityId = &v
+}
+
+// GetReturnPathAddress returns the ReturnPathAddress field value if set, zero value otherwise.
+func (o *AddDomainRequest) GetReturnPathAddress() string {
+	if o == nil || IsNil(o.ReturnPathAddress) {
+		var ret string
+		return ret
+	}
+	return *o.ReturnPathAddress
+}
+
+// GetReturnPathAddressOk returns a tuple with the ReturnPathAddress field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddDomainRequest) GetReturnPathAddressOk() (*string, bool) {
+	if o == nil || IsNil(o.ReturnPathAddress) {
+		return nil, false
+	}
+	return o.ReturnPathAddress, true
+}
+
+// HasReturnPathAddress returns a boolean if a field has been set.
+func (o *AddDomainRequest) HasReturnPathAddress() bool {
+	if o != nil && !IsNil(o.ReturnPathAddress) {
+		return true
+	}
+
+	return false
+}
+
+// SetReturnPathAddress gets a reference to the given string and assigns it to the ReturnPathAddress field.
+func (o *AddDomainRequest) SetReturnPathAddress(v string) {
+	o.ReturnPathAddress = &v
+}
+
+func (o AddDomainRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AddDomainRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["domainName"] = o.DomainName
+	if !IsNil(o.DkimKeyLength) {
+		toSerialize["dkimKeyLength"] = o.DkimKeyLength
+	}
+	toSerialize["targetedDailyTraffic"] = o.TargetedDailyTraffic
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.EntityId) {
+		toSerialize["entityId"] = o.EntityId
+	}
+	if !IsNil(o.ReturnPathAddress) {
+		toSerialize["returnPathAddress"] = o.ReturnPathAddress
+	}
+	return toSerialize, nil
+}
+
+type NullableAddDomainRequest struct {
+	value *AddDomainRequest
+	isSet bool
+}
+
+func (v NullableAddDomainRequest) Get() *AddDomainRequest {
+	return v.value
+}
+
+func (v *NullableAddDomainRequest) Set(val *AddDomainRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAddDomainRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAddDomainRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAddDomainRequest(val *AddDomainRequest) *NullableAddDomainRequest {
+	return &NullableAddDomainRequest{value: val, isSet: true}
+}
+
+func (v NullableAddDomainRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAddDomainRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/add_suppression.go b/pkg/infobip/models/email/add_suppression.go
new file mode 100644
index 0000000..15322ed
--- /dev/null
+++ b/pkg/infobip/models/email/add_suppression.go
@@ -0,0 +1,177 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AddSuppression type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AddSuppression{}
+
+// AddSuppression Suppression.
+type AddSuppression struct {
+	// Domain name from which suppressions will be added.
+	DomainName string
+	// Email addresses to add to suppression list.
+	EmailAddress []string
+	Type         ApiAddSuppressionType
+}
+
+type _AddSuppression AddSuppression
+
+// NewAddSuppression instantiates a new AddSuppression object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAddSuppression(domainName string, emailAddress []string, type_ ApiAddSuppressionType) *AddSuppression {
+	this := AddSuppression{}
+	this.DomainName = domainName
+	this.EmailAddress = emailAddress
+	this.Type = type_
+	return &this
+}
+
+// NewAddSuppressionWithDefaults instantiates a new AddSuppression object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAddSuppressionWithDefaults() *AddSuppression {
+	this := AddSuppression{}
+
+	return &this
+}
+
+// GetDomainName returns the DomainName field value
+func (o *AddSuppression) GetDomainName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DomainName
+}
+
+// GetDomainNameOk returns a tuple with the DomainName field value
+// and a boolean to check if the value has been set.
+func (o *AddSuppression) GetDomainNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DomainName, true
+}
+
+// SetDomainName sets field value
+func (o *AddSuppression) SetDomainName(v string) {
+	o.DomainName = v
+}
+
+// GetEmailAddress returns the EmailAddress field value
+func (o *AddSuppression) GetEmailAddress() []string {
+	if o == nil {
+		var ret []string
+		return ret
+	}
+
+	return o.EmailAddress
+}
+
+// GetEmailAddressOk returns a tuple with the EmailAddress field value
+// and a boolean to check if the value has been set.
+func (o *AddSuppression) GetEmailAddressOk() ([]string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.EmailAddress, true
+}
+
+// SetEmailAddress sets field value
+func (o *AddSuppression) SetEmailAddress(v []string) {
+	o.EmailAddress = v
+}
+
+// GetType returns the Type field value
+func (o *AddSuppression) GetType() ApiAddSuppressionType {
+	if o == nil {
+		var ret ApiAddSuppressionType
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *AddSuppression) GetTypeOk() (*ApiAddSuppressionType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *AddSuppression) SetType(v ApiAddSuppressionType) {
+	o.Type = v
+}
+
+func (o AddSuppression) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AddSuppression) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["domainName"] = o.DomainName
+	toSerialize["emailAddress"] = o.EmailAddress
+	toSerialize["type"] = o.Type
+	return toSerialize, nil
+}
+
+type NullableAddSuppression struct {
+	value *AddSuppression
+	isSet bool
+}
+
+func (v NullableAddSuppression) Get() *AddSuppression {
+	return v.value
+}
+
+func (v *NullableAddSuppression) Set(val *AddSuppression) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAddSuppression) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAddSuppression) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAddSuppression(val *AddSuppression) *NullableAddSuppression {
+	return &NullableAddSuppression{value: val, isSet: true}
+}
+
+func (v NullableAddSuppression) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAddSuppression) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/add_suppression_request.go b/pkg/infobip/models/email/add_suppression_request.go
new file mode 100644
index 0000000..89ae87e
--- /dev/null
+++ b/pkg/infobip/models/email/add_suppression_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AddSuppressionRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AddSuppressionRequest{}
+
+// AddSuppressionRequest Suppressions request.
+type AddSuppressionRequest struct {
+	// Email addresses to add to the suppression list. Number of destinations cannot exceed 10,000.
+	Suppressions []AddSuppression
+}
+
+type _AddSuppressionRequest AddSuppressionRequest
+
+// NewAddSuppressionRequest instantiates a new AddSuppressionRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAddSuppressionRequest(suppressions []AddSuppression) *AddSuppressionRequest {
+	this := AddSuppressionRequest{}
+	this.Suppressions = suppressions
+	return &this
+}
+
+// NewAddSuppressionRequestWithDefaults instantiates a new AddSuppressionRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAddSuppressionRequestWithDefaults() *AddSuppressionRequest {
+	this := AddSuppressionRequest{}
+
+	return &this
+}
+
+// GetSuppressions returns the Suppressions field value
+func (o *AddSuppressionRequest) GetSuppressions() []AddSuppression {
+	if o == nil {
+		var ret []AddSuppression
+		return ret
+	}
+
+	return o.Suppressions
+}
+
+// GetSuppressionsOk returns a tuple with the Suppressions field value
+// and a boolean to check if the value has been set.
+func (o *AddSuppressionRequest) GetSuppressionsOk() ([]AddSuppression, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Suppressions, true
+}
+
+// SetSuppressions sets field value
+func (o *AddSuppressionRequest) SetSuppressions(v []AddSuppression) {
+	o.Suppressions = v
+}
+
+func (o AddSuppressionRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AddSuppressionRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["suppressions"] = o.Suppressions
+	return toSerialize, nil
+}
+
+type NullableAddSuppressionRequest struct {
+	value *AddSuppressionRequest
+	isSet bool
+}
+
+func (v NullableAddSuppressionRequest) Get() *AddSuppressionRequest {
+	return v.value
+}
+
+func (v *NullableAddSuppressionRequest) Set(val *AddSuppressionRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAddSuppressionRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAddSuppressionRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAddSuppressionRequest(val *AddSuppressionRequest) *NullableAddSuppressionRequest {
+	return &NullableAddSuppressionRequest{value: val, isSet: true}
+}
+
+func (v NullableAddSuppressionRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAddSuppressionRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/all_domains_response.go b/pkg/infobip/models/email/all_domains_response.go
new file mode 100644
index 0000000..2a28872
--- /dev/null
+++ b/pkg/infobip/models/email/all_domains_response.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AllDomainsResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AllDomainsResponse{}
+
+// AllDomainsResponse struct for AllDomainsResponse
+type AllDomainsResponse struct {
+	Paging *Paging
+	// List of domains that belong to the account.
+	Results []DomainResponse
+}
+
+// NewAllDomainsResponse instantiates a new AllDomainsResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAllDomainsResponse() *AllDomainsResponse {
+	this := AllDomainsResponse{}
+	return &this
+}
+
+// NewAllDomainsResponseWithDefaults instantiates a new AllDomainsResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAllDomainsResponseWithDefaults() *AllDomainsResponse {
+	this := AllDomainsResponse{}
+
+	return &this
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *AllDomainsResponse) GetPaging() Paging {
+	if o == nil || IsNil(o.Paging) {
+		var ret Paging
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AllDomainsResponse) GetPagingOk() (*Paging, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *AllDomainsResponse) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given Paging and assigns it to the Paging field.
+func (o *AllDomainsResponse) SetPaging(v Paging) {
+	o.Paging = &v
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *AllDomainsResponse) GetResults() []DomainResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []DomainResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AllDomainsResponse) GetResultsOk() ([]DomainResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *AllDomainsResponse) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []DomainResponse and assigns it to the Results field.
+func (o *AllDomainsResponse) SetResults(v []DomainResponse) {
+	o.Results = v
+}
+
+func (o AllDomainsResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AllDomainsResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	return toSerialize, nil
+}
+
+type NullableAllDomainsResponse struct {
+	value *AllDomainsResponse
+	isSet bool
+}
+
+func (v NullableAllDomainsResponse) Get() *AllDomainsResponse {
+	return v.value
+}
+
+func (v *NullableAllDomainsResponse) Set(val *AllDomainsResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAllDomainsResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAllDomainsResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAllDomainsResponse(val *AllDomainsResponse) *NullableAllDomainsResponse {
+	return &NullableAllDomainsResponse{value: val, isSet: true}
+}
+
+func (v NullableAllDomainsResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAllDomainsResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_add_suppression_type.go b/pkg/infobip/models/email/api_add_suppression_type.go
new file mode 100644
index 0000000..af40ffc
--- /dev/null
+++ b/pkg/infobip/models/email/api_add_suppression_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ApiAddSuppressionType Type of suppression.
+type ApiAddSuppressionType string
+
+// List of ApiAddSuppressionType
+const (
+	APIADDSUPPRESSIONTYPE_BOUNCE    ApiAddSuppressionType = "BOUNCE"
+	APIADDSUPPRESSIONTYPE_COMPLAINT ApiAddSuppressionType = "COMPLAINT"
+)
+
+// All allowed values of ApiAddSuppressionType enum
+var AllowedApiAddSuppressionTypeEnumValues = []ApiAddSuppressionType{
+	"BOUNCE",
+	"COMPLAINT",
+}
+
+func (v *ApiAddSuppressionType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ApiAddSuppressionType(value)
+	for _, existing := range AllowedApiAddSuppressionTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ApiAddSuppressionType", value)
+}
+
+// NewApiAddSuppressionTypeFromValue returns a pointer to a valid ApiAddSuppressionType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewApiAddSuppressionTypeFromValue(v string) (*ApiAddSuppressionType, error) {
+	ev := ApiAddSuppressionType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ApiAddSuppressionType: valid values are %v", v, AllowedApiAddSuppressionTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ApiAddSuppressionType) IsValid() bool {
+	for _, existing := range AllowedApiAddSuppressionTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ApiAddSuppressionType value
+func (v ApiAddSuppressionType) Ptr() *ApiAddSuppressionType {
+	return &v
+}
+
+type NullableApiAddSuppressionType struct {
+	value *ApiAddSuppressionType
+	isSet bool
+}
+
+func (v NullableApiAddSuppressionType) Get() *ApiAddSuppressionType {
+	return v.value
+}
+
+func (v *NullableApiAddSuppressionType) Set(val *ApiAddSuppressionType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiAddSuppressionType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiAddSuppressionType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiAddSuppressionType(val *ApiAddSuppressionType) *NullableApiAddSuppressionType {
+	return &NullableApiAddSuppressionType{value: val, isSet: true}
+}
+
+func (v NullableApiAddSuppressionType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiAddSuppressionType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_domain_access.go b/pkg/infobip/models/email/api_domain_access.go
new file mode 100644
index 0000000..dc9f01a
--- /dev/null
+++ b/pkg/infobip/models/email/api_domain_access.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ApiDomainAccess Represents the access level for the domain. Domain can be either owned or have granted permissions.
+type ApiDomainAccess string
+
+// List of ApiDomainAccess
+const (
+	APIDOMAINACCESS_OWNER   ApiDomainAccess = "OWNER"
+	APIDOMAINACCESS_GRANTED ApiDomainAccess = "GRANTED"
+)
+
+// All allowed values of ApiDomainAccess enum
+var AllowedApiDomainAccessEnumValues = []ApiDomainAccess{
+	"OWNER",
+	"GRANTED",
+}
+
+func (v *ApiDomainAccess) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ApiDomainAccess(value)
+	for _, existing := range AllowedApiDomainAccessEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ApiDomainAccess", value)
+}
+
+// NewApiDomainAccessFromValue returns a pointer to a valid ApiDomainAccess
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewApiDomainAccessFromValue(v string) (*ApiDomainAccess, error) {
+	ev := ApiDomainAccess(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ApiDomainAccess: valid values are %v", v, AllowedApiDomainAccessEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ApiDomainAccess) IsValid() bool {
+	for _, existing := range AllowedApiDomainAccessEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ApiDomainAccess value
+func (v ApiDomainAccess) Ptr() *ApiDomainAccess {
+	return &v
+}
+
+type NullableApiDomainAccess struct {
+	value *ApiDomainAccess
+	isSet bool
+}
+
+func (v NullableApiDomainAccess) Get() *ApiDomainAccess {
+	return v.value
+}
+
+func (v *NullableApiDomainAccess) Set(val *ApiDomainAccess) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiDomainAccess) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiDomainAccess) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiDomainAccess(val *ApiDomainAccess) *NullableApiDomainAccess {
+	return &NullableApiDomainAccess{value: val, isSet: true}
+}
+
+func (v NullableApiDomainAccess) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiDomainAccess) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_error.go b/pkg/infobip/models/email/api_error.go
new file mode 100644
index 0000000..6f2dced
--- /dev/null
+++ b/pkg/infobip/models/email/api_error.go
@@ -0,0 +1,234 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiError type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiError{}
+
+// ApiError struct for ApiError
+type ApiError struct {
+	// An error code uniquely identifying the error case.
+	ErrorCode string
+	// A detailed description of an error.
+	Description string
+	// An action that should be taken to recover from the error.
+	Action string
+	// List of violations that caused the error.
+	Violations []ApiErrorViolation
+	// List of available resources to recover from the error.
+	Resources []ApiErrorResource
+}
+
+type _ApiError ApiError
+
+// NewApiError instantiates a new ApiError object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiError(errorCode string, description string, action string, violations []ApiErrorViolation, resources []ApiErrorResource) *ApiError {
+	this := ApiError{}
+	this.ErrorCode = errorCode
+	this.Description = description
+	this.Action = action
+	this.Violations = violations
+	this.Resources = resources
+	return &this
+}
+
+// NewApiErrorWithDefaults instantiates a new ApiError object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiErrorWithDefaults() *ApiError {
+	this := ApiError{}
+
+	return &this
+}
+
+// GetErrorCode returns the ErrorCode field value
+func (o *ApiError) GetErrorCode() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ErrorCode
+}
+
+// GetErrorCodeOk returns a tuple with the ErrorCode field value
+// and a boolean to check if the value has been set.
+func (o *ApiError) GetErrorCodeOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ErrorCode, true
+}
+
+// SetErrorCode sets field value
+func (o *ApiError) SetErrorCode(v string) {
+	o.ErrorCode = v
+}
+
+// GetDescription returns the Description field value
+func (o *ApiError) GetDescription() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value
+// and a boolean to check if the value has been set.
+func (o *ApiError) GetDescriptionOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Description, true
+}
+
+// SetDescription sets field value
+func (o *ApiError) SetDescription(v string) {
+	o.Description = v
+}
+
+// GetAction returns the Action field value
+func (o *ApiError) GetAction() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Action
+}
+
+// GetActionOk returns a tuple with the Action field value
+// and a boolean to check if the value has been set.
+func (o *ApiError) GetActionOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Action, true
+}
+
+// SetAction sets field value
+func (o *ApiError) SetAction(v string) {
+	o.Action = v
+}
+
+// GetViolations returns the Violations field value
+func (o *ApiError) GetViolations() []ApiErrorViolation {
+	if o == nil {
+		var ret []ApiErrorViolation
+		return ret
+	}
+
+	return o.Violations
+}
+
+// GetViolationsOk returns a tuple with the Violations field value
+// and a boolean to check if the value has been set.
+func (o *ApiError) GetViolationsOk() ([]ApiErrorViolation, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Violations, true
+}
+
+// SetViolations sets field value
+func (o *ApiError) SetViolations(v []ApiErrorViolation) {
+	o.Violations = v
+}
+
+// GetResources returns the Resources field value
+func (o *ApiError) GetResources() []ApiErrorResource {
+	if o == nil {
+		var ret []ApiErrorResource
+		return ret
+	}
+
+	return o.Resources
+}
+
+// GetResourcesOk returns a tuple with the Resources field value
+// and a boolean to check if the value has been set.
+func (o *ApiError) GetResourcesOk() ([]ApiErrorResource, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Resources, true
+}
+
+// SetResources sets field value
+func (o *ApiError) SetResources(v []ApiErrorResource) {
+	o.Resources = v
+}
+
+func (o ApiError) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiError) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["errorCode"] = o.ErrorCode
+	toSerialize["description"] = o.Description
+	toSerialize["action"] = o.Action
+	toSerialize["violations"] = o.Violations
+	toSerialize["resources"] = o.Resources
+	return toSerialize, nil
+}
+
+type NullableApiError struct {
+	value *ApiError
+	isSet bool
+}
+
+func (v NullableApiError) Get() *ApiError {
+	return v.value
+}
+
+func (v *NullableApiError) Set(val *ApiError) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiError) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiError) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiError(val *ApiError) *NullableApiError {
+	return &NullableApiError{value: val, isSet: true}
+}
+
+func (v NullableApiError) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiError) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_error_resource.go b/pkg/infobip/models/email/api_error_resource.go
new file mode 100644
index 0000000..22fd52f
--- /dev/null
+++ b/pkg/infobip/models/email/api_error_resource.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiErrorResource type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiErrorResource{}
+
+// ApiErrorResource List of available resources to recover from the error.
+type ApiErrorResource struct {
+	// Resource name.
+	Name *string
+	// Resource URL.
+	Url *string
+}
+
+// NewApiErrorResource instantiates a new ApiErrorResource object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiErrorResource() *ApiErrorResource {
+	this := ApiErrorResource{}
+	return &this
+}
+
+// NewApiErrorResourceWithDefaults instantiates a new ApiErrorResource object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiErrorResourceWithDefaults() *ApiErrorResource {
+	this := ApiErrorResource{}
+
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *ApiErrorResource) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiErrorResource) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *ApiErrorResource) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *ApiErrorResource) SetName(v string) {
+	o.Name = &v
+}
+
+// GetUrl returns the Url field value if set, zero value otherwise.
+func (o *ApiErrorResource) GetUrl() string {
+	if o == nil || IsNil(o.Url) {
+		var ret string
+		return ret
+	}
+	return *o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiErrorResource) GetUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.Url) {
+		return nil, false
+	}
+	return o.Url, true
+}
+
+// HasUrl returns a boolean if a field has been set.
+func (o *ApiErrorResource) HasUrl() bool {
+	if o != nil && !IsNil(o.Url) {
+		return true
+	}
+
+	return false
+}
+
+// SetUrl gets a reference to the given string and assigns it to the Url field.
+func (o *ApiErrorResource) SetUrl(v string) {
+	o.Url = &v
+}
+
+func (o ApiErrorResource) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiErrorResource) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Url) {
+		toSerialize["url"] = o.Url
+	}
+	return toSerialize, nil
+}
+
+type NullableApiErrorResource struct {
+	value *ApiErrorResource
+	isSet bool
+}
+
+func (v NullableApiErrorResource) Get() *ApiErrorResource {
+	return v.value
+}
+
+func (v *NullableApiErrorResource) Set(val *ApiErrorResource) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiErrorResource) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiErrorResource) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiErrorResource(val *ApiErrorResource) *NullableApiErrorResource {
+	return &NullableApiErrorResource{value: val, isSet: true}
+}
+
+func (v NullableApiErrorResource) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiErrorResource) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_error_violation.go b/pkg/infobip/models/email/api_error_violation.go
new file mode 100644
index 0000000..6d83be4
--- /dev/null
+++ b/pkg/infobip/models/email/api_error_violation.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiErrorViolation type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiErrorViolation{}
+
+// ApiErrorViolation List of violations that caused the error.
+type ApiErrorViolation struct {
+	// Request property that caused the error.
+	Property *string
+	// Detailed violation description.
+	Violation *string
+}
+
+// NewApiErrorViolation instantiates a new ApiErrorViolation object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiErrorViolation() *ApiErrorViolation {
+	this := ApiErrorViolation{}
+	return &this
+}
+
+// NewApiErrorViolationWithDefaults instantiates a new ApiErrorViolation object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiErrorViolationWithDefaults() *ApiErrorViolation {
+	this := ApiErrorViolation{}
+
+	return &this
+}
+
+// GetProperty returns the Property field value if set, zero value otherwise.
+func (o *ApiErrorViolation) GetProperty() string {
+	if o == nil || IsNil(o.Property) {
+		var ret string
+		return ret
+	}
+	return *o.Property
+}
+
+// GetPropertyOk returns a tuple with the Property field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiErrorViolation) GetPropertyOk() (*string, bool) {
+	if o == nil || IsNil(o.Property) {
+		return nil, false
+	}
+	return o.Property, true
+}
+
+// HasProperty returns a boolean if a field has been set.
+func (o *ApiErrorViolation) HasProperty() bool {
+	if o != nil && !IsNil(o.Property) {
+		return true
+	}
+
+	return false
+}
+
+// SetProperty gets a reference to the given string and assigns it to the Property field.
+func (o *ApiErrorViolation) SetProperty(v string) {
+	o.Property = &v
+}
+
+// GetViolation returns the Violation field value if set, zero value otherwise.
+func (o *ApiErrorViolation) GetViolation() string {
+	if o == nil || IsNil(o.Violation) {
+		var ret string
+		return ret
+	}
+	return *o.Violation
+}
+
+// GetViolationOk returns a tuple with the Violation field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiErrorViolation) GetViolationOk() (*string, bool) {
+	if o == nil || IsNil(o.Violation) {
+		return nil, false
+	}
+	return o.Violation, true
+}
+
+// HasViolation returns a boolean if a field has been set.
+func (o *ApiErrorViolation) HasViolation() bool {
+	if o != nil && !IsNil(o.Violation) {
+		return true
+	}
+
+	return false
+}
+
+// SetViolation gets a reference to the given string and assigns it to the Violation field.
+func (o *ApiErrorViolation) SetViolation(v string) {
+	o.Violation = &v
+}
+
+func (o ApiErrorViolation) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiErrorViolation) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Property) {
+		toSerialize["property"] = o.Property
+	}
+	if !IsNil(o.Violation) {
+		toSerialize["violation"] = o.Violation
+	}
+	return toSerialize, nil
+}
+
+type NullableApiErrorViolation struct {
+	value *ApiErrorViolation
+	isSet bool
+}
+
+func (v NullableApiErrorViolation) Get() *ApiErrorViolation {
+	return v.value
+}
+
+func (v *NullableApiErrorViolation) Set(val *ApiErrorViolation) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiErrorViolation) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiErrorViolation) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiErrorViolation(val *ApiErrorViolation) *NullableApiErrorViolation {
+	return &NullableApiErrorViolation{value: val, isSet: true}
+}
+
+func (v NullableApiErrorViolation) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiErrorViolation) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_exception.go b/pkg/infobip/models/email/api_exception.go
new file mode 100644
index 0000000..23273ea
--- /dev/null
+++ b/pkg/infobip/models/email/api_exception.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiException type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiException{}
+
+// ApiException struct for ApiException
+type ApiException struct {
+	RequestError *ApiRequestError
+}
+
+// NewApiException instantiates a new ApiException object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiException() *ApiException {
+	this := ApiException{}
+	return &this
+}
+
+// NewApiExceptionWithDefaults instantiates a new ApiException object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiExceptionWithDefaults() *ApiException {
+	this := ApiException{}
+
+	return &this
+}
+
+// GetRequestError returns the RequestError field value if set, zero value otherwise.
+func (o *ApiException) GetRequestError() ApiRequestError {
+	if o == nil || IsNil(o.RequestError) {
+		var ret ApiRequestError
+		return ret
+	}
+	return *o.RequestError
+}
+
+// GetRequestErrorOk returns a tuple with the RequestError field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiException) GetRequestErrorOk() (*ApiRequestError, bool) {
+	if o == nil || IsNil(o.RequestError) {
+		return nil, false
+	}
+	return o.RequestError, true
+}
+
+// HasRequestError returns a boolean if a field has been set.
+func (o *ApiException) HasRequestError() bool {
+	if o != nil && !IsNil(o.RequestError) {
+		return true
+	}
+
+	return false
+}
+
+// SetRequestError gets a reference to the given ApiRequestError and assigns it to the RequestError field.
+func (o *ApiException) SetRequestError(v ApiRequestError) {
+	o.RequestError = &v
+}
+
+func (o ApiException) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiException) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.RequestError) {
+		toSerialize["requestError"] = o.RequestError
+	}
+	return toSerialize, nil
+}
+
+type NullableApiException struct {
+	value *ApiException
+	isSet bool
+}
+
+func (v NullableApiException) Get() *ApiException {
+	return v.value
+}
+
+func (v *NullableApiException) Set(val *ApiException) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiException) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiException) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiException(val *ApiException) *NullableApiException {
+	return &NullableApiException{value: val, isSet: true}
+}
+
+func (v NullableApiException) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiException) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_page_details.go b/pkg/infobip/models/email/api_page_details.go
new file mode 100644
index 0000000..736478b
--- /dev/null
+++ b/pkg/infobip/models/email/api_page_details.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiPageDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiPageDetails{}
+
+// ApiPageDetails Paging response.
+type ApiPageDetails struct {
+	// Requested page number.
+	Page int32
+	// Requested page size.
+	Size int32
+}
+
+type _ApiPageDetails ApiPageDetails
+
+// NewApiPageDetails instantiates a new ApiPageDetails object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiPageDetails(page int32, size int32) *ApiPageDetails {
+	this := ApiPageDetails{}
+	this.Page = page
+	this.Size = size
+	return &this
+}
+
+// NewApiPageDetailsWithDefaults instantiates a new ApiPageDetails object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiPageDetailsWithDefaults() *ApiPageDetails {
+	this := ApiPageDetails{}
+
+	return &this
+}
+
+// GetPage returns the Page field value
+func (o *ApiPageDetails) GetPage() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Page
+}
+
+// GetPageOk returns a tuple with the Page field value
+// and a boolean to check if the value has been set.
+func (o *ApiPageDetails) GetPageOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Page, true
+}
+
+// SetPage sets field value
+func (o *ApiPageDetails) SetPage(v int32) {
+	o.Page = v
+}
+
+// GetSize returns the Size field value
+func (o *ApiPageDetails) GetSize() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Size
+}
+
+// GetSizeOk returns a tuple with the Size field value
+// and a boolean to check if the value has been set.
+func (o *ApiPageDetails) GetSizeOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Size, true
+}
+
+// SetSize sets field value
+func (o *ApiPageDetails) SetSize(v int32) {
+	o.Size = v
+}
+
+func (o ApiPageDetails) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiPageDetails) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["page"] = o.Page
+	toSerialize["size"] = o.Size
+	return toSerialize, nil
+}
+
+type NullableApiPageDetails struct {
+	value *ApiPageDetails
+	isSet bool
+}
+
+func (v NullableApiPageDetails) Get() *ApiPageDetails {
+	return v.value
+}
+
+func (v *NullableApiPageDetails) Set(val *ApiPageDetails) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiPageDetails) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiPageDetails) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiPageDetails(val *ApiPageDetails) *NullableApiPageDetails {
+	return &NullableApiPageDetails{value: val, isSet: true}
+}
+
+func (v NullableApiPageDetails) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiPageDetails) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_report.go b/pkg/infobip/models/email/api_report.go
new file mode 100644
index 0000000..6e46dc1
--- /dev/null
+++ b/pkg/infobip/models/email/api_report.go
@@ -0,0 +1,496 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiReport type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiReport{}
+
+// ApiReport struct for ApiReport
+type ApiReport struct {
+	// The Application ID sent in the email request.
+	ApplicationId *string
+	// The Entity ID sent in the email request.
+	EntityId *string
+	// The ID that uniquely identifies bulks of request.
+	BulkId *string
+	// The ID that uniquely identifies the sent email request.
+	MessageId *string
+	// The recipient email address.
+	To *string
+	// Tells when the email was initiated. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SentAt *Time
+	// Tells when the email request was processed by Infobip.
+	DoneAt *Time
+	// Email request count.
+	MessageCount *int32
+	Price        *Price
+	Status       *Status
+	Error        *Error
+}
+
+// NewApiReport instantiates a new ApiReport object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiReport() *ApiReport {
+	this := ApiReport{}
+	return &this
+}
+
+// NewApiReportWithDefaults instantiates a new ApiReport object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiReportWithDefaults() *ApiReport {
+	this := ApiReport{}
+
+	return &this
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *ApiReport) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *ApiReport) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *ApiReport) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetEntityId returns the EntityId field value if set, zero value otherwise.
+func (o *ApiReport) GetEntityId() string {
+	if o == nil || IsNil(o.EntityId) {
+		var ret string
+		return ret
+	}
+	return *o.EntityId
+}
+
+// GetEntityIdOk returns a tuple with the EntityId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetEntityIdOk() (*string, bool) {
+	if o == nil || IsNil(o.EntityId) {
+		return nil, false
+	}
+	return o.EntityId, true
+}
+
+// HasEntityId returns a boolean if a field has been set.
+func (o *ApiReport) HasEntityId() bool {
+	if o != nil && !IsNil(o.EntityId) {
+		return true
+	}
+
+	return false
+}
+
+// SetEntityId gets a reference to the given string and assigns it to the EntityId field.
+func (o *ApiReport) SetEntityId(v string) {
+	o.EntityId = &v
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *ApiReport) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *ApiReport) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *ApiReport) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *ApiReport) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *ApiReport) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *ApiReport) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *ApiReport) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *ApiReport) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *ApiReport) SetTo(v string) {
+	o.To = &v
+}
+
+// GetSentAt returns the SentAt field value if set, zero value otherwise.
+func (o *ApiReport) GetSentAt() Time {
+	if o == nil || IsNil(o.SentAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SentAt
+}
+
+// GetSentAtOk returns a tuple with the SentAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetSentAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SentAt) {
+		return nil, false
+	}
+	return o.SentAt, true
+}
+
+// HasSentAt returns a boolean if a field has been set.
+func (o *ApiReport) HasSentAt() bool {
+	if o != nil && !IsNil(o.SentAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSentAt gets a reference to the given Time and assigns it to the SentAt field.
+func (o *ApiReport) SetSentAt(v Time) {
+	o.SentAt = &v
+}
+
+// GetDoneAt returns the DoneAt field value if set, zero value otherwise.
+func (o *ApiReport) GetDoneAt() Time {
+	if o == nil || IsNil(o.DoneAt) {
+		var ret Time
+		return ret
+	}
+	return *o.DoneAt
+}
+
+// GetDoneAtOk returns a tuple with the DoneAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetDoneAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.DoneAt) {
+		return nil, false
+	}
+	return o.DoneAt, true
+}
+
+// HasDoneAt returns a boolean if a field has been set.
+func (o *ApiReport) HasDoneAt() bool {
+	if o != nil && !IsNil(o.DoneAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetDoneAt gets a reference to the given Time and assigns it to the DoneAt field.
+func (o *ApiReport) SetDoneAt(v Time) {
+	o.DoneAt = &v
+}
+
+// GetMessageCount returns the MessageCount field value if set, zero value otherwise.
+func (o *ApiReport) GetMessageCount() int32 {
+	if o == nil || IsNil(o.MessageCount) {
+		var ret int32
+		return ret
+	}
+	return *o.MessageCount
+}
+
+// GetMessageCountOk returns a tuple with the MessageCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetMessageCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.MessageCount) {
+		return nil, false
+	}
+	return o.MessageCount, true
+}
+
+// HasMessageCount returns a boolean if a field has been set.
+func (o *ApiReport) HasMessageCount() bool {
+	if o != nil && !IsNil(o.MessageCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageCount gets a reference to the given int32 and assigns it to the MessageCount field.
+func (o *ApiReport) SetMessageCount(v int32) {
+	o.MessageCount = &v
+}
+
+// GetPrice returns the Price field value if set, zero value otherwise.
+func (o *ApiReport) GetPrice() Price {
+	if o == nil || IsNil(o.Price) {
+		var ret Price
+		return ret
+	}
+	return *o.Price
+}
+
+// GetPriceOk returns a tuple with the Price field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetPriceOk() (*Price, bool) {
+	if o == nil || IsNil(o.Price) {
+		return nil, false
+	}
+	return o.Price, true
+}
+
+// HasPrice returns a boolean if a field has been set.
+func (o *ApiReport) HasPrice() bool {
+	if o != nil && !IsNil(o.Price) {
+		return true
+	}
+
+	return false
+}
+
+// SetPrice gets a reference to the given Price and assigns it to the Price field.
+func (o *ApiReport) SetPrice(v Price) {
+	o.Price = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *ApiReport) GetStatus() Status {
+	if o == nil || IsNil(o.Status) {
+		var ret Status
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetStatusOk() (*Status, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *ApiReport) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given Status and assigns it to the Status field.
+func (o *ApiReport) SetStatus(v Status) {
+	o.Status = &v
+}
+
+// GetError returns the Error field value if set, zero value otherwise.
+func (o *ApiReport) GetError() Error {
+	if o == nil || IsNil(o.Error) {
+		var ret Error
+		return ret
+	}
+	return *o.Error
+}
+
+// GetErrorOk returns a tuple with the Error field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReport) GetErrorOk() (*Error, bool) {
+	if o == nil || IsNil(o.Error) {
+		return nil, false
+	}
+	return o.Error, true
+}
+
+// HasError returns a boolean if a field has been set.
+func (o *ApiReport) HasError() bool {
+	if o != nil && !IsNil(o.Error) {
+		return true
+	}
+
+	return false
+}
+
+// SetError gets a reference to the given Error and assigns it to the Error field.
+func (o *ApiReport) SetError(v Error) {
+	o.Error = &v
+}
+
+func (o ApiReport) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiReport) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.EntityId) {
+		toSerialize["entityId"] = o.EntityId
+	}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.SentAt) {
+		toSerialize["sentAt"] = o.SentAt
+	}
+	if !IsNil(o.DoneAt) {
+		toSerialize["doneAt"] = o.DoneAt
+	}
+	if !IsNil(o.MessageCount) {
+		toSerialize["messageCount"] = o.MessageCount
+	}
+	if !IsNil(o.Price) {
+		toSerialize["price"] = o.Price
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Error) {
+		toSerialize["error"] = o.Error
+	}
+	return toSerialize, nil
+}
+
+type NullableApiReport struct {
+	value *ApiReport
+	isSet bool
+}
+
+func (v NullableApiReport) Get() *ApiReport {
+	return v.value
+}
+
+func (v *NullableApiReport) Set(val *ApiReport) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiReport) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiReport) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiReport(val *ApiReport) *NullableApiReport {
+	return &NullableApiReport{value: val, isSet: true}
+}
+
+func (v NullableApiReport) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiReport) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_reports_response.go b/pkg/infobip/models/email/api_reports_response.go
new file mode 100644
index 0000000..303607c
--- /dev/null
+++ b/pkg/infobip/models/email/api_reports_response.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiReportsResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiReportsResponse{}
+
+// ApiReportsResponse struct for ApiReportsResponse
+type ApiReportsResponse struct {
+	Results []ApiReport
+}
+
+// NewApiReportsResponse instantiates a new ApiReportsResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiReportsResponse() *ApiReportsResponse {
+	this := ApiReportsResponse{}
+	return &this
+}
+
+// NewApiReportsResponseWithDefaults instantiates a new ApiReportsResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiReportsResponseWithDefaults() *ApiReportsResponse {
+	this := ApiReportsResponse{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *ApiReportsResponse) GetResults() []ApiReport {
+	if o == nil || IsNil(o.Results) {
+		var ret []ApiReport
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiReportsResponse) GetResultsOk() ([]ApiReport, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *ApiReportsResponse) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []ApiReport and assigns it to the Results field.
+func (o *ApiReportsResponse) SetResults(v []ApiReport) {
+	o.Results = v
+}
+
+func (o ApiReportsResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiReportsResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	return toSerialize, nil
+}
+
+type NullableApiReportsResponse struct {
+	value *ApiReportsResponse
+	isSet bool
+}
+
+func (v NullableApiReportsResponse) Get() *ApiReportsResponse {
+	return v.value
+}
+
+func (v *NullableApiReportsResponse) Set(val *ApiReportsResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiReportsResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiReportsResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiReportsResponse(val *ApiReportsResponse) *NullableApiReportsResponse {
+	return &NullableApiReportsResponse{value: val, isSet: true}
+}
+
+func (v NullableApiReportsResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiReportsResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_request_error.go b/pkg/infobip/models/email/api_request_error.go
new file mode 100644
index 0000000..a7dcbeb
--- /dev/null
+++ b/pkg/infobip/models/email/api_request_error.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiRequestError type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiRequestError{}
+
+// ApiRequestError struct for ApiRequestError
+type ApiRequestError struct {
+	ServiceException *ApiRequestErrorDetails
+}
+
+// NewApiRequestError instantiates a new ApiRequestError object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiRequestError() *ApiRequestError {
+	this := ApiRequestError{}
+	return &this
+}
+
+// NewApiRequestErrorWithDefaults instantiates a new ApiRequestError object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiRequestErrorWithDefaults() *ApiRequestError {
+	this := ApiRequestError{}
+
+	return &this
+}
+
+// GetServiceException returns the ServiceException field value if set, zero value otherwise.
+func (o *ApiRequestError) GetServiceException() ApiRequestErrorDetails {
+	if o == nil || IsNil(o.ServiceException) {
+		var ret ApiRequestErrorDetails
+		return ret
+	}
+	return *o.ServiceException
+}
+
+// GetServiceExceptionOk returns a tuple with the ServiceException field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestError) GetServiceExceptionOk() (*ApiRequestErrorDetails, bool) {
+	if o == nil || IsNil(o.ServiceException) {
+		return nil, false
+	}
+	return o.ServiceException, true
+}
+
+// HasServiceException returns a boolean if a field has been set.
+func (o *ApiRequestError) HasServiceException() bool {
+	if o != nil && !IsNil(o.ServiceException) {
+		return true
+	}
+
+	return false
+}
+
+// SetServiceException gets a reference to the given ApiRequestErrorDetails and assigns it to the ServiceException field.
+func (o *ApiRequestError) SetServiceException(v ApiRequestErrorDetails) {
+	o.ServiceException = &v
+}
+
+func (o ApiRequestError) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiRequestError) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ServiceException) {
+		toSerialize["serviceException"] = o.ServiceException
+	}
+	return toSerialize, nil
+}
+
+type NullableApiRequestError struct {
+	value *ApiRequestError
+	isSet bool
+}
+
+func (v NullableApiRequestError) Get() *ApiRequestError {
+	return v.value
+}
+
+func (v *NullableApiRequestError) Set(val *ApiRequestError) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiRequestError) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiRequestError) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiRequestError(val *ApiRequestError) *NullableApiRequestError {
+	return &NullableApiRequestError{value: val, isSet: true}
+}
+
+func (v NullableApiRequestError) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiRequestError) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_request_error_details.go b/pkg/infobip/models/email/api_request_error_details.go
new file mode 100644
index 0000000..248eda5
--- /dev/null
+++ b/pkg/infobip/models/email/api_request_error_details.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiRequestErrorDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiRequestErrorDetails{}
+
+// ApiRequestErrorDetails struct for ApiRequestErrorDetails
+type ApiRequestErrorDetails struct {
+	// Identifier of the error.
+	MessageId *string
+	// Detailed error description.
+	Text *string
+	// Validation errors.
+	ValidationErrors *map[string][]string
+}
+
+// NewApiRequestErrorDetails instantiates a new ApiRequestErrorDetails object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiRequestErrorDetails() *ApiRequestErrorDetails {
+	this := ApiRequestErrorDetails{}
+	return &this
+}
+
+// NewApiRequestErrorDetailsWithDefaults instantiates a new ApiRequestErrorDetails object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiRequestErrorDetailsWithDefaults() *ApiRequestErrorDetails {
+	this := ApiRequestErrorDetails{}
+
+	return &this
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *ApiRequestErrorDetails) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *ApiRequestErrorDetails) SetText(v string) {
+	o.Text = &v
+}
+
+// GetValidationErrors returns the ValidationErrors field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetValidationErrors() map[string][]string {
+	if o == nil || IsNil(o.ValidationErrors) {
+		var ret map[string][]string
+		return ret
+	}
+	return *o.ValidationErrors
+}
+
+// GetValidationErrorsOk returns a tuple with the ValidationErrors field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetValidationErrorsOk() (*map[string][]string, bool) {
+	if o == nil || IsNil(o.ValidationErrors) {
+		return nil, false
+	}
+	return o.ValidationErrors, true
+}
+
+// HasValidationErrors returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasValidationErrors() bool {
+	if o != nil && !IsNil(o.ValidationErrors) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidationErrors gets a reference to the given map[string][]string and assigns it to the ValidationErrors field.
+func (o *ApiRequestErrorDetails) SetValidationErrors(v map[string][]string) {
+	o.ValidationErrors = &v
+}
+
+func (o ApiRequestErrorDetails) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiRequestErrorDetails) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.ValidationErrors) {
+		toSerialize["validationErrors"] = o.ValidationErrors
+	}
+	return toSerialize, nil
+}
+
+type NullableApiRequestErrorDetails struct {
+	value *ApiRequestErrorDetails
+	isSet bool
+}
+
+func (v NullableApiRequestErrorDetails) Get() *ApiRequestErrorDetails {
+	return v.value
+}
+
+func (v *NullableApiRequestErrorDetails) Set(val *ApiRequestErrorDetails) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiRequestErrorDetails) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiRequestErrorDetails) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiRequestErrorDetails(val *ApiRequestErrorDetails) *NullableApiRequestErrorDetails {
+	return &NullableApiRequestErrorDetails{value: val, isSet: true}
+}
+
+func (v NullableApiRequestErrorDetails) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiRequestErrorDetails) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/api_suppression_type.go b/pkg/infobip/models/email/api_suppression_type.go
new file mode 100644
index 0000000..07c8f07
--- /dev/null
+++ b/pkg/infobip/models/email/api_suppression_type.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ApiSuppressionType Type of suppression.
+type ApiSuppressionType string
+
+// List of ApiSuppressionType
+const (
+	APISUPPRESSIONTYPE_BOUNCE     ApiSuppressionType = "BOUNCE"
+	APISUPPRESSIONTYPE_COMPLAINT  ApiSuppressionType = "COMPLAINT"
+	APISUPPRESSIONTYPE_OVER_QUOTA ApiSuppressionType = "OVER_QUOTA"
+)
+
+// All allowed values of ApiSuppressionType enum
+var AllowedApiSuppressionTypeEnumValues = []ApiSuppressionType{
+	"BOUNCE",
+	"COMPLAINT",
+	"OVER_QUOTA",
+}
+
+func (v *ApiSuppressionType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ApiSuppressionType(value)
+	for _, existing := range AllowedApiSuppressionTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ApiSuppressionType", value)
+}
+
+// NewApiSuppressionTypeFromValue returns a pointer to a valid ApiSuppressionType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewApiSuppressionTypeFromValue(v string) (*ApiSuppressionType, error) {
+	ev := ApiSuppressionType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ApiSuppressionType: valid values are %v", v, AllowedApiSuppressionTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ApiSuppressionType) IsValid() bool {
+	for _, existing := range AllowedApiSuppressionTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ApiSuppressionType value
+func (v ApiSuppressionType) Ptr() *ApiSuppressionType {
+	return &v
+}
+
+type NullableApiSuppressionType struct {
+	value *ApiSuppressionType
+	isSet bool
+}
+
+func (v NullableApiSuppressionType) Get() *ApiSuppressionType {
+	return v.value
+}
+
+func (v *NullableApiSuppressionType) Set(val *ApiSuppressionType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiSuppressionType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiSuppressionType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiSuppressionType(val *ApiSuppressionType) *NullableApiSuppressionType {
+	return &NullableApiSuppressionType{value: val, isSet: true}
+}
+
+func (v NullableApiSuppressionType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiSuppressionType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_info.go b/pkg/infobip/models/email/bulk_info.go
new file mode 100644
index 0000000..e12a68f
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_info.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkInfo{}
+
+// BulkInfo struct for BulkInfo
+type BulkInfo struct {
+	// The ID uniquely identifies the sent email request.
+	BulkId *string
+	// Date and time when the email is to be sent. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SendAt *Time
+}
+
+// NewBulkInfo instantiates a new BulkInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkInfo() *BulkInfo {
+	this := BulkInfo{}
+	return &this
+}
+
+// NewBulkInfoWithDefaults instantiates a new BulkInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkInfoWithDefaults() *BulkInfo {
+	this := BulkInfo{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkInfo) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkInfo) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkInfo) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkInfo) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetSendAt returns the SendAt field value if set, zero value otherwise.
+func (o *BulkInfo) GetSendAt() Time {
+	if o == nil || IsNil(o.SendAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkInfo) GetSendAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SendAt) {
+		return nil, false
+	}
+	return o.SendAt, true
+}
+
+// HasSendAt returns a boolean if a field has been set.
+func (o *BulkInfo) HasSendAt() bool {
+	if o != nil && !IsNil(o.SendAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendAt gets a reference to the given Time and assigns it to the SendAt field.
+func (o *BulkInfo) SetSendAt(v Time) {
+	o.SendAt = &v
+}
+
+func (o BulkInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.SendAt) {
+		toSerialize["sendAt"] = o.SendAt
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkInfo struct {
+	value *BulkInfo
+	isSet bool
+}
+
+func (v NullableBulkInfo) Get() *BulkInfo {
+	return v.value
+}
+
+func (v *NullableBulkInfo) Set(val *BulkInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkInfo(val *BulkInfo) *NullableBulkInfo {
+	return &NullableBulkInfo{value: val, isSet: true}
+}
+
+func (v NullableBulkInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_reschedule_request.go b/pkg/infobip/models/email/bulk_reschedule_request.go
new file mode 100644
index 0000000..1e48951
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_reschedule_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkRescheduleRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkRescheduleRequest{}
+
+// BulkRescheduleRequest struct for BulkRescheduleRequest
+type BulkRescheduleRequest struct {
+	// Date and time when the email is to be sent. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SendAt Time
+}
+
+type _BulkRescheduleRequest BulkRescheduleRequest
+
+// NewBulkRescheduleRequest instantiates a new BulkRescheduleRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkRescheduleRequest(sendAt Time) *BulkRescheduleRequest {
+	this := BulkRescheduleRequest{}
+	this.SendAt = sendAt
+	return &this
+}
+
+// NewBulkRescheduleRequestWithDefaults instantiates a new BulkRescheduleRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkRescheduleRequestWithDefaults() *BulkRescheduleRequest {
+	this := BulkRescheduleRequest{}
+
+	return &this
+}
+
+// GetSendAt returns the SendAt field value
+func (o *BulkRescheduleRequest) GetSendAt() Time {
+	if o == nil {
+		var ret Time
+		return ret
+	}
+
+	return o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value
+// and a boolean to check if the value has been set.
+func (o *BulkRescheduleRequest) GetSendAtOk() (*Time, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SendAt, true
+}
+
+// SetSendAt sets field value
+func (o *BulkRescheduleRequest) SetSendAt(v Time) {
+	o.SendAt = v
+}
+
+func (o BulkRescheduleRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkRescheduleRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["sendAt"] = o.SendAt
+	return toSerialize, nil
+}
+
+type NullableBulkRescheduleRequest struct {
+	value *BulkRescheduleRequest
+	isSet bool
+}
+
+func (v NullableBulkRescheduleRequest) Get() *BulkRescheduleRequest {
+	return v.value
+}
+
+func (v *NullableBulkRescheduleRequest) Set(val *BulkRescheduleRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkRescheduleRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkRescheduleRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkRescheduleRequest(val *BulkRescheduleRequest) *NullableBulkRescheduleRequest {
+	return &NullableBulkRescheduleRequest{value: val, isSet: true}
+}
+
+func (v NullableBulkRescheduleRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkRescheduleRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_reschedule_response.go b/pkg/infobip/models/email/bulk_reschedule_response.go
new file mode 100644
index 0000000..ca76fe4
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_reschedule_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkRescheduleResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkRescheduleResponse{}
+
+// BulkRescheduleResponse struct for BulkRescheduleResponse
+type BulkRescheduleResponse struct {
+	// The ID uniquely identifies the sent email request.
+	BulkId *string
+	// Date and time when the email is to be sent. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SendAt *Time
+}
+
+// NewBulkRescheduleResponse instantiates a new BulkRescheduleResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkRescheduleResponse() *BulkRescheduleResponse {
+	this := BulkRescheduleResponse{}
+	return &this
+}
+
+// NewBulkRescheduleResponseWithDefaults instantiates a new BulkRescheduleResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkRescheduleResponseWithDefaults() *BulkRescheduleResponse {
+	this := BulkRescheduleResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkRescheduleResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkRescheduleResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkRescheduleResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkRescheduleResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetSendAt returns the SendAt field value if set, zero value otherwise.
+func (o *BulkRescheduleResponse) GetSendAt() Time {
+	if o == nil || IsNil(o.SendAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkRescheduleResponse) GetSendAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SendAt) {
+		return nil, false
+	}
+	return o.SendAt, true
+}
+
+// HasSendAt returns a boolean if a field has been set.
+func (o *BulkRescheduleResponse) HasSendAt() bool {
+	if o != nil && !IsNil(o.SendAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendAt gets a reference to the given Time and assigns it to the SendAt field.
+func (o *BulkRescheduleResponse) SetSendAt(v Time) {
+	o.SendAt = &v
+}
+
+func (o BulkRescheduleResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkRescheduleResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.SendAt) {
+		toSerialize["sendAt"] = o.SendAt
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkRescheduleResponse struct {
+	value *BulkRescheduleResponse
+	isSet bool
+}
+
+func (v NullableBulkRescheduleResponse) Get() *BulkRescheduleResponse {
+	return v.value
+}
+
+func (v *NullableBulkRescheduleResponse) Set(val *BulkRescheduleResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkRescheduleResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkRescheduleResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkRescheduleResponse(val *BulkRescheduleResponse) *NullableBulkRescheduleResponse {
+	return &NullableBulkRescheduleResponse{value: val, isSet: true}
+}
+
+func (v NullableBulkRescheduleResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkRescheduleResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_schedule_response.go b/pkg/infobip/models/email/bulk_schedule_response.go
new file mode 100644
index 0000000..91df62d
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_schedule_response.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkScheduleResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkScheduleResponse{}
+
+// BulkScheduleResponse struct for BulkScheduleResponse
+type BulkScheduleResponse struct {
+	ExternalBulkId *string
+	Bulks          []BulkInfo
+}
+
+// NewBulkScheduleResponse instantiates a new BulkScheduleResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkScheduleResponse() *BulkScheduleResponse {
+	this := BulkScheduleResponse{}
+	return &this
+}
+
+// NewBulkScheduleResponseWithDefaults instantiates a new BulkScheduleResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkScheduleResponseWithDefaults() *BulkScheduleResponse {
+	this := BulkScheduleResponse{}
+
+	return &this
+}
+
+// GetExternalBulkId returns the ExternalBulkId field value if set, zero value otherwise.
+func (o *BulkScheduleResponse) GetExternalBulkId() string {
+	if o == nil || IsNil(o.ExternalBulkId) {
+		var ret string
+		return ret
+	}
+	return *o.ExternalBulkId
+}
+
+// GetExternalBulkIdOk returns a tuple with the ExternalBulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkScheduleResponse) GetExternalBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ExternalBulkId) {
+		return nil, false
+	}
+	return o.ExternalBulkId, true
+}
+
+// HasExternalBulkId returns a boolean if a field has been set.
+func (o *BulkScheduleResponse) HasExternalBulkId() bool {
+	if o != nil && !IsNil(o.ExternalBulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetExternalBulkId gets a reference to the given string and assigns it to the ExternalBulkId field.
+func (o *BulkScheduleResponse) SetExternalBulkId(v string) {
+	o.ExternalBulkId = &v
+}
+
+// GetBulks returns the Bulks field value if set, zero value otherwise.
+func (o *BulkScheduleResponse) GetBulks() []BulkInfo {
+	if o == nil || IsNil(o.Bulks) {
+		var ret []BulkInfo
+		return ret
+	}
+	return o.Bulks
+}
+
+// GetBulksOk returns a tuple with the Bulks field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkScheduleResponse) GetBulksOk() ([]BulkInfo, bool) {
+	if o == nil || IsNil(o.Bulks) {
+		return nil, false
+	}
+	return o.Bulks, true
+}
+
+// HasBulks returns a boolean if a field has been set.
+func (o *BulkScheduleResponse) HasBulks() bool {
+	if o != nil && !IsNil(o.Bulks) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulks gets a reference to the given []BulkInfo and assigns it to the Bulks field.
+func (o *BulkScheduleResponse) SetBulks(v []BulkInfo) {
+	o.Bulks = v
+}
+
+func (o BulkScheduleResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkScheduleResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ExternalBulkId) {
+		toSerialize["externalBulkId"] = o.ExternalBulkId
+	}
+	if !IsNil(o.Bulks) {
+		toSerialize["bulks"] = o.Bulks
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkScheduleResponse struct {
+	value *BulkScheduleResponse
+	isSet bool
+}
+
+func (v NullableBulkScheduleResponse) Get() *BulkScheduleResponse {
+	return v.value
+}
+
+func (v *NullableBulkScheduleResponse) Set(val *BulkScheduleResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkScheduleResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkScheduleResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkScheduleResponse(val *BulkScheduleResponse) *NullableBulkScheduleResponse {
+	return &NullableBulkScheduleResponse{value: val, isSet: true}
+}
+
+func (v NullableBulkScheduleResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkScheduleResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_status.go b/pkg/infobip/models/email/bulk_status.go
new file mode 100644
index 0000000..a86ad41
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_status.go
@@ -0,0 +1,118 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// BulkStatus the model 'BulkStatus'
+type BulkStatus string
+
+// List of BulkStatus
+const (
+	BULKSTATUS_PENDING    BulkStatus = "PENDING"
+	BULKSTATUS_PAUSED     BulkStatus = "PAUSED"
+	BULKSTATUS_PROCESSING BulkStatus = "PROCESSING"
+	BULKSTATUS_CANCELED   BulkStatus = "CANCELED"
+	BULKSTATUS_FINISHED   BulkStatus = "FINISHED"
+	BULKSTATUS_FAILED     BulkStatus = "FAILED"
+)
+
+// All allowed values of BulkStatus enum
+var AllowedBulkStatusEnumValues = []BulkStatus{
+	"PENDING",
+	"PAUSED",
+	"PROCESSING",
+	"CANCELED",
+	"FINISHED",
+	"FAILED",
+}
+
+func (v *BulkStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := BulkStatus(value)
+	for _, existing := range AllowedBulkStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid BulkStatus", value)
+}
+
+// NewBulkStatusFromValue returns a pointer to a valid BulkStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewBulkStatusFromValue(v string) (*BulkStatus, error) {
+	ev := BulkStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for BulkStatus: valid values are %v", v, AllowedBulkStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v BulkStatus) IsValid() bool {
+	for _, existing := range AllowedBulkStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to BulkStatus value
+func (v BulkStatus) Ptr() *BulkStatus {
+	return &v
+}
+
+type NullableBulkStatus struct {
+	value *BulkStatus
+	isSet bool
+}
+
+func (v NullableBulkStatus) Get() *BulkStatus {
+	return v.value
+}
+
+func (v *NullableBulkStatus) Set(val *BulkStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkStatus(val *BulkStatus) *NullableBulkStatus {
+	return &NullableBulkStatus{value: val, isSet: true}
+}
+
+func (v NullableBulkStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_status_info.go b/pkg/infobip/models/email/bulk_status_info.go
new file mode 100644
index 0000000..4ce5a1c
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_status_info.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkStatusInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkStatusInfo{}
+
+// BulkStatusInfo struct for BulkStatusInfo
+type BulkStatusInfo struct {
+	BulkId *string
+	Status *BulkStatus
+}
+
+// NewBulkStatusInfo instantiates a new BulkStatusInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkStatusInfo() *BulkStatusInfo {
+	this := BulkStatusInfo{}
+	return &this
+}
+
+// NewBulkStatusInfoWithDefaults instantiates a new BulkStatusInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkStatusInfoWithDefaults() *BulkStatusInfo {
+	this := BulkStatusInfo{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkStatusInfo) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatusInfo) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkStatusInfo) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkStatusInfo) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *BulkStatusInfo) GetStatus() BulkStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret BulkStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatusInfo) GetStatusOk() (*BulkStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *BulkStatusInfo) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given BulkStatus and assigns it to the Status field.
+func (o *BulkStatusInfo) SetStatus(v BulkStatus) {
+	o.Status = &v
+}
+
+func (o BulkStatusInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkStatusInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkStatusInfo struct {
+	value *BulkStatusInfo
+	isSet bool
+}
+
+func (v NullableBulkStatusInfo) Get() *BulkStatusInfo {
+	return v.value
+}
+
+func (v *NullableBulkStatusInfo) Set(val *BulkStatusInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkStatusInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkStatusInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkStatusInfo(val *BulkStatusInfo) *NullableBulkStatusInfo {
+	return &NullableBulkStatusInfo{value: val, isSet: true}
+}
+
+func (v NullableBulkStatusInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkStatusInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_status_response.go b/pkg/infobip/models/email/bulk_status_response.go
new file mode 100644
index 0000000..fb84e3b
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_status_response.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkStatusResponse{}
+
+// BulkStatusResponse struct for BulkStatusResponse
+type BulkStatusResponse struct {
+	ExternalBulkId *string
+	Bulks          []BulkStatusInfo
+}
+
+// NewBulkStatusResponse instantiates a new BulkStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkStatusResponse() *BulkStatusResponse {
+	this := BulkStatusResponse{}
+	return &this
+}
+
+// NewBulkStatusResponseWithDefaults instantiates a new BulkStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkStatusResponseWithDefaults() *BulkStatusResponse {
+	this := BulkStatusResponse{}
+
+	return &this
+}
+
+// GetExternalBulkId returns the ExternalBulkId field value if set, zero value otherwise.
+func (o *BulkStatusResponse) GetExternalBulkId() string {
+	if o == nil || IsNil(o.ExternalBulkId) {
+		var ret string
+		return ret
+	}
+	return *o.ExternalBulkId
+}
+
+// GetExternalBulkIdOk returns a tuple with the ExternalBulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatusResponse) GetExternalBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ExternalBulkId) {
+		return nil, false
+	}
+	return o.ExternalBulkId, true
+}
+
+// HasExternalBulkId returns a boolean if a field has been set.
+func (o *BulkStatusResponse) HasExternalBulkId() bool {
+	if o != nil && !IsNil(o.ExternalBulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetExternalBulkId gets a reference to the given string and assigns it to the ExternalBulkId field.
+func (o *BulkStatusResponse) SetExternalBulkId(v string) {
+	o.ExternalBulkId = &v
+}
+
+// GetBulks returns the Bulks field value if set, zero value otherwise.
+func (o *BulkStatusResponse) GetBulks() []BulkStatusInfo {
+	if o == nil || IsNil(o.Bulks) {
+		var ret []BulkStatusInfo
+		return ret
+	}
+	return o.Bulks
+}
+
+// GetBulksOk returns a tuple with the Bulks field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatusResponse) GetBulksOk() ([]BulkStatusInfo, bool) {
+	if o == nil || IsNil(o.Bulks) {
+		return nil, false
+	}
+	return o.Bulks, true
+}
+
+// HasBulks returns a boolean if a field has been set.
+func (o *BulkStatusResponse) HasBulks() bool {
+	if o != nil && !IsNil(o.Bulks) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulks gets a reference to the given []BulkStatusInfo and assigns it to the Bulks field.
+func (o *BulkStatusResponse) SetBulks(v []BulkStatusInfo) {
+	o.Bulks = v
+}
+
+func (o BulkStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ExternalBulkId) {
+		toSerialize["externalBulkId"] = o.ExternalBulkId
+	}
+	if !IsNil(o.Bulks) {
+		toSerialize["bulks"] = o.Bulks
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkStatusResponse struct {
+	value *BulkStatusResponse
+	isSet bool
+}
+
+func (v NullableBulkStatusResponse) Get() *BulkStatusResponse {
+	return v.value
+}
+
+func (v *NullableBulkStatusResponse) Set(val *BulkStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkStatusResponse(val *BulkStatusResponse) *NullableBulkStatusResponse {
+	return &NullableBulkStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableBulkStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_update_status_request.go b/pkg/infobip/models/email/bulk_update_status_request.go
new file mode 100644
index 0000000..748d3fa
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_update_status_request.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkUpdateStatusRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkUpdateStatusRequest{}
+
+// BulkUpdateStatusRequest struct for BulkUpdateStatusRequest
+type BulkUpdateStatusRequest struct {
+	Status BulkStatus
+}
+
+type _BulkUpdateStatusRequest BulkUpdateStatusRequest
+
+// NewBulkUpdateStatusRequest instantiates a new BulkUpdateStatusRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkUpdateStatusRequest(status BulkStatus) *BulkUpdateStatusRequest {
+	this := BulkUpdateStatusRequest{}
+	this.Status = status
+	return &this
+}
+
+// NewBulkUpdateStatusRequestWithDefaults instantiates a new BulkUpdateStatusRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkUpdateStatusRequestWithDefaults() *BulkUpdateStatusRequest {
+	this := BulkUpdateStatusRequest{}
+
+	return &this
+}
+
+// GetStatus returns the Status field value
+func (o *BulkUpdateStatusRequest) GetStatus() BulkStatus {
+	if o == nil {
+		var ret BulkStatus
+		return ret
+	}
+
+	return o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value
+// and a boolean to check if the value has been set.
+func (o *BulkUpdateStatusRequest) GetStatusOk() (*BulkStatus, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Status, true
+}
+
+// SetStatus sets field value
+func (o *BulkUpdateStatusRequest) SetStatus(v BulkStatus) {
+	o.Status = v
+}
+
+func (o BulkUpdateStatusRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkUpdateStatusRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["status"] = o.Status
+	return toSerialize, nil
+}
+
+type NullableBulkUpdateStatusRequest struct {
+	value *BulkUpdateStatusRequest
+	isSet bool
+}
+
+func (v NullableBulkUpdateStatusRequest) Get() *BulkUpdateStatusRequest {
+	return v.value
+}
+
+func (v *NullableBulkUpdateStatusRequest) Set(val *BulkUpdateStatusRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkUpdateStatusRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkUpdateStatusRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkUpdateStatusRequest(val *BulkUpdateStatusRequest) *NullableBulkUpdateStatusRequest {
+	return &NullableBulkUpdateStatusRequest{value: val, isSet: true}
+}
+
+func (v NullableBulkUpdateStatusRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkUpdateStatusRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/bulk_update_status_response.go b/pkg/infobip/models/email/bulk_update_status_response.go
new file mode 100644
index 0000000..dfc6253
--- /dev/null
+++ b/pkg/infobip/models/email/bulk_update_status_response.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkUpdateStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkUpdateStatusResponse{}
+
+// BulkUpdateStatusResponse struct for BulkUpdateStatusResponse
+type BulkUpdateStatusResponse struct {
+	BulkId *string
+	Status *BulkStatus
+}
+
+// NewBulkUpdateStatusResponse instantiates a new BulkUpdateStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkUpdateStatusResponse() *BulkUpdateStatusResponse {
+	this := BulkUpdateStatusResponse{}
+	return &this
+}
+
+// NewBulkUpdateStatusResponseWithDefaults instantiates a new BulkUpdateStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkUpdateStatusResponseWithDefaults() *BulkUpdateStatusResponse {
+	this := BulkUpdateStatusResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkUpdateStatusResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkUpdateStatusResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkUpdateStatusResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkUpdateStatusResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *BulkUpdateStatusResponse) GetStatus() BulkStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret BulkStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkUpdateStatusResponse) GetStatusOk() (*BulkStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *BulkUpdateStatusResponse) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given BulkStatus and assigns it to the Status field.
+func (o *BulkUpdateStatusResponse) SetStatus(v BulkStatus) {
+	o.Status = &v
+}
+
+func (o BulkUpdateStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkUpdateStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkUpdateStatusResponse struct {
+	value *BulkUpdateStatusResponse
+	isSet bool
+}
+
+func (v NullableBulkUpdateStatusResponse) Get() *BulkUpdateStatusResponse {
+	return v.value
+}
+
+func (v *NullableBulkUpdateStatusResponse) Set(val *BulkUpdateStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkUpdateStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkUpdateStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkUpdateStatusResponse(val *BulkUpdateStatusResponse) *NullableBulkUpdateStatusResponse {
+	return &NullableBulkUpdateStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableBulkUpdateStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkUpdateStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/delete_suppression.go b/pkg/infobip/models/email/delete_suppression.go
new file mode 100644
index 0000000..823a9d3
--- /dev/null
+++ b/pkg/infobip/models/email/delete_suppression.go
@@ -0,0 +1,177 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DeleteSuppression type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DeleteSuppression{}
+
+// DeleteSuppression Suppression.
+type DeleteSuppression struct {
+	// Domain name from which suppressions will be deleted.
+	DomainName string
+	// Email addresses that need to be deleted.
+	EmailAddress []string
+	Type         ApiSuppressionType
+}
+
+type _DeleteSuppression DeleteSuppression
+
+// NewDeleteSuppression instantiates a new DeleteSuppression object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDeleteSuppression(domainName string, emailAddress []string, type_ ApiSuppressionType) *DeleteSuppression {
+	this := DeleteSuppression{}
+	this.DomainName = domainName
+	this.EmailAddress = emailAddress
+	this.Type = type_
+	return &this
+}
+
+// NewDeleteSuppressionWithDefaults instantiates a new DeleteSuppression object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDeleteSuppressionWithDefaults() *DeleteSuppression {
+	this := DeleteSuppression{}
+
+	return &this
+}
+
+// GetDomainName returns the DomainName field value
+func (o *DeleteSuppression) GetDomainName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DomainName
+}
+
+// GetDomainNameOk returns a tuple with the DomainName field value
+// and a boolean to check if the value has been set.
+func (o *DeleteSuppression) GetDomainNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DomainName, true
+}
+
+// SetDomainName sets field value
+func (o *DeleteSuppression) SetDomainName(v string) {
+	o.DomainName = v
+}
+
+// GetEmailAddress returns the EmailAddress field value
+func (o *DeleteSuppression) GetEmailAddress() []string {
+	if o == nil {
+		var ret []string
+		return ret
+	}
+
+	return o.EmailAddress
+}
+
+// GetEmailAddressOk returns a tuple with the EmailAddress field value
+// and a boolean to check if the value has been set.
+func (o *DeleteSuppression) GetEmailAddressOk() ([]string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.EmailAddress, true
+}
+
+// SetEmailAddress sets field value
+func (o *DeleteSuppression) SetEmailAddress(v []string) {
+	o.EmailAddress = v
+}
+
+// GetType returns the Type field value
+func (o *DeleteSuppression) GetType() ApiSuppressionType {
+	if o == nil {
+		var ret ApiSuppressionType
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *DeleteSuppression) GetTypeOk() (*ApiSuppressionType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *DeleteSuppression) SetType(v ApiSuppressionType) {
+	o.Type = v
+}
+
+func (o DeleteSuppression) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DeleteSuppression) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["domainName"] = o.DomainName
+	toSerialize["emailAddress"] = o.EmailAddress
+	toSerialize["type"] = o.Type
+	return toSerialize, nil
+}
+
+type NullableDeleteSuppression struct {
+	value *DeleteSuppression
+	isSet bool
+}
+
+func (v NullableDeleteSuppression) Get() *DeleteSuppression {
+	return v.value
+}
+
+func (v *NullableDeleteSuppression) Set(val *DeleteSuppression) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDeleteSuppression) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDeleteSuppression) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDeleteSuppression(val *DeleteSuppression) *NullableDeleteSuppression {
+	return &NullableDeleteSuppression{value: val, isSet: true}
+}
+
+func (v NullableDeleteSuppression) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDeleteSuppression) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/delete_suppression_request.go b/pkg/infobip/models/email/delete_suppression_request.go
new file mode 100644
index 0000000..67af455
--- /dev/null
+++ b/pkg/infobip/models/email/delete_suppression_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DeleteSuppressionRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DeleteSuppressionRequest{}
+
+// DeleteSuppressionRequest Suppressions request.
+type DeleteSuppressionRequest struct {
+	// Email addresses to delete from the suppression list. Number of destinations cannot exceed 10,000.
+	Suppressions []DeleteSuppression
+}
+
+type _DeleteSuppressionRequest DeleteSuppressionRequest
+
+// NewDeleteSuppressionRequest instantiates a new DeleteSuppressionRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDeleteSuppressionRequest(suppressions []DeleteSuppression) *DeleteSuppressionRequest {
+	this := DeleteSuppressionRequest{}
+	this.Suppressions = suppressions
+	return &this
+}
+
+// NewDeleteSuppressionRequestWithDefaults instantiates a new DeleteSuppressionRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDeleteSuppressionRequestWithDefaults() *DeleteSuppressionRequest {
+	this := DeleteSuppressionRequest{}
+
+	return &this
+}
+
+// GetSuppressions returns the Suppressions field value
+func (o *DeleteSuppressionRequest) GetSuppressions() []DeleteSuppression {
+	if o == nil {
+		var ret []DeleteSuppression
+		return ret
+	}
+
+	return o.Suppressions
+}
+
+// GetSuppressionsOk returns a tuple with the Suppressions field value
+// and a boolean to check if the value has been set.
+func (o *DeleteSuppressionRequest) GetSuppressionsOk() ([]DeleteSuppression, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Suppressions, true
+}
+
+// SetSuppressions sets field value
+func (o *DeleteSuppressionRequest) SetSuppressions(v []DeleteSuppression) {
+	o.Suppressions = v
+}
+
+func (o DeleteSuppressionRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DeleteSuppressionRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["suppressions"] = o.Suppressions
+	return toSerialize, nil
+}
+
+type NullableDeleteSuppressionRequest struct {
+	value *DeleteSuppressionRequest
+	isSet bool
+}
+
+func (v NullableDeleteSuppressionRequest) Get() *DeleteSuppressionRequest {
+	return v.value
+}
+
+func (v *NullableDeleteSuppressionRequest) Set(val *DeleteSuppressionRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDeleteSuppressionRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDeleteSuppressionRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDeleteSuppressionRequest(val *DeleteSuppressionRequest) *NullableDeleteSuppressionRequest {
+	return &NullableDeleteSuppressionRequest{value: val, isSet: true}
+}
+
+func (v NullableDeleteSuppressionRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDeleteSuppressionRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/delivery_report.go b/pkg/infobip/models/email/delivery_report.go
new file mode 100644
index 0000000..5b85fff
--- /dev/null
+++ b/pkg/infobip/models/email/delivery_report.go
@@ -0,0 +1,533 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DeliveryReport type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DeliveryReport{}
+
+// DeliveryReport struct for DeliveryReport
+type DeliveryReport struct {
+	// The ID that uniquely identifies a list of email messages. This is either defined by user in the request or auto generated.
+	BulkId *string
+	Price  *Price
+	Status *Status
+	Error  *Error
+	// The ID that uniquely identifies the email sent to the recipient.
+	MessageId *string
+	// Delivery date and time.
+	DoneAt *Time
+	// The number of emails sent.
+	SmsCount *int32
+	// Send date and time. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SentAt *Time
+	// Contains the link to the HTML sent to recipient. This will be present only if the _view in browser_ feature is used in the email. (Please note that this feature is not activated automatically for Email traffic sent over API. If you would like to utilize it please reach out to your Infobip person of contact.)
+	BrowserLink *string
+	// The IP address that was used to send out the email.
+	SendingIp *string
+	// Callback data sent through `callbackData` field in fully featured email.
+	CallbackData *string
+	// Destination email address.
+	To *string
+}
+
+// NewDeliveryReport instantiates a new DeliveryReport object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDeliveryReport() *DeliveryReport {
+	this := DeliveryReport{}
+	return &this
+}
+
+// NewDeliveryReportWithDefaults instantiates a new DeliveryReport object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDeliveryReportWithDefaults() *DeliveryReport {
+	this := DeliveryReport{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *DeliveryReport) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *DeliveryReport) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *DeliveryReport) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetPrice returns the Price field value if set, zero value otherwise.
+func (o *DeliveryReport) GetPrice() Price {
+	if o == nil || IsNil(o.Price) {
+		var ret Price
+		return ret
+	}
+	return *o.Price
+}
+
+// GetPriceOk returns a tuple with the Price field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetPriceOk() (*Price, bool) {
+	if o == nil || IsNil(o.Price) {
+		return nil, false
+	}
+	return o.Price, true
+}
+
+// HasPrice returns a boolean if a field has been set.
+func (o *DeliveryReport) HasPrice() bool {
+	if o != nil && !IsNil(o.Price) {
+		return true
+	}
+
+	return false
+}
+
+// SetPrice gets a reference to the given Price and assigns it to the Price field.
+func (o *DeliveryReport) SetPrice(v Price) {
+	o.Price = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *DeliveryReport) GetStatus() Status {
+	if o == nil || IsNil(o.Status) {
+		var ret Status
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetStatusOk() (*Status, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *DeliveryReport) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given Status and assigns it to the Status field.
+func (o *DeliveryReport) SetStatus(v Status) {
+	o.Status = &v
+}
+
+// GetError returns the Error field value if set, zero value otherwise.
+func (o *DeliveryReport) GetError() Error {
+	if o == nil || IsNil(o.Error) {
+		var ret Error
+		return ret
+	}
+	return *o.Error
+}
+
+// GetErrorOk returns a tuple with the Error field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetErrorOk() (*Error, bool) {
+	if o == nil || IsNil(o.Error) {
+		return nil, false
+	}
+	return o.Error, true
+}
+
+// HasError returns a boolean if a field has been set.
+func (o *DeliveryReport) HasError() bool {
+	if o != nil && !IsNil(o.Error) {
+		return true
+	}
+
+	return false
+}
+
+// SetError gets a reference to the given Error and assigns it to the Error field.
+func (o *DeliveryReport) SetError(v Error) {
+	o.Error = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *DeliveryReport) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *DeliveryReport) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *DeliveryReport) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetDoneAt returns the DoneAt field value if set, zero value otherwise.
+func (o *DeliveryReport) GetDoneAt() Time {
+	if o == nil || IsNil(o.DoneAt) {
+		var ret Time
+		return ret
+	}
+	return *o.DoneAt
+}
+
+// GetDoneAtOk returns a tuple with the DoneAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetDoneAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.DoneAt) {
+		return nil, false
+	}
+	return o.DoneAt, true
+}
+
+// HasDoneAt returns a boolean if a field has been set.
+func (o *DeliveryReport) HasDoneAt() bool {
+	if o != nil && !IsNil(o.DoneAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetDoneAt gets a reference to the given Time and assigns it to the DoneAt field.
+func (o *DeliveryReport) SetDoneAt(v Time) {
+	o.DoneAt = &v
+}
+
+// GetSmsCount returns the SmsCount field value if set, zero value otherwise.
+func (o *DeliveryReport) GetSmsCount() int32 {
+	if o == nil || IsNil(o.SmsCount) {
+		var ret int32
+		return ret
+	}
+	return *o.SmsCount
+}
+
+// GetSmsCountOk returns a tuple with the SmsCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetSmsCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.SmsCount) {
+		return nil, false
+	}
+	return o.SmsCount, true
+}
+
+// HasSmsCount returns a boolean if a field has been set.
+func (o *DeliveryReport) HasSmsCount() bool {
+	if o != nil && !IsNil(o.SmsCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetSmsCount gets a reference to the given int32 and assigns it to the SmsCount field.
+func (o *DeliveryReport) SetSmsCount(v int32) {
+	o.SmsCount = &v
+}
+
+// GetSentAt returns the SentAt field value if set, zero value otherwise.
+func (o *DeliveryReport) GetSentAt() Time {
+	if o == nil || IsNil(o.SentAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SentAt
+}
+
+// GetSentAtOk returns a tuple with the SentAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetSentAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SentAt) {
+		return nil, false
+	}
+	return o.SentAt, true
+}
+
+// HasSentAt returns a boolean if a field has been set.
+func (o *DeliveryReport) HasSentAt() bool {
+	if o != nil && !IsNil(o.SentAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSentAt gets a reference to the given Time and assigns it to the SentAt field.
+func (o *DeliveryReport) SetSentAt(v Time) {
+	o.SentAt = &v
+}
+
+// GetBrowserLink returns the BrowserLink field value if set, zero value otherwise.
+func (o *DeliveryReport) GetBrowserLink() string {
+	if o == nil || IsNil(o.BrowserLink) {
+		var ret string
+		return ret
+	}
+	return *o.BrowserLink
+}
+
+// GetBrowserLinkOk returns a tuple with the BrowserLink field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetBrowserLinkOk() (*string, bool) {
+	if o == nil || IsNil(o.BrowserLink) {
+		return nil, false
+	}
+	return o.BrowserLink, true
+}
+
+// HasBrowserLink returns a boolean if a field has been set.
+func (o *DeliveryReport) HasBrowserLink() bool {
+	if o != nil && !IsNil(o.BrowserLink) {
+		return true
+	}
+
+	return false
+}
+
+// SetBrowserLink gets a reference to the given string and assigns it to the BrowserLink field.
+func (o *DeliveryReport) SetBrowserLink(v string) {
+	o.BrowserLink = &v
+}
+
+// GetSendingIp returns the SendingIp field value if set, zero value otherwise.
+func (o *DeliveryReport) GetSendingIp() string {
+	if o == nil || IsNil(o.SendingIp) {
+		var ret string
+		return ret
+	}
+	return *o.SendingIp
+}
+
+// GetSendingIpOk returns a tuple with the SendingIp field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetSendingIpOk() (*string, bool) {
+	if o == nil || IsNil(o.SendingIp) {
+		return nil, false
+	}
+	return o.SendingIp, true
+}
+
+// HasSendingIp returns a boolean if a field has been set.
+func (o *DeliveryReport) HasSendingIp() bool {
+	if o != nil && !IsNil(o.SendingIp) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendingIp gets a reference to the given string and assigns it to the SendingIp field.
+func (o *DeliveryReport) SetSendingIp(v string) {
+	o.SendingIp = &v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *DeliveryReport) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *DeliveryReport) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *DeliveryReport) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *DeliveryReport) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryReport) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *DeliveryReport) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *DeliveryReport) SetTo(v string) {
+	o.To = &v
+}
+
+func (o DeliveryReport) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DeliveryReport) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.Price) {
+		toSerialize["price"] = o.Price
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Error) {
+		toSerialize["error"] = o.Error
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.DoneAt) {
+		toSerialize["doneAt"] = o.DoneAt
+	}
+	if !IsNil(o.SmsCount) {
+		toSerialize["smsCount"] = o.SmsCount
+	}
+	if !IsNil(o.SentAt) {
+		toSerialize["sentAt"] = o.SentAt
+	}
+	if !IsNil(o.BrowserLink) {
+		toSerialize["browserLink"] = o.BrowserLink
+	}
+	if !IsNil(o.SendingIp) {
+		toSerialize["sendingIp"] = o.SendingIp
+	}
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	return toSerialize, nil
+}
+
+type NullableDeliveryReport struct {
+	value *DeliveryReport
+	isSet bool
+}
+
+func (v NullableDeliveryReport) Get() *DeliveryReport {
+	return v.value
+}
+
+func (v *NullableDeliveryReport) Set(val *DeliveryReport) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDeliveryReport) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDeliveryReport) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDeliveryReport(val *DeliveryReport) *NullableDeliveryReport {
+	return &NullableDeliveryReport{value: val, isSet: true}
+}
+
+func (v NullableDeliveryReport) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDeliveryReport) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/dlr_report_response.go b/pkg/infobip/models/email/dlr_report_response.go
new file mode 100644
index 0000000..485d214
--- /dev/null
+++ b/pkg/infobip/models/email/dlr_report_response.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DLRReportResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DLRReportResponse{}
+
+// DLRReportResponse struct for DLRReportResponse
+type DLRReportResponse struct {
+	Results []DeliveryReport
+}
+
+// NewDLRReportResponse instantiates a new DLRReportResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDLRReportResponse() *DLRReportResponse {
+	this := DLRReportResponse{}
+	return &this
+}
+
+// NewDLRReportResponseWithDefaults instantiates a new DLRReportResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDLRReportResponseWithDefaults() *DLRReportResponse {
+	this := DLRReportResponse{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *DLRReportResponse) GetResults() []DeliveryReport {
+	if o == nil || IsNil(o.Results) {
+		var ret []DeliveryReport
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DLRReportResponse) GetResultsOk() ([]DeliveryReport, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *DLRReportResponse) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []DeliveryReport and assigns it to the Results field.
+func (o *DLRReportResponse) SetResults(v []DeliveryReport) {
+	o.Results = v
+}
+
+func (o DLRReportResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DLRReportResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	return toSerialize, nil
+}
+
+type NullableDLRReportResponse struct {
+	value *DLRReportResponse
+	isSet bool
+}
+
+func (v NullableDLRReportResponse) Get() *DLRReportResponse {
+	return v.value
+}
+
+func (v *NullableDLRReportResponse) Set(val *DLRReportResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDLRReportResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDLRReportResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDLRReportResponse(val *DLRReportResponse) *NullableDLRReportResponse {
+	return &NullableDLRReportResponse{value: val, isSet: true}
+}
+
+func (v NullableDLRReportResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDLRReportResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/dns_record_response.go b/pkg/infobip/models/email/dns_record_response.go
new file mode 100644
index 0000000..163b2b0
--- /dev/null
+++ b/pkg/infobip/models/email/dns_record_response.go
@@ -0,0 +1,240 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DnsRecordResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DnsRecordResponse{}
+
+// DnsRecordResponse Records for the domain.
+type DnsRecordResponse struct {
+	// Type of the record.
+	RecordType *string
+	// Name of the record.
+	Name *string
+	// Expected value to be set for the given record.
+	ExpectedValue *string
+	// Boolean value representing if the record is verified or not.
+	Verified *bool
+}
+
+// NewDnsRecordResponse instantiates a new DnsRecordResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDnsRecordResponse() *DnsRecordResponse {
+	this := DnsRecordResponse{}
+	return &this
+}
+
+// NewDnsRecordResponseWithDefaults instantiates a new DnsRecordResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDnsRecordResponseWithDefaults() *DnsRecordResponse {
+	this := DnsRecordResponse{}
+
+	return &this
+}
+
+// GetRecordType returns the RecordType field value if set, zero value otherwise.
+func (o *DnsRecordResponse) GetRecordType() string {
+	if o == nil || IsNil(o.RecordType) {
+		var ret string
+		return ret
+	}
+	return *o.RecordType
+}
+
+// GetRecordTypeOk returns a tuple with the RecordType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DnsRecordResponse) GetRecordTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.RecordType) {
+		return nil, false
+	}
+	return o.RecordType, true
+}
+
+// HasRecordType returns a boolean if a field has been set.
+func (o *DnsRecordResponse) HasRecordType() bool {
+	if o != nil && !IsNil(o.RecordType) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordType gets a reference to the given string and assigns it to the RecordType field.
+func (o *DnsRecordResponse) SetRecordType(v string) {
+	o.RecordType = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *DnsRecordResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DnsRecordResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *DnsRecordResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *DnsRecordResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetExpectedValue returns the ExpectedValue field value if set, zero value otherwise.
+func (o *DnsRecordResponse) GetExpectedValue() string {
+	if o == nil || IsNil(o.ExpectedValue) {
+		var ret string
+		return ret
+	}
+	return *o.ExpectedValue
+}
+
+// GetExpectedValueOk returns a tuple with the ExpectedValue field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DnsRecordResponse) GetExpectedValueOk() (*string, bool) {
+	if o == nil || IsNil(o.ExpectedValue) {
+		return nil, false
+	}
+	return o.ExpectedValue, true
+}
+
+// HasExpectedValue returns a boolean if a field has been set.
+func (o *DnsRecordResponse) HasExpectedValue() bool {
+	if o != nil && !IsNil(o.ExpectedValue) {
+		return true
+	}
+
+	return false
+}
+
+// SetExpectedValue gets a reference to the given string and assigns it to the ExpectedValue field.
+func (o *DnsRecordResponse) SetExpectedValue(v string) {
+	o.ExpectedValue = &v
+}
+
+// GetVerified returns the Verified field value if set, zero value otherwise.
+func (o *DnsRecordResponse) GetVerified() bool {
+	if o == nil || IsNil(o.Verified) {
+		var ret bool
+		return ret
+	}
+	return *o.Verified
+}
+
+// GetVerifiedOk returns a tuple with the Verified field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DnsRecordResponse) GetVerifiedOk() (*bool, bool) {
+	if o == nil || IsNil(o.Verified) {
+		return nil, false
+	}
+	return o.Verified, true
+}
+
+// HasVerified returns a boolean if a field has been set.
+func (o *DnsRecordResponse) HasVerified() bool {
+	if o != nil && !IsNil(o.Verified) {
+		return true
+	}
+
+	return false
+}
+
+// SetVerified gets a reference to the given bool and assigns it to the Verified field.
+func (o *DnsRecordResponse) SetVerified(v bool) {
+	o.Verified = &v
+}
+
+func (o DnsRecordResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DnsRecordResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.RecordType) {
+		toSerialize["recordType"] = o.RecordType
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.ExpectedValue) {
+		toSerialize["expectedValue"] = o.ExpectedValue
+	}
+	if !IsNil(o.Verified) {
+		toSerialize["verified"] = o.Verified
+	}
+	return toSerialize, nil
+}
+
+type NullableDnsRecordResponse struct {
+	value *DnsRecordResponse
+	isSet bool
+}
+
+func (v NullableDnsRecordResponse) Get() *DnsRecordResponse {
+	return v.value
+}
+
+func (v *NullableDnsRecordResponse) Set(val *DnsRecordResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDnsRecordResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDnsRecordResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDnsRecordResponse(val *DnsRecordResponse) *NullableDnsRecordResponse {
+	return &NullableDnsRecordResponse{value: val, isSet: true}
+}
+
+func (v NullableDnsRecordResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDnsRecordResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/domain_info.go b/pkg/infobip/models/email/domain_info.go
new file mode 100644
index 0000000..d61c32b
--- /dev/null
+++ b/pkg/infobip/models/email/domain_info.go
@@ -0,0 +1,373 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DomainInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DomainInfo{}
+
+// DomainInfo Domain get response.
+type DomainInfo struct {
+	// Name of the requested domain.
+	DomainName string
+	DataAccess ApiDomainAccess
+	// Read bounces permission.
+	ReadBounces bool
+	// Create bounces permission.
+	CreateBounces bool
+	// Delete bounces permission.
+	DeleteBounces bool
+	// Read complaints permission.
+	ReadComplaints bool
+	// Create complaints permission.
+	CreateComplaints bool
+	// Delete complaints permission.
+	DeleteComplaints bool
+	// Read overquotas permission.
+	ReadOverquotas bool
+	// Delete overquotas permission.
+	DeleteOverquotas bool
+}
+
+type _DomainInfo DomainInfo
+
+// NewDomainInfo instantiates a new DomainInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDomainInfo(domainName string, dataAccess ApiDomainAccess, readBounces bool, createBounces bool, deleteBounces bool, readComplaints bool, createComplaints bool, deleteComplaints bool, readOverquotas bool, deleteOverquotas bool) *DomainInfo {
+	this := DomainInfo{}
+	this.DomainName = domainName
+	this.DataAccess = dataAccess
+	this.ReadBounces = readBounces
+	this.CreateBounces = createBounces
+	this.DeleteBounces = deleteBounces
+	this.ReadComplaints = readComplaints
+	this.CreateComplaints = createComplaints
+	this.DeleteComplaints = deleteComplaints
+	this.ReadOverquotas = readOverquotas
+	this.DeleteOverquotas = deleteOverquotas
+	return &this
+}
+
+// NewDomainInfoWithDefaults instantiates a new DomainInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDomainInfoWithDefaults() *DomainInfo {
+	this := DomainInfo{}
+
+	return &this
+}
+
+// GetDomainName returns the DomainName field value
+func (o *DomainInfo) GetDomainName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DomainName
+}
+
+// GetDomainNameOk returns a tuple with the DomainName field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetDomainNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DomainName, true
+}
+
+// SetDomainName sets field value
+func (o *DomainInfo) SetDomainName(v string) {
+	o.DomainName = v
+}
+
+// GetDataAccess returns the DataAccess field value
+func (o *DomainInfo) GetDataAccess() ApiDomainAccess {
+	if o == nil {
+		var ret ApiDomainAccess
+		return ret
+	}
+
+	return o.DataAccess
+}
+
+// GetDataAccessOk returns a tuple with the DataAccess field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetDataAccessOk() (*ApiDomainAccess, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DataAccess, true
+}
+
+// SetDataAccess sets field value
+func (o *DomainInfo) SetDataAccess(v ApiDomainAccess) {
+	o.DataAccess = v
+}
+
+// GetReadBounces returns the ReadBounces field value
+func (o *DomainInfo) GetReadBounces() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.ReadBounces
+}
+
+// GetReadBouncesOk returns a tuple with the ReadBounces field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetReadBouncesOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ReadBounces, true
+}
+
+// SetReadBounces sets field value
+func (o *DomainInfo) SetReadBounces(v bool) {
+	o.ReadBounces = v
+}
+
+// GetCreateBounces returns the CreateBounces field value
+func (o *DomainInfo) GetCreateBounces() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.CreateBounces
+}
+
+// GetCreateBouncesOk returns a tuple with the CreateBounces field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetCreateBouncesOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CreateBounces, true
+}
+
+// SetCreateBounces sets field value
+func (o *DomainInfo) SetCreateBounces(v bool) {
+	o.CreateBounces = v
+}
+
+// GetDeleteBounces returns the DeleteBounces field value
+func (o *DomainInfo) GetDeleteBounces() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.DeleteBounces
+}
+
+// GetDeleteBouncesOk returns a tuple with the DeleteBounces field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetDeleteBouncesOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DeleteBounces, true
+}
+
+// SetDeleteBounces sets field value
+func (o *DomainInfo) SetDeleteBounces(v bool) {
+	o.DeleteBounces = v
+}
+
+// GetReadComplaints returns the ReadComplaints field value
+func (o *DomainInfo) GetReadComplaints() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.ReadComplaints
+}
+
+// GetReadComplaintsOk returns a tuple with the ReadComplaints field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetReadComplaintsOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ReadComplaints, true
+}
+
+// SetReadComplaints sets field value
+func (o *DomainInfo) SetReadComplaints(v bool) {
+	o.ReadComplaints = v
+}
+
+// GetCreateComplaints returns the CreateComplaints field value
+func (o *DomainInfo) GetCreateComplaints() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.CreateComplaints
+}
+
+// GetCreateComplaintsOk returns a tuple with the CreateComplaints field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetCreateComplaintsOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CreateComplaints, true
+}
+
+// SetCreateComplaints sets field value
+func (o *DomainInfo) SetCreateComplaints(v bool) {
+	o.CreateComplaints = v
+}
+
+// GetDeleteComplaints returns the DeleteComplaints field value
+func (o *DomainInfo) GetDeleteComplaints() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.DeleteComplaints
+}
+
+// GetDeleteComplaintsOk returns a tuple with the DeleteComplaints field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetDeleteComplaintsOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DeleteComplaints, true
+}
+
+// SetDeleteComplaints sets field value
+func (o *DomainInfo) SetDeleteComplaints(v bool) {
+	o.DeleteComplaints = v
+}
+
+// GetReadOverquotas returns the ReadOverquotas field value
+func (o *DomainInfo) GetReadOverquotas() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.ReadOverquotas
+}
+
+// GetReadOverquotasOk returns a tuple with the ReadOverquotas field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetReadOverquotasOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ReadOverquotas, true
+}
+
+// SetReadOverquotas sets field value
+func (o *DomainInfo) SetReadOverquotas(v bool) {
+	o.ReadOverquotas = v
+}
+
+// GetDeleteOverquotas returns the DeleteOverquotas field value
+func (o *DomainInfo) GetDeleteOverquotas() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.DeleteOverquotas
+}
+
+// GetDeleteOverquotasOk returns a tuple with the DeleteOverquotas field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfo) GetDeleteOverquotasOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DeleteOverquotas, true
+}
+
+// SetDeleteOverquotas sets field value
+func (o *DomainInfo) SetDeleteOverquotas(v bool) {
+	o.DeleteOverquotas = v
+}
+
+func (o DomainInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DomainInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["domainName"] = o.DomainName
+	toSerialize["dataAccess"] = o.DataAccess
+	toSerialize["readBounces"] = o.ReadBounces
+	toSerialize["createBounces"] = o.CreateBounces
+	toSerialize["deleteBounces"] = o.DeleteBounces
+	toSerialize["readComplaints"] = o.ReadComplaints
+	toSerialize["createComplaints"] = o.CreateComplaints
+	toSerialize["deleteComplaints"] = o.DeleteComplaints
+	toSerialize["readOverquotas"] = o.ReadOverquotas
+	toSerialize["deleteOverquotas"] = o.DeleteOverquotas
+	return toSerialize, nil
+}
+
+type NullableDomainInfo struct {
+	value *DomainInfo
+	isSet bool
+}
+
+func (v NullableDomainInfo) Get() *DomainInfo {
+	return v.value
+}
+
+func (v *NullableDomainInfo) Set(val *DomainInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDomainInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDomainInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDomainInfo(val *DomainInfo) *NullableDomainInfo {
+	return &NullableDomainInfo{value: val, isSet: true}
+}
+
+func (v NullableDomainInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDomainInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/domain_info_page_response.go b/pkg/infobip/models/email/domain_info_page_response.go
new file mode 100644
index 0000000..a347930
--- /dev/null
+++ b/pkg/infobip/models/email/domain_info_page_response.go
@@ -0,0 +1,149 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DomainInfoPageResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DomainInfoPageResponse{}
+
+// DomainInfoPageResponse Domain get response.
+type DomainInfoPageResponse struct {
+	// Domains for requested paging information.
+	Results []DomainInfo
+	Paging  ApiPageDetails
+}
+
+type _DomainInfoPageResponse DomainInfoPageResponse
+
+// NewDomainInfoPageResponse instantiates a new DomainInfoPageResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDomainInfoPageResponse(results []DomainInfo, paging ApiPageDetails) *DomainInfoPageResponse {
+	this := DomainInfoPageResponse{}
+	this.Results = results
+	this.Paging = paging
+	return &this
+}
+
+// NewDomainInfoPageResponseWithDefaults instantiates a new DomainInfoPageResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDomainInfoPageResponseWithDefaults() *DomainInfoPageResponse {
+	this := DomainInfoPageResponse{}
+
+	return &this
+}
+
+// GetResults returns the Results field value
+func (o *DomainInfoPageResponse) GetResults() []DomainInfo {
+	if o == nil {
+		var ret []DomainInfo
+		return ret
+	}
+
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfoPageResponse) GetResultsOk() ([]DomainInfo, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// SetResults sets field value
+func (o *DomainInfoPageResponse) SetResults(v []DomainInfo) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value
+func (o *DomainInfoPageResponse) GetPaging() ApiPageDetails {
+	if o == nil {
+		var ret ApiPageDetails
+		return ret
+	}
+
+	return o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value
+// and a boolean to check if the value has been set.
+func (o *DomainInfoPageResponse) GetPagingOk() (*ApiPageDetails, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Paging, true
+}
+
+// SetPaging sets field value
+func (o *DomainInfoPageResponse) SetPaging(v ApiPageDetails) {
+	o.Paging = v
+}
+
+func (o DomainInfoPageResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DomainInfoPageResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["results"] = o.Results
+	toSerialize["paging"] = o.Paging
+	return toSerialize, nil
+}
+
+type NullableDomainInfoPageResponse struct {
+	value *DomainInfoPageResponse
+	isSet bool
+}
+
+func (v NullableDomainInfoPageResponse) Get() *DomainInfoPageResponse {
+	return v.value
+}
+
+func (v *NullableDomainInfoPageResponse) Set(val *DomainInfoPageResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDomainInfoPageResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDomainInfoPageResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDomainInfoPageResponse(val *DomainInfoPageResponse) *NullableDomainInfoPageResponse {
+	return &NullableDomainInfoPageResponse{value: val, isSet: true}
+}
+
+func (v NullableDomainInfoPageResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDomainInfoPageResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/domain_ip_pool.go b/pkg/infobip/models/email/domain_ip_pool.go
new file mode 100644
index 0000000..7df450c
--- /dev/null
+++ b/pkg/infobip/models/email/domain_ip_pool.go
@@ -0,0 +1,205 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DomainIpPool type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DomainIpPool{}
+
+// DomainIpPool IP pools assigned to the domain. Assigned IP pools with the lowest priority value have the highest sending precedence.
+type DomainIpPool struct {
+	// IP pool identifier.
+	Id string
+	// IP pool name.
+	Name string
+	// IP pool sending priority. Higher value will result in a lower sending precedence for the specified IP pool.
+	Priority int32
+	Ips      []IpResponse
+}
+
+type _DomainIpPool DomainIpPool
+
+// NewDomainIpPool instantiates a new DomainIpPool object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDomainIpPool(id string, name string, priority int32, ips []IpResponse) *DomainIpPool {
+	this := DomainIpPool{}
+	this.Id = id
+	this.Name = name
+	this.Priority = priority
+	this.Ips = ips
+	return &this
+}
+
+// NewDomainIpPoolWithDefaults instantiates a new DomainIpPool object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDomainIpPoolWithDefaults() *DomainIpPool {
+	this := DomainIpPool{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *DomainIpPool) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPool) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *DomainIpPool) SetId(v string) {
+	o.Id = v
+}
+
+// GetName returns the Name field value
+func (o *DomainIpPool) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPool) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *DomainIpPool) SetName(v string) {
+	o.Name = v
+}
+
+// GetPriority returns the Priority field value
+func (o *DomainIpPool) GetPriority() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Priority
+}
+
+// GetPriorityOk returns a tuple with the Priority field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPool) GetPriorityOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Priority, true
+}
+
+// SetPriority sets field value
+func (o *DomainIpPool) SetPriority(v int32) {
+	o.Priority = v
+}
+
+// GetIps returns the Ips field value
+func (o *DomainIpPool) GetIps() []IpResponse {
+	if o == nil {
+		var ret []IpResponse
+		return ret
+	}
+
+	return o.Ips
+}
+
+// GetIpsOk returns a tuple with the Ips field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPool) GetIpsOk() ([]IpResponse, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Ips, true
+}
+
+// SetIps sets field value
+func (o *DomainIpPool) SetIps(v []IpResponse) {
+	o.Ips = v
+}
+
+func (o DomainIpPool) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DomainIpPool) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["name"] = o.Name
+	toSerialize["priority"] = o.Priority
+	toSerialize["ips"] = o.Ips
+	return toSerialize, nil
+}
+
+type NullableDomainIpPool struct {
+	value *DomainIpPool
+	isSet bool
+}
+
+func (v NullableDomainIpPool) Get() *DomainIpPool {
+	return v.value
+}
+
+func (v *NullableDomainIpPool) Set(val *DomainIpPool) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDomainIpPool) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDomainIpPool) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDomainIpPool(val *DomainIpPool) *NullableDomainIpPool {
+	return &NullableDomainIpPool{value: val, isSet: true}
+}
+
+func (v NullableDomainIpPool) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDomainIpPool) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/domain_ip_pool_assign_request.go b/pkg/infobip/models/email/domain_ip_pool_assign_request.go
new file mode 100644
index 0000000..03bc6be
--- /dev/null
+++ b/pkg/infobip/models/email/domain_ip_pool_assign_request.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DomainIpPoolAssignRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DomainIpPoolAssignRequest{}
+
+// DomainIpPoolAssignRequest struct for DomainIpPoolAssignRequest
+type DomainIpPoolAssignRequest struct {
+	// IP pool identifier.
+	PoolId string
+	// IP pool sending priority.
+	Priority int32
+}
+
+type _DomainIpPoolAssignRequest DomainIpPoolAssignRequest
+
+// NewDomainIpPoolAssignRequest instantiates a new DomainIpPoolAssignRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDomainIpPoolAssignRequest(poolId string, priority int32) *DomainIpPoolAssignRequest {
+	this := DomainIpPoolAssignRequest{}
+	this.PoolId = poolId
+	this.Priority = priority
+	return &this
+}
+
+// NewDomainIpPoolAssignRequestWithDefaults instantiates a new DomainIpPoolAssignRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDomainIpPoolAssignRequestWithDefaults() *DomainIpPoolAssignRequest {
+	this := DomainIpPoolAssignRequest{}
+
+	return &this
+}
+
+// GetPoolId returns the PoolId field value
+func (o *DomainIpPoolAssignRequest) GetPoolId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PoolId
+}
+
+// GetPoolIdOk returns a tuple with the PoolId field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPoolAssignRequest) GetPoolIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PoolId, true
+}
+
+// SetPoolId sets field value
+func (o *DomainIpPoolAssignRequest) SetPoolId(v string) {
+	o.PoolId = v
+}
+
+// GetPriority returns the Priority field value
+func (o *DomainIpPoolAssignRequest) GetPriority() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Priority
+}
+
+// GetPriorityOk returns a tuple with the Priority field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPoolAssignRequest) GetPriorityOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Priority, true
+}
+
+// SetPriority sets field value
+func (o *DomainIpPoolAssignRequest) SetPriority(v int32) {
+	o.Priority = v
+}
+
+func (o DomainIpPoolAssignRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DomainIpPoolAssignRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["poolId"] = o.PoolId
+	toSerialize["priority"] = o.Priority
+	return toSerialize, nil
+}
+
+type NullableDomainIpPoolAssignRequest struct {
+	value *DomainIpPoolAssignRequest
+	isSet bool
+}
+
+func (v NullableDomainIpPoolAssignRequest) Get() *DomainIpPoolAssignRequest {
+	return v.value
+}
+
+func (v *NullableDomainIpPoolAssignRequest) Set(val *DomainIpPoolAssignRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDomainIpPoolAssignRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDomainIpPoolAssignRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDomainIpPoolAssignRequest(val *DomainIpPoolAssignRequest) *NullableDomainIpPoolAssignRequest {
+	return &NullableDomainIpPoolAssignRequest{value: val, isSet: true}
+}
+
+func (v NullableDomainIpPoolAssignRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDomainIpPoolAssignRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/domain_ip_pool_update_request.go b/pkg/infobip/models/email/domain_ip_pool_update_request.go
new file mode 100644
index 0000000..7812de1
--- /dev/null
+++ b/pkg/infobip/models/email/domain_ip_pool_update_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DomainIpPoolUpdateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DomainIpPoolUpdateRequest{}
+
+// DomainIpPoolUpdateRequest struct for DomainIpPoolUpdateRequest
+type DomainIpPoolUpdateRequest struct {
+	// IP pool sending priority.
+	Priority int32
+}
+
+type _DomainIpPoolUpdateRequest DomainIpPoolUpdateRequest
+
+// NewDomainIpPoolUpdateRequest instantiates a new DomainIpPoolUpdateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDomainIpPoolUpdateRequest(priority int32) *DomainIpPoolUpdateRequest {
+	this := DomainIpPoolUpdateRequest{}
+	this.Priority = priority
+	return &this
+}
+
+// NewDomainIpPoolUpdateRequestWithDefaults instantiates a new DomainIpPoolUpdateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDomainIpPoolUpdateRequestWithDefaults() *DomainIpPoolUpdateRequest {
+	this := DomainIpPoolUpdateRequest{}
+
+	return &this
+}
+
+// GetPriority returns the Priority field value
+func (o *DomainIpPoolUpdateRequest) GetPriority() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Priority
+}
+
+// GetPriorityOk returns a tuple with the Priority field value
+// and a boolean to check if the value has been set.
+func (o *DomainIpPoolUpdateRequest) GetPriorityOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Priority, true
+}
+
+// SetPriority sets field value
+func (o *DomainIpPoolUpdateRequest) SetPriority(v int32) {
+	o.Priority = v
+}
+
+func (o DomainIpPoolUpdateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DomainIpPoolUpdateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["priority"] = o.Priority
+	return toSerialize, nil
+}
+
+type NullableDomainIpPoolUpdateRequest struct {
+	value *DomainIpPoolUpdateRequest
+	isSet bool
+}
+
+func (v NullableDomainIpPoolUpdateRequest) Get() *DomainIpPoolUpdateRequest {
+	return v.value
+}
+
+func (v *NullableDomainIpPoolUpdateRequest) Set(val *DomainIpPoolUpdateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDomainIpPoolUpdateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDomainIpPoolUpdateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDomainIpPoolUpdateRequest(val *DomainIpPoolUpdateRequest) *NullableDomainIpPoolUpdateRequest {
+	return &NullableDomainIpPoolUpdateRequest{value: val, isSet: true}
+}
+
+func (v NullableDomainIpPoolUpdateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDomainIpPoolUpdateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/domain_response.go b/pkg/infobip/models/email/domain_response.go
new file mode 100644
index 0000000..6bd042e
--- /dev/null
+++ b/pkg/infobip/models/email/domain_response.go
@@ -0,0 +1,387 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DomainResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DomainResponse{}
+
+// DomainResponse Detailed domain information.
+type DomainResponse struct {
+	// Id of the domain.
+	DomainId *int64
+	// Name of the domain.
+	DomainName *string
+	// Activation status of the domain.
+	Active   *bool
+	Tracking *TrackingResponse
+	// DNS records for the domain.
+	DnsRecords []DnsRecordResponse
+	// Status if the domain is blocked.
+	Blocked *bool
+	// Date the domain was created. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	CreatedAt *Time
+	// Mailbox for return path.
+	ReturnPathAddress *string
+}
+
+// NewDomainResponse instantiates a new DomainResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDomainResponse() *DomainResponse {
+	this := DomainResponse{}
+	return &this
+}
+
+// NewDomainResponseWithDefaults instantiates a new DomainResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDomainResponseWithDefaults() *DomainResponse {
+	this := DomainResponse{}
+
+	return &this
+}
+
+// GetDomainId returns the DomainId field value if set, zero value otherwise.
+func (o *DomainResponse) GetDomainId() int64 {
+	if o == nil || IsNil(o.DomainId) {
+		var ret int64
+		return ret
+	}
+	return *o.DomainId
+}
+
+// GetDomainIdOk returns a tuple with the DomainId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetDomainIdOk() (*int64, bool) {
+	if o == nil || IsNil(o.DomainId) {
+		return nil, false
+	}
+	return o.DomainId, true
+}
+
+// HasDomainId returns a boolean if a field has been set.
+func (o *DomainResponse) HasDomainId() bool {
+	if o != nil && !IsNil(o.DomainId) {
+		return true
+	}
+
+	return false
+}
+
+// SetDomainId gets a reference to the given int64 and assigns it to the DomainId field.
+func (o *DomainResponse) SetDomainId(v int64) {
+	o.DomainId = &v
+}
+
+// GetDomainName returns the DomainName field value if set, zero value otherwise.
+func (o *DomainResponse) GetDomainName() string {
+	if o == nil || IsNil(o.DomainName) {
+		var ret string
+		return ret
+	}
+	return *o.DomainName
+}
+
+// GetDomainNameOk returns a tuple with the DomainName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetDomainNameOk() (*string, bool) {
+	if o == nil || IsNil(o.DomainName) {
+		return nil, false
+	}
+	return o.DomainName, true
+}
+
+// HasDomainName returns a boolean if a field has been set.
+func (o *DomainResponse) HasDomainName() bool {
+	if o != nil && !IsNil(o.DomainName) {
+		return true
+	}
+
+	return false
+}
+
+// SetDomainName gets a reference to the given string and assigns it to the DomainName field.
+func (o *DomainResponse) SetDomainName(v string) {
+	o.DomainName = &v
+}
+
+// GetActive returns the Active field value if set, zero value otherwise.
+func (o *DomainResponse) GetActive() bool {
+	if o == nil || IsNil(o.Active) {
+		var ret bool
+		return ret
+	}
+	return *o.Active
+}
+
+// GetActiveOk returns a tuple with the Active field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetActiveOk() (*bool, bool) {
+	if o == nil || IsNil(o.Active) {
+		return nil, false
+	}
+	return o.Active, true
+}
+
+// HasActive returns a boolean if a field has been set.
+func (o *DomainResponse) HasActive() bool {
+	if o != nil && !IsNil(o.Active) {
+		return true
+	}
+
+	return false
+}
+
+// SetActive gets a reference to the given bool and assigns it to the Active field.
+func (o *DomainResponse) SetActive(v bool) {
+	o.Active = &v
+}
+
+// GetTracking returns the Tracking field value if set, zero value otherwise.
+func (o *DomainResponse) GetTracking() TrackingResponse {
+	if o == nil || IsNil(o.Tracking) {
+		var ret TrackingResponse
+		return ret
+	}
+	return *o.Tracking
+}
+
+// GetTrackingOk returns a tuple with the Tracking field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetTrackingOk() (*TrackingResponse, bool) {
+	if o == nil || IsNil(o.Tracking) {
+		return nil, false
+	}
+	return o.Tracking, true
+}
+
+// HasTracking returns a boolean if a field has been set.
+func (o *DomainResponse) HasTracking() bool {
+	if o != nil && !IsNil(o.Tracking) {
+		return true
+	}
+
+	return false
+}
+
+// SetTracking gets a reference to the given TrackingResponse and assigns it to the Tracking field.
+func (o *DomainResponse) SetTracking(v TrackingResponse) {
+	o.Tracking = &v
+}
+
+// GetDnsRecords returns the DnsRecords field value if set, zero value otherwise.
+func (o *DomainResponse) GetDnsRecords() []DnsRecordResponse {
+	if o == nil || IsNil(o.DnsRecords) {
+		var ret []DnsRecordResponse
+		return ret
+	}
+	return o.DnsRecords
+}
+
+// GetDnsRecordsOk returns a tuple with the DnsRecords field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetDnsRecordsOk() ([]DnsRecordResponse, bool) {
+	if o == nil || IsNil(o.DnsRecords) {
+		return nil, false
+	}
+	return o.DnsRecords, true
+}
+
+// HasDnsRecords returns a boolean if a field has been set.
+func (o *DomainResponse) HasDnsRecords() bool {
+	if o != nil && !IsNil(o.DnsRecords) {
+		return true
+	}
+
+	return false
+}
+
+// SetDnsRecords gets a reference to the given []DnsRecordResponse and assigns it to the DnsRecords field.
+func (o *DomainResponse) SetDnsRecords(v []DnsRecordResponse) {
+	o.DnsRecords = v
+}
+
+// GetBlocked returns the Blocked field value if set, zero value otherwise.
+func (o *DomainResponse) GetBlocked() bool {
+	if o == nil || IsNil(o.Blocked) {
+		var ret bool
+		return ret
+	}
+	return *o.Blocked
+}
+
+// GetBlockedOk returns a tuple with the Blocked field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetBlockedOk() (*bool, bool) {
+	if o == nil || IsNil(o.Blocked) {
+		return nil, false
+	}
+	return o.Blocked, true
+}
+
+// HasBlocked returns a boolean if a field has been set.
+func (o *DomainResponse) HasBlocked() bool {
+	if o != nil && !IsNil(o.Blocked) {
+		return true
+	}
+
+	return false
+}
+
+// SetBlocked gets a reference to the given bool and assigns it to the Blocked field.
+func (o *DomainResponse) SetBlocked(v bool) {
+	o.Blocked = &v
+}
+
+// GetCreatedAt returns the CreatedAt field value if set, zero value otherwise.
+func (o *DomainResponse) GetCreatedAt() Time {
+	if o == nil || IsNil(o.CreatedAt) {
+		var ret Time
+		return ret
+	}
+	return *o.CreatedAt
+}
+
+// GetCreatedAtOk returns a tuple with the CreatedAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetCreatedAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.CreatedAt) {
+		return nil, false
+	}
+	return o.CreatedAt, true
+}
+
+// HasCreatedAt returns a boolean if a field has been set.
+func (o *DomainResponse) HasCreatedAt() bool {
+	if o != nil && !IsNil(o.CreatedAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreatedAt gets a reference to the given Time and assigns it to the CreatedAt field.
+func (o *DomainResponse) SetCreatedAt(v Time) {
+	o.CreatedAt = &v
+}
+
+// GetReturnPathAddress returns the ReturnPathAddress field value if set, zero value otherwise.
+func (o *DomainResponse) GetReturnPathAddress() string {
+	if o == nil || IsNil(o.ReturnPathAddress) {
+		var ret string
+		return ret
+	}
+	return *o.ReturnPathAddress
+}
+
+// GetReturnPathAddressOk returns a tuple with the ReturnPathAddress field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DomainResponse) GetReturnPathAddressOk() (*string, bool) {
+	if o == nil || IsNil(o.ReturnPathAddress) {
+		return nil, false
+	}
+	return o.ReturnPathAddress, true
+}
+
+// HasReturnPathAddress returns a boolean if a field has been set.
+func (o *DomainResponse) HasReturnPathAddress() bool {
+	if o != nil && !IsNil(o.ReturnPathAddress) {
+		return true
+	}
+
+	return false
+}
+
+// SetReturnPathAddress gets a reference to the given string and assigns it to the ReturnPathAddress field.
+func (o *DomainResponse) SetReturnPathAddress(v string) {
+	o.ReturnPathAddress = &v
+}
+
+func (o DomainResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DomainResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DomainId) {
+		toSerialize["domainId"] = o.DomainId
+	}
+	if !IsNil(o.DomainName) {
+		toSerialize["domainName"] = o.DomainName
+	}
+	if !IsNil(o.Active) {
+		toSerialize["active"] = o.Active
+	}
+	if !IsNil(o.Tracking) {
+		toSerialize["tracking"] = o.Tracking
+	}
+	if !IsNil(o.DnsRecords) {
+		toSerialize["dnsRecords"] = o.DnsRecords
+	}
+	if !IsNil(o.Blocked) {
+		toSerialize["blocked"] = o.Blocked
+	}
+	if !IsNil(o.CreatedAt) {
+		toSerialize["createdAt"] = o.CreatedAt
+	}
+	if !IsNil(o.ReturnPathAddress) {
+		toSerialize["returnPathAddress"] = o.ReturnPathAddress
+	}
+	return toSerialize, nil
+}
+
+type NullableDomainResponse struct {
+	value *DomainResponse
+	isSet bool
+}
+
+func (v NullableDomainResponse) Get() *DomainResponse {
+	return v.value
+}
+
+func (v *NullableDomainResponse) Set(val *DomainResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDomainResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDomainResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDomainResponse(val *DomainResponse) *NullableDomainResponse {
+	return &NullableDomainResponse{value: val, isSet: true}
+}
+
+func (v NullableDomainResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDomainResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/sms/error.go b/pkg/infobip/models/email/error.go
similarity index 95%
rename from pkg/infobip/models/sms/error.go
rename to pkg/infobip/models/email/error.go
index 65e929b..d2dbbf1 100644
--- a/pkg/infobip/models/sms/error.go
+++ b/pkg/infobip/models/email/error.go
@@ -8,7 +8,7 @@ Contact: support@infobip.com
 
 // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
 
-package sms
+package email
 
 import (
 	"encoding/json"
@@ -19,26 +19,21 @@ import (
 // checks if the Error type satisfies the MappedNullable interface at compile time
 var _ MappedNullable = &Error{}
 
-// Error Indicates whether an error occurred during the query execution.
+// Error struct for Error
 type Error struct {
-	// Error group ID.
-	GroupId *int32
-	// Error group name.
-	GroupName *string
-	// Error ID.
-	Id *int32
-	// Error name.
-	Name *string
-	// Human-readable description of the error..
+	GroupId     *int32
+	GroupName   *string
+	Id          *int32
+	Name        *string
 	Description *string
-	// Tells if the error is permanent.
-	Permanent *bool
+	Permanent   *bool
 }
 
 // NewError instantiates a new Error object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewError() *Error {
 	this := Error{}
 	return &this
@@ -49,6 +44,7 @@ func NewError() *Error {
 // but it doesn't guarantee that properties required by API are set
 func NewErrorWithDefaults() *Error {
 	this := Error{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/email/geo_location.go b/pkg/infobip/models/email/geo_location.go
new file mode 100644
index 0000000..e895936
--- /dev/null
+++ b/pkg/infobip/models/email/geo_location.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the GeoLocation type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &GeoLocation{}
+
+// GeoLocation Geolocation data such as Country and  City. This data will be available only for opens, clicks and unsubscribes.
+type GeoLocation struct {
+	// Country where the user action is recorded.
+	CountryName *string
+	// City where the user action is recorded.
+	City *string
+}
+
+// NewGeoLocation instantiates a new GeoLocation object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewGeoLocation() *GeoLocation {
+	this := GeoLocation{}
+	return &this
+}
+
+// NewGeoLocationWithDefaults instantiates a new GeoLocation object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewGeoLocationWithDefaults() *GeoLocation {
+	this := GeoLocation{}
+
+	return &this
+}
+
+// GetCountryName returns the CountryName field value if set, zero value otherwise.
+func (o *GeoLocation) GetCountryName() string {
+	if o == nil || IsNil(o.CountryName) {
+		var ret string
+		return ret
+	}
+	return *o.CountryName
+}
+
+// GetCountryNameOk returns a tuple with the CountryName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GeoLocation) GetCountryNameOk() (*string, bool) {
+	if o == nil || IsNil(o.CountryName) {
+		return nil, false
+	}
+	return o.CountryName, true
+}
+
+// HasCountryName returns a boolean if a field has been set.
+func (o *GeoLocation) HasCountryName() bool {
+	if o != nil && !IsNil(o.CountryName) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountryName gets a reference to the given string and assigns it to the CountryName field.
+func (o *GeoLocation) SetCountryName(v string) {
+	o.CountryName = &v
+}
+
+// GetCity returns the City field value if set, zero value otherwise.
+func (o *GeoLocation) GetCity() string {
+	if o == nil || IsNil(o.City) {
+		var ret string
+		return ret
+	}
+	return *o.City
+}
+
+// GetCityOk returns a tuple with the City field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GeoLocation) GetCityOk() (*string, bool) {
+	if o == nil || IsNil(o.City) {
+		return nil, false
+	}
+	return o.City, true
+}
+
+// HasCity returns a boolean if a field has been set.
+func (o *GeoLocation) HasCity() bool {
+	if o != nil && !IsNil(o.City) {
+		return true
+	}
+
+	return false
+}
+
+// SetCity gets a reference to the given string and assigns it to the City field.
+func (o *GeoLocation) SetCity(v string) {
+	o.City = &v
+}
+
+func (o GeoLocation) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o GeoLocation) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CountryName) {
+		toSerialize["countryName"] = o.CountryName
+	}
+	if !IsNil(o.City) {
+		toSerialize["city"] = o.City
+	}
+	return toSerialize, nil
+}
+
+type NullableGeoLocation struct {
+	value *GeoLocation
+	isSet bool
+}
+
+func (v NullableGeoLocation) Get() *GeoLocation {
+	return v.value
+}
+
+func (v *NullableGeoLocation) Set(val *GeoLocation) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGeoLocation) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGeoLocation) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGeoLocation(val *GeoLocation) *NullableGeoLocation {
+	return &NullableGeoLocation{value: val, isSet: true}
+}
+
+func (v NullableGeoLocation) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGeoLocation) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_detail_response.go b/pkg/infobip/models/email/ip_detail_response.go
new file mode 100644
index 0000000..461613e
--- /dev/null
+++ b/pkg/infobip/models/email/ip_detail_response.go
@@ -0,0 +1,177 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpDetailResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpDetailResponse{}
+
+// IpDetailResponse struct for IpDetailResponse
+type IpDetailResponse struct {
+	// Dedicated IP identifier.
+	Id string
+	// Dedicated IP address.
+	Ip    string
+	Pools []IpPoolResponse
+}
+
+type _IpDetailResponse IpDetailResponse
+
+// NewIpDetailResponse instantiates a new IpDetailResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpDetailResponse(id string, ip string, pools []IpPoolResponse) *IpDetailResponse {
+	this := IpDetailResponse{}
+	this.Id = id
+	this.Ip = ip
+	this.Pools = pools
+	return &this
+}
+
+// NewIpDetailResponseWithDefaults instantiates a new IpDetailResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpDetailResponseWithDefaults() *IpDetailResponse {
+	this := IpDetailResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *IpDetailResponse) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *IpDetailResponse) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *IpDetailResponse) SetId(v string) {
+	o.Id = v
+}
+
+// GetIp returns the Ip field value
+func (o *IpDetailResponse) GetIp() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Ip
+}
+
+// GetIpOk returns a tuple with the Ip field value
+// and a boolean to check if the value has been set.
+func (o *IpDetailResponse) GetIpOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Ip, true
+}
+
+// SetIp sets field value
+func (o *IpDetailResponse) SetIp(v string) {
+	o.Ip = v
+}
+
+// GetPools returns the Pools field value
+func (o *IpDetailResponse) GetPools() []IpPoolResponse {
+	if o == nil {
+		var ret []IpPoolResponse
+		return ret
+	}
+
+	return o.Pools
+}
+
+// GetPoolsOk returns a tuple with the Pools field value
+// and a boolean to check if the value has been set.
+func (o *IpDetailResponse) GetPoolsOk() ([]IpPoolResponse, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Pools, true
+}
+
+// SetPools sets field value
+func (o *IpDetailResponse) SetPools(v []IpPoolResponse) {
+	o.Pools = v
+}
+
+func (o IpDetailResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpDetailResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["ip"] = o.Ip
+	toSerialize["pools"] = o.Pools
+	return toSerialize, nil
+}
+
+type NullableIpDetailResponse struct {
+	value *IpDetailResponse
+	isSet bool
+}
+
+func (v NullableIpDetailResponse) Get() *IpDetailResponse {
+	return v.value
+}
+
+func (v *NullableIpDetailResponse) Set(val *IpDetailResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpDetailResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpDetailResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpDetailResponse(val *IpDetailResponse) *NullableIpDetailResponse {
+	return &NullableIpDetailResponse{value: val, isSet: true}
+}
+
+func (v NullableIpDetailResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpDetailResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_domain_response.go b/pkg/infobip/models/email/ip_domain_response.go
new file mode 100644
index 0000000..da9922c
--- /dev/null
+++ b/pkg/infobip/models/email/ip_domain_response.go
@@ -0,0 +1,177 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpDomainResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpDomainResponse{}
+
+// IpDomainResponse struct for IpDomainResponse
+type IpDomainResponse struct {
+	// Domain identifier.
+	Id int64
+	// Domain name.
+	Name  string
+	Pools []DomainIpPool
+}
+
+type _IpDomainResponse IpDomainResponse
+
+// NewIpDomainResponse instantiates a new IpDomainResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpDomainResponse(id int64, name string, pools []DomainIpPool) *IpDomainResponse {
+	this := IpDomainResponse{}
+	this.Id = id
+	this.Name = name
+	this.Pools = pools
+	return &this
+}
+
+// NewIpDomainResponseWithDefaults instantiates a new IpDomainResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpDomainResponseWithDefaults() *IpDomainResponse {
+	this := IpDomainResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *IpDomainResponse) GetId() int64 {
+	if o == nil {
+		var ret int64
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *IpDomainResponse) GetIdOk() (*int64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *IpDomainResponse) SetId(v int64) {
+	o.Id = v
+}
+
+// GetName returns the Name field value
+func (o *IpDomainResponse) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *IpDomainResponse) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *IpDomainResponse) SetName(v string) {
+	o.Name = v
+}
+
+// GetPools returns the Pools field value
+func (o *IpDomainResponse) GetPools() []DomainIpPool {
+	if o == nil {
+		var ret []DomainIpPool
+		return ret
+	}
+
+	return o.Pools
+}
+
+// GetPoolsOk returns a tuple with the Pools field value
+// and a boolean to check if the value has been set.
+func (o *IpDomainResponse) GetPoolsOk() ([]DomainIpPool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Pools, true
+}
+
+// SetPools sets field value
+func (o *IpDomainResponse) SetPools(v []DomainIpPool) {
+	o.Pools = v
+}
+
+func (o IpDomainResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpDomainResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["name"] = o.Name
+	toSerialize["pools"] = o.Pools
+	return toSerialize, nil
+}
+
+type NullableIpDomainResponse struct {
+	value *IpDomainResponse
+	isSet bool
+}
+
+func (v NullableIpDomainResponse) Get() *IpDomainResponse {
+	return v.value
+}
+
+func (v *NullableIpDomainResponse) Set(val *IpDomainResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpDomainResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpDomainResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpDomainResponse(val *IpDomainResponse) *NullableIpDomainResponse {
+	return &NullableIpDomainResponse{value: val, isSet: true}
+}
+
+func (v NullableIpDomainResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpDomainResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_pool_assign_ip_request.go b/pkg/infobip/models/email/ip_pool_assign_ip_request.go
new file mode 100644
index 0000000..0163d7d
--- /dev/null
+++ b/pkg/infobip/models/email/ip_pool_assign_ip_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpPoolAssignIpRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpPoolAssignIpRequest{}
+
+// IpPoolAssignIpRequest struct for IpPoolAssignIpRequest
+type IpPoolAssignIpRequest struct {
+	// Dedicated IP identifier.
+	IpId string
+}
+
+type _IpPoolAssignIpRequest IpPoolAssignIpRequest
+
+// NewIpPoolAssignIpRequest instantiates a new IpPoolAssignIpRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpPoolAssignIpRequest(ipId string) *IpPoolAssignIpRequest {
+	this := IpPoolAssignIpRequest{}
+	this.IpId = ipId
+	return &this
+}
+
+// NewIpPoolAssignIpRequestWithDefaults instantiates a new IpPoolAssignIpRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpPoolAssignIpRequestWithDefaults() *IpPoolAssignIpRequest {
+	this := IpPoolAssignIpRequest{}
+
+	return &this
+}
+
+// GetIpId returns the IpId field value
+func (o *IpPoolAssignIpRequest) GetIpId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.IpId
+}
+
+// GetIpIdOk returns a tuple with the IpId field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolAssignIpRequest) GetIpIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.IpId, true
+}
+
+// SetIpId sets field value
+func (o *IpPoolAssignIpRequest) SetIpId(v string) {
+	o.IpId = v
+}
+
+func (o IpPoolAssignIpRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpPoolAssignIpRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["ipId"] = o.IpId
+	return toSerialize, nil
+}
+
+type NullableIpPoolAssignIpRequest struct {
+	value *IpPoolAssignIpRequest
+	isSet bool
+}
+
+func (v NullableIpPoolAssignIpRequest) Get() *IpPoolAssignIpRequest {
+	return v.value
+}
+
+func (v *NullableIpPoolAssignIpRequest) Set(val *IpPoolAssignIpRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpPoolAssignIpRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpPoolAssignIpRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpPoolAssignIpRequest(val *IpPoolAssignIpRequest) *NullableIpPoolAssignIpRequest {
+	return &NullableIpPoolAssignIpRequest{value: val, isSet: true}
+}
+
+func (v NullableIpPoolAssignIpRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpPoolAssignIpRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_pool_create_request.go b/pkg/infobip/models/email/ip_pool_create_request.go
new file mode 100644
index 0000000..60d654e
--- /dev/null
+++ b/pkg/infobip/models/email/ip_pool_create_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpPoolCreateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpPoolCreateRequest{}
+
+// IpPoolCreateRequest struct for IpPoolCreateRequest
+type IpPoolCreateRequest struct {
+	// IP pool name.
+	Name string
+}
+
+type _IpPoolCreateRequest IpPoolCreateRequest
+
+// NewIpPoolCreateRequest instantiates a new IpPoolCreateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpPoolCreateRequest(name string) *IpPoolCreateRequest {
+	this := IpPoolCreateRequest{}
+	this.Name = name
+	return &this
+}
+
+// NewIpPoolCreateRequestWithDefaults instantiates a new IpPoolCreateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpPoolCreateRequestWithDefaults() *IpPoolCreateRequest {
+	this := IpPoolCreateRequest{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *IpPoolCreateRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolCreateRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *IpPoolCreateRequest) SetName(v string) {
+	o.Name = v
+}
+
+func (o IpPoolCreateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpPoolCreateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	return toSerialize, nil
+}
+
+type NullableIpPoolCreateRequest struct {
+	value *IpPoolCreateRequest
+	isSet bool
+}
+
+func (v NullableIpPoolCreateRequest) Get() *IpPoolCreateRequest {
+	return v.value
+}
+
+func (v *NullableIpPoolCreateRequest) Set(val *IpPoolCreateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpPoolCreateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpPoolCreateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpPoolCreateRequest(val *IpPoolCreateRequest) *NullableIpPoolCreateRequest {
+	return &NullableIpPoolCreateRequest{value: val, isSet: true}
+}
+
+func (v NullableIpPoolCreateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpPoolCreateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_pool_detail_response.go b/pkg/infobip/models/email/ip_pool_detail_response.go
new file mode 100644
index 0000000..3ce03e8
--- /dev/null
+++ b/pkg/infobip/models/email/ip_pool_detail_response.go
@@ -0,0 +1,177 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpPoolDetailResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpPoolDetailResponse{}
+
+// IpPoolDetailResponse struct for IpPoolDetailResponse
+type IpPoolDetailResponse struct {
+	// IP pool identifier.
+	Id string
+	// IP pool name.
+	Name string
+	Ips  []IpResponse
+}
+
+type _IpPoolDetailResponse IpPoolDetailResponse
+
+// NewIpPoolDetailResponse instantiates a new IpPoolDetailResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpPoolDetailResponse(id string, name string, ips []IpResponse) *IpPoolDetailResponse {
+	this := IpPoolDetailResponse{}
+	this.Id = id
+	this.Name = name
+	this.Ips = ips
+	return &this
+}
+
+// NewIpPoolDetailResponseWithDefaults instantiates a new IpPoolDetailResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpPoolDetailResponseWithDefaults() *IpPoolDetailResponse {
+	this := IpPoolDetailResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *IpPoolDetailResponse) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolDetailResponse) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *IpPoolDetailResponse) SetId(v string) {
+	o.Id = v
+}
+
+// GetName returns the Name field value
+func (o *IpPoolDetailResponse) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolDetailResponse) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *IpPoolDetailResponse) SetName(v string) {
+	o.Name = v
+}
+
+// GetIps returns the Ips field value
+func (o *IpPoolDetailResponse) GetIps() []IpResponse {
+	if o == nil {
+		var ret []IpResponse
+		return ret
+	}
+
+	return o.Ips
+}
+
+// GetIpsOk returns a tuple with the Ips field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolDetailResponse) GetIpsOk() ([]IpResponse, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Ips, true
+}
+
+// SetIps sets field value
+func (o *IpPoolDetailResponse) SetIps(v []IpResponse) {
+	o.Ips = v
+}
+
+func (o IpPoolDetailResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpPoolDetailResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["name"] = o.Name
+	toSerialize["ips"] = o.Ips
+	return toSerialize, nil
+}
+
+type NullableIpPoolDetailResponse struct {
+	value *IpPoolDetailResponse
+	isSet bool
+}
+
+func (v NullableIpPoolDetailResponse) Get() *IpPoolDetailResponse {
+	return v.value
+}
+
+func (v *NullableIpPoolDetailResponse) Set(val *IpPoolDetailResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpPoolDetailResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpPoolDetailResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpPoolDetailResponse(val *IpPoolDetailResponse) *NullableIpPoolDetailResponse {
+	return &NullableIpPoolDetailResponse{value: val, isSet: true}
+}
+
+func (v NullableIpPoolDetailResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpPoolDetailResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_pool_response.go b/pkg/infobip/models/email/ip_pool_response.go
new file mode 100644
index 0000000..d6683e7
--- /dev/null
+++ b/pkg/infobip/models/email/ip_pool_response.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpPoolResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpPoolResponse{}
+
+// IpPoolResponse IP pools which have assigned the provided dedicated IP.
+type IpPoolResponse struct {
+	// IP pool identifier.
+	Id string
+	// IP pool name.
+	Name string
+}
+
+type _IpPoolResponse IpPoolResponse
+
+// NewIpPoolResponse instantiates a new IpPoolResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpPoolResponse(id string, name string) *IpPoolResponse {
+	this := IpPoolResponse{}
+	this.Id = id
+	this.Name = name
+	return &this
+}
+
+// NewIpPoolResponseWithDefaults instantiates a new IpPoolResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpPoolResponseWithDefaults() *IpPoolResponse {
+	this := IpPoolResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *IpPoolResponse) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolResponse) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *IpPoolResponse) SetId(v string) {
+	o.Id = v
+}
+
+// GetName returns the Name field value
+func (o *IpPoolResponse) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *IpPoolResponse) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *IpPoolResponse) SetName(v string) {
+	o.Name = v
+}
+
+func (o IpPoolResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpPoolResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["name"] = o.Name
+	return toSerialize, nil
+}
+
+type NullableIpPoolResponse struct {
+	value *IpPoolResponse
+	isSet bool
+}
+
+func (v NullableIpPoolResponse) Get() *IpPoolResponse {
+	return v.value
+}
+
+func (v *NullableIpPoolResponse) Set(val *IpPoolResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpPoolResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpPoolResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpPoolResponse(val *IpPoolResponse) *NullableIpPoolResponse {
+	return &NullableIpPoolResponse{value: val, isSet: true}
+}
+
+func (v NullableIpPoolResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpPoolResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/ip_response.go b/pkg/infobip/models/email/ip_response.go
new file mode 100644
index 0000000..e65cf7d
--- /dev/null
+++ b/pkg/infobip/models/email/ip_response.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IpResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IpResponse{}
+
+// IpResponse Dedicated IPs assigned to the IP pool.
+type IpResponse struct {
+	// Dedicated IP identifier.
+	Id string
+	// Dedicated IP address.
+	Ip string
+}
+
+type _IpResponse IpResponse
+
+// NewIpResponse instantiates a new IpResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIpResponse(id string, ip string) *IpResponse {
+	this := IpResponse{}
+	this.Id = id
+	this.Ip = ip
+	return &this
+}
+
+// NewIpResponseWithDefaults instantiates a new IpResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIpResponseWithDefaults() *IpResponse {
+	this := IpResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *IpResponse) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *IpResponse) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *IpResponse) SetId(v string) {
+	o.Id = v
+}
+
+// GetIp returns the Ip field value
+func (o *IpResponse) GetIp() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Ip
+}
+
+// GetIpOk returns a tuple with the Ip field value
+// and a boolean to check if the value has been set.
+func (o *IpResponse) GetIpOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Ip, true
+}
+
+// SetIp sets field value
+func (o *IpResponse) SetIp(v string) {
+	o.Ip = v
+}
+
+func (o IpResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IpResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["ip"] = o.Ip
+	return toSerialize, nil
+}
+
+type NullableIpResponse struct {
+	value *IpResponse
+	isSet bool
+}
+
+func (v NullableIpResponse) Get() *IpResponse {
+	return v.value
+}
+
+func (v *NullableIpResponse) Set(val *IpResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpResponse(val *IpResponse) *NullableIpResponse {
+	return &NullableIpResponse{value: val, isSet: true}
+}
+
+func (v NullableIpResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/log.go b/pkg/infobip/models/email/log.go
new file mode 100644
index 0000000..e7199f1
--- /dev/null
+++ b/pkg/infobip/models/email/log.go
@@ -0,0 +1,570 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Log type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Log{}
+
+// Log Array of email logs, one object per each email request.
+type Log struct {
+	// The Application ID sent in the email request.
+	ApplicationId *string
+	// The Entity ID sent in the email request.
+	EntityId *string
+	// The ID that uniquely identifies the request.
+	BulkId *string
+	// The ID that uniquely identifies the sent email request.
+	MessageId *string
+	// The recipient email address.
+	To *string
+	// From email address.
+	From *string
+	// The text from email body.
+	Text *string
+	// Tells when the email was initiated. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SentAt *Time
+	// Date and time when the Infobip services finished processing the email (i.e. delivered to the destination, waiting for delivery, etc.).
+	DoneAt *Time
+	// Email request count.
+	MessageCount *int32
+	Price        *Price
+	Status       *Status
+	Error        *Error
+}
+
+// NewLog instantiates a new Log object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewLog() *Log {
+	this := Log{}
+	return &this
+}
+
+// NewLogWithDefaults instantiates a new Log object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogWithDefaults() *Log {
+	this := Log{}
+
+	return &this
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *Log) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *Log) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *Log) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetEntityId returns the EntityId field value if set, zero value otherwise.
+func (o *Log) GetEntityId() string {
+	if o == nil || IsNil(o.EntityId) {
+		var ret string
+		return ret
+	}
+	return *o.EntityId
+}
+
+// GetEntityIdOk returns a tuple with the EntityId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetEntityIdOk() (*string, bool) {
+	if o == nil || IsNil(o.EntityId) {
+		return nil, false
+	}
+	return o.EntityId, true
+}
+
+// HasEntityId returns a boolean if a field has been set.
+func (o *Log) HasEntityId() bool {
+	if o != nil && !IsNil(o.EntityId) {
+		return true
+	}
+
+	return false
+}
+
+// SetEntityId gets a reference to the given string and assigns it to the EntityId field.
+func (o *Log) SetEntityId(v string) {
+	o.EntityId = &v
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *Log) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *Log) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *Log) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *Log) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *Log) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *Log) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *Log) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *Log) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *Log) SetTo(v string) {
+	o.To = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *Log) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *Log) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *Log) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *Log) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *Log) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *Log) SetText(v string) {
+	o.Text = &v
+}
+
+// GetSentAt returns the SentAt field value if set, zero value otherwise.
+func (o *Log) GetSentAt() Time {
+	if o == nil || IsNil(o.SentAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SentAt
+}
+
+// GetSentAtOk returns a tuple with the SentAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetSentAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SentAt) {
+		return nil, false
+	}
+	return o.SentAt, true
+}
+
+// HasSentAt returns a boolean if a field has been set.
+func (o *Log) HasSentAt() bool {
+	if o != nil && !IsNil(o.SentAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSentAt gets a reference to the given Time and assigns it to the SentAt field.
+func (o *Log) SetSentAt(v Time) {
+	o.SentAt = &v
+}
+
+// GetDoneAt returns the DoneAt field value if set, zero value otherwise.
+func (o *Log) GetDoneAt() Time {
+	if o == nil || IsNil(o.DoneAt) {
+		var ret Time
+		return ret
+	}
+	return *o.DoneAt
+}
+
+// GetDoneAtOk returns a tuple with the DoneAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetDoneAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.DoneAt) {
+		return nil, false
+	}
+	return o.DoneAt, true
+}
+
+// HasDoneAt returns a boolean if a field has been set.
+func (o *Log) HasDoneAt() bool {
+	if o != nil && !IsNil(o.DoneAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetDoneAt gets a reference to the given Time and assigns it to the DoneAt field.
+func (o *Log) SetDoneAt(v Time) {
+	o.DoneAt = &v
+}
+
+// GetMessageCount returns the MessageCount field value if set, zero value otherwise.
+func (o *Log) GetMessageCount() int32 {
+	if o == nil || IsNil(o.MessageCount) {
+		var ret int32
+		return ret
+	}
+	return *o.MessageCount
+}
+
+// GetMessageCountOk returns a tuple with the MessageCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetMessageCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.MessageCount) {
+		return nil, false
+	}
+	return o.MessageCount, true
+}
+
+// HasMessageCount returns a boolean if a field has been set.
+func (o *Log) HasMessageCount() bool {
+	if o != nil && !IsNil(o.MessageCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageCount gets a reference to the given int32 and assigns it to the MessageCount field.
+func (o *Log) SetMessageCount(v int32) {
+	o.MessageCount = &v
+}
+
+// GetPrice returns the Price field value if set, zero value otherwise.
+func (o *Log) GetPrice() Price {
+	if o == nil || IsNil(o.Price) {
+		var ret Price
+		return ret
+	}
+	return *o.Price
+}
+
+// GetPriceOk returns a tuple with the Price field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetPriceOk() (*Price, bool) {
+	if o == nil || IsNil(o.Price) {
+		return nil, false
+	}
+	return o.Price, true
+}
+
+// HasPrice returns a boolean if a field has been set.
+func (o *Log) HasPrice() bool {
+	if o != nil && !IsNil(o.Price) {
+		return true
+	}
+
+	return false
+}
+
+// SetPrice gets a reference to the given Price and assigns it to the Price field.
+func (o *Log) SetPrice(v Price) {
+	o.Price = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *Log) GetStatus() Status {
+	if o == nil || IsNil(o.Status) {
+		var ret Status
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetStatusOk() (*Status, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *Log) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given Status and assigns it to the Status field.
+func (o *Log) SetStatus(v Status) {
+	o.Status = &v
+}
+
+// GetError returns the Error field value if set, zero value otherwise.
+func (o *Log) GetError() Error {
+	if o == nil || IsNil(o.Error) {
+		var ret Error
+		return ret
+	}
+	return *o.Error
+}
+
+// GetErrorOk returns a tuple with the Error field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Log) GetErrorOk() (*Error, bool) {
+	if o == nil || IsNil(o.Error) {
+		return nil, false
+	}
+	return o.Error, true
+}
+
+// HasError returns a boolean if a field has been set.
+func (o *Log) HasError() bool {
+	if o != nil && !IsNil(o.Error) {
+		return true
+	}
+
+	return false
+}
+
+// SetError gets a reference to the given Error and assigns it to the Error field.
+func (o *Log) SetError(v Error) {
+	o.Error = &v
+}
+
+func (o Log) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Log) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.EntityId) {
+		toSerialize["entityId"] = o.EntityId
+	}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.SentAt) {
+		toSerialize["sentAt"] = o.SentAt
+	}
+	if !IsNil(o.DoneAt) {
+		toSerialize["doneAt"] = o.DoneAt
+	}
+	if !IsNil(o.MessageCount) {
+		toSerialize["messageCount"] = o.MessageCount
+	}
+	if !IsNil(o.Price) {
+		toSerialize["price"] = o.Price
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Error) {
+		toSerialize["error"] = o.Error
+	}
+	return toSerialize, nil
+}
+
+type NullableLog struct {
+	value *Log
+	isSet bool
+}
+
+func (v NullableLog) Get() *Log {
+	return v.value
+}
+
+func (v *NullableLog) Set(val *Log) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLog) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLog) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLog(val *Log) *NullableLog {
+	return &NullableLog{value: val, isSet: true}
+}
+
+func (v NullableLog) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLog) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/log_response.go b/pkg/infobip/models/email/log_response.go
new file mode 100644
index 0000000..c871845
--- /dev/null
+++ b/pkg/infobip/models/email/log_response.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the LogResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &LogResponse{}
+
+// LogResponse struct for LogResponse
+type LogResponse struct {
+	// Array of email logs, one object per each email request.
+	Results []Log
+}
+
+// NewLogResponse instantiates a new LogResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewLogResponse() *LogResponse {
+	this := LogResponse{}
+	return &this
+}
+
+// NewLogResponseWithDefaults instantiates a new LogResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogResponseWithDefaults() *LogResponse {
+	this := LogResponse{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *LogResponse) GetResults() []Log {
+	if o == nil || IsNil(o.Results) {
+		var ret []Log
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogResponse) GetResultsOk() ([]Log, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *LogResponse) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []Log and assigns it to the Results field.
+func (o *LogResponse) SetResults(v []Log) {
+	o.Results = v
+}
+
+func (o LogResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o LogResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	return toSerialize, nil
+}
+
+type NullableLogResponse struct {
+	value *LogResponse
+	isSet bool
+}
+
+func (v NullableLogResponse) Get() *LogResponse {
+	return v.value
+}
+
+func (v *NullableLogResponse) Set(val *LogResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogResponse(val *LogResponse) *NullableLogResponse {
+	return &NullableLogResponse{value: val, isSet: true}
+}
+
+func (v NullableLogResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/paging.go b/pkg/infobip/models/email/paging.go
new file mode 100644
index 0000000..15930d4
--- /dev/null
+++ b/pkg/infobip/models/email/paging.go
@@ -0,0 +1,236 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Paging type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Paging{}
+
+// Paging Pagination details like page number, page size,etc.
+type Paging struct {
+	Page         *int32
+	Size         *int32
+	TotalPages   *int32
+	TotalResults *int32
+}
+
+// NewPaging instantiates a new Paging object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPaging() *Paging {
+	this := Paging{}
+	return &this
+}
+
+// NewPagingWithDefaults instantiates a new Paging object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPagingWithDefaults() *Paging {
+	this := Paging{}
+
+	return &this
+}
+
+// GetPage returns the Page field value if set, zero value otherwise.
+func (o *Paging) GetPage() int32 {
+	if o == nil || IsNil(o.Page) {
+		var ret int32
+		return ret
+	}
+	return *o.Page
+}
+
+// GetPageOk returns a tuple with the Page field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Paging) GetPageOk() (*int32, bool) {
+	if o == nil || IsNil(o.Page) {
+		return nil, false
+	}
+	return o.Page, true
+}
+
+// HasPage returns a boolean if a field has been set.
+func (o *Paging) HasPage() bool {
+	if o != nil && !IsNil(o.Page) {
+		return true
+	}
+
+	return false
+}
+
+// SetPage gets a reference to the given int32 and assigns it to the Page field.
+func (o *Paging) SetPage(v int32) {
+	o.Page = &v
+}
+
+// GetSize returns the Size field value if set, zero value otherwise.
+func (o *Paging) GetSize() int32 {
+	if o == nil || IsNil(o.Size) {
+		var ret int32
+		return ret
+	}
+	return *o.Size
+}
+
+// GetSizeOk returns a tuple with the Size field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Paging) GetSizeOk() (*int32, bool) {
+	if o == nil || IsNil(o.Size) {
+		return nil, false
+	}
+	return o.Size, true
+}
+
+// HasSize returns a boolean if a field has been set.
+func (o *Paging) HasSize() bool {
+	if o != nil && !IsNil(o.Size) {
+		return true
+	}
+
+	return false
+}
+
+// SetSize gets a reference to the given int32 and assigns it to the Size field.
+func (o *Paging) SetSize(v int32) {
+	o.Size = &v
+}
+
+// GetTotalPages returns the TotalPages field value if set, zero value otherwise.
+func (o *Paging) GetTotalPages() int32 {
+	if o == nil || IsNil(o.TotalPages) {
+		var ret int32
+		return ret
+	}
+	return *o.TotalPages
+}
+
+// GetTotalPagesOk returns a tuple with the TotalPages field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Paging) GetTotalPagesOk() (*int32, bool) {
+	if o == nil || IsNil(o.TotalPages) {
+		return nil, false
+	}
+	return o.TotalPages, true
+}
+
+// HasTotalPages returns a boolean if a field has been set.
+func (o *Paging) HasTotalPages() bool {
+	if o != nil && !IsNil(o.TotalPages) {
+		return true
+	}
+
+	return false
+}
+
+// SetTotalPages gets a reference to the given int32 and assigns it to the TotalPages field.
+func (o *Paging) SetTotalPages(v int32) {
+	o.TotalPages = &v
+}
+
+// GetTotalResults returns the TotalResults field value if set, zero value otherwise.
+func (o *Paging) GetTotalResults() int32 {
+	if o == nil || IsNil(o.TotalResults) {
+		var ret int32
+		return ret
+	}
+	return *o.TotalResults
+}
+
+// GetTotalResultsOk returns a tuple with the TotalResults field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Paging) GetTotalResultsOk() (*int32, bool) {
+	if o == nil || IsNil(o.TotalResults) {
+		return nil, false
+	}
+	return o.TotalResults, true
+}
+
+// HasTotalResults returns a boolean if a field has been set.
+func (o *Paging) HasTotalResults() bool {
+	if o != nil && !IsNil(o.TotalResults) {
+		return true
+	}
+
+	return false
+}
+
+// SetTotalResults gets a reference to the given int32 and assigns it to the TotalResults field.
+func (o *Paging) SetTotalResults(v int32) {
+	o.TotalResults = &v
+}
+
+func (o Paging) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Paging) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Page) {
+		toSerialize["page"] = o.Page
+	}
+	if !IsNil(o.Size) {
+		toSerialize["size"] = o.Size
+	}
+	if !IsNil(o.TotalPages) {
+		toSerialize["totalPages"] = o.TotalPages
+	}
+	if !IsNil(o.TotalResults) {
+		toSerialize["totalResults"] = o.TotalResults
+	}
+	return toSerialize, nil
+}
+
+type NullablePaging struct {
+	value *Paging
+	isSet bool
+}
+
+func (v NullablePaging) Get() *Paging {
+	return v.value
+}
+
+func (v *NullablePaging) Set(val *Paging) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePaging) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePaging) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePaging(val *Paging) *NullablePaging {
+	return &NullablePaging{value: val, isSet: true}
+}
+
+func (v NullablePaging) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePaging) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/price.go b/pkg/infobip/models/email/price.go
new file mode 100644
index 0000000..8bc1cce
--- /dev/null
+++ b/pkg/infobip/models/email/price.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Price type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Price{}
+
+// Price Sent email price.
+type Price struct {
+	// Price per one email request.
+	PricePerMessage *float32
+	// The currency in which the price is expressed.
+	Currency *string
+}
+
+// NewPrice instantiates a new Price object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPrice() *Price {
+	this := Price{}
+	return &this
+}
+
+// NewPriceWithDefaults instantiates a new Price object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPriceWithDefaults() *Price {
+	this := Price{}
+
+	return &this
+}
+
+// GetPricePerMessage returns the PricePerMessage field value if set, zero value otherwise.
+func (o *Price) GetPricePerMessage() float32 {
+	if o == nil || IsNil(o.PricePerMessage) {
+		var ret float32
+		return ret
+	}
+	return *o.PricePerMessage
+}
+
+// GetPricePerMessageOk returns a tuple with the PricePerMessage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Price) GetPricePerMessageOk() (*float32, bool) {
+	if o == nil || IsNil(o.PricePerMessage) {
+		return nil, false
+	}
+	return o.PricePerMessage, true
+}
+
+// HasPricePerMessage returns a boolean if a field has been set.
+func (o *Price) HasPricePerMessage() bool {
+	if o != nil && !IsNil(o.PricePerMessage) {
+		return true
+	}
+
+	return false
+}
+
+// SetPricePerMessage gets a reference to the given float32 and assigns it to the PricePerMessage field.
+func (o *Price) SetPricePerMessage(v float32) {
+	o.PricePerMessage = &v
+}
+
+// GetCurrency returns the Currency field value if set, zero value otherwise.
+func (o *Price) GetCurrency() string {
+	if o == nil || IsNil(o.Currency) {
+		var ret string
+		return ret
+	}
+	return *o.Currency
+}
+
+// GetCurrencyOk returns a tuple with the Currency field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Price) GetCurrencyOk() (*string, bool) {
+	if o == nil || IsNil(o.Currency) {
+		return nil, false
+	}
+	return o.Currency, true
+}
+
+// HasCurrency returns a boolean if a field has been set.
+func (o *Price) HasCurrency() bool {
+	if o != nil && !IsNil(o.Currency) {
+		return true
+	}
+
+	return false
+}
+
+// SetCurrency gets a reference to the given string and assigns it to the Currency field.
+func (o *Price) SetCurrency(v string) {
+	o.Currency = &v
+}
+
+func (o Price) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Price) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.PricePerMessage) {
+		toSerialize["pricePerMessage"] = o.PricePerMessage
+	}
+	if !IsNil(o.Currency) {
+		toSerialize["currency"] = o.Currency
+	}
+	return toSerialize, nil
+}
+
+type NullablePrice struct {
+	value *Price
+	isSet bool
+}
+
+func (v NullablePrice) Get() *Price {
+	return v.value
+}
+
+func (v *NullablePrice) Set(val *Price) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePrice) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePrice) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePrice(val *Price) *NullablePrice {
+	return &NullablePrice{value: val, isSet: true}
+}
+
+func (v NullablePrice) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePrice) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/recipient_info.go b/pkg/infobip/models/email/recipient_info.go
new file mode 100644
index 0000000..f377d7f
--- /dev/null
+++ b/pkg/infobip/models/email/recipient_info.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecipientInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecipientInfo{}
+
+// RecipientInfo Recipient information such as device type, OS, device name.
+type RecipientInfo struct {
+	// The type of device used by the recipient to do the user action.
+	DeviceType *string
+	// The type OS present in the device used by the recipient.
+	Os *string
+	// Device name of the action originating device.
+	DeviceName *string
+}
+
+// NewRecipientInfo instantiates a new RecipientInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecipientInfo() *RecipientInfo {
+	this := RecipientInfo{}
+	return &this
+}
+
+// NewRecipientInfoWithDefaults instantiates a new RecipientInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecipientInfoWithDefaults() *RecipientInfo {
+	this := RecipientInfo{}
+
+	return &this
+}
+
+// GetDeviceType returns the DeviceType field value if set, zero value otherwise.
+func (o *RecipientInfo) GetDeviceType() string {
+	if o == nil || IsNil(o.DeviceType) {
+		var ret string
+		return ret
+	}
+	return *o.DeviceType
+}
+
+// GetDeviceTypeOk returns a tuple with the DeviceType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecipientInfo) GetDeviceTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.DeviceType) {
+		return nil, false
+	}
+	return o.DeviceType, true
+}
+
+// HasDeviceType returns a boolean if a field has been set.
+func (o *RecipientInfo) HasDeviceType() bool {
+	if o != nil && !IsNil(o.DeviceType) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeviceType gets a reference to the given string and assigns it to the DeviceType field.
+func (o *RecipientInfo) SetDeviceType(v string) {
+	o.DeviceType = &v
+}
+
+// GetOs returns the Os field value if set, zero value otherwise.
+func (o *RecipientInfo) GetOs() string {
+	if o == nil || IsNil(o.Os) {
+		var ret string
+		return ret
+	}
+	return *o.Os
+}
+
+// GetOsOk returns a tuple with the Os field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecipientInfo) GetOsOk() (*string, bool) {
+	if o == nil || IsNil(o.Os) {
+		return nil, false
+	}
+	return o.Os, true
+}
+
+// HasOs returns a boolean if a field has been set.
+func (o *RecipientInfo) HasOs() bool {
+	if o != nil && !IsNil(o.Os) {
+		return true
+	}
+
+	return false
+}
+
+// SetOs gets a reference to the given string and assigns it to the Os field.
+func (o *RecipientInfo) SetOs(v string) {
+	o.Os = &v
+}
+
+// GetDeviceName returns the DeviceName field value if set, zero value otherwise.
+func (o *RecipientInfo) GetDeviceName() string {
+	if o == nil || IsNil(o.DeviceName) {
+		var ret string
+		return ret
+	}
+	return *o.DeviceName
+}
+
+// GetDeviceNameOk returns a tuple with the DeviceName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecipientInfo) GetDeviceNameOk() (*string, bool) {
+	if o == nil || IsNil(o.DeviceName) {
+		return nil, false
+	}
+	return o.DeviceName, true
+}
+
+// HasDeviceName returns a boolean if a field has been set.
+func (o *RecipientInfo) HasDeviceName() bool {
+	if o != nil && !IsNil(o.DeviceName) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeviceName gets a reference to the given string and assigns it to the DeviceName field.
+func (o *RecipientInfo) SetDeviceName(v string) {
+	o.DeviceName = &v
+}
+
+func (o RecipientInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecipientInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DeviceType) {
+		toSerialize["deviceType"] = o.DeviceType
+	}
+	if !IsNil(o.Os) {
+		toSerialize["os"] = o.Os
+	}
+	if !IsNil(o.DeviceName) {
+		toSerialize["deviceName"] = o.DeviceName
+	}
+	return toSerialize, nil
+}
+
+type NullableRecipientInfo struct {
+	value *RecipientInfo
+	isSet bool
+}
+
+func (v NullableRecipientInfo) Get() *RecipientInfo {
+	return v.value
+}
+
+func (v *NullableRecipientInfo) Set(val *RecipientInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecipientInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecipientInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecipientInfo(val *RecipientInfo) *NullableRecipientInfo {
+	return &NullableRecipientInfo{value: val, isSet: true}
+}
+
+func (v NullableRecipientInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecipientInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/response_details.go b/pkg/infobip/models/email/response_details.go
new file mode 100644
index 0000000..b784df3
--- /dev/null
+++ b/pkg/infobip/models/email/response_details.go
@@ -0,0 +1,202 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ResponseDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ResponseDetails{}
+
+// ResponseDetails List of message response details.
+type ResponseDetails struct {
+	// The destination address of the message.
+	To *string
+	// The ID that uniquely identifies a message response.
+	MessageId *string
+	Status    *SingleMessageStatus
+}
+
+// NewResponseDetails instantiates a new ResponseDetails object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewResponseDetails() *ResponseDetails {
+	this := ResponseDetails{}
+	return &this
+}
+
+// NewResponseDetailsWithDefaults instantiates a new ResponseDetails object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewResponseDetailsWithDefaults() *ResponseDetails {
+	this := ResponseDetails{}
+
+	return &this
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *ResponseDetails) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ResponseDetails) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *ResponseDetails) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *ResponseDetails) SetTo(v string) {
+	o.To = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *ResponseDetails) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ResponseDetails) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *ResponseDetails) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *ResponseDetails) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *ResponseDetails) GetStatus() SingleMessageStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret SingleMessageStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ResponseDetails) GetStatusOk() (*SingleMessageStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *ResponseDetails) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given SingleMessageStatus and assigns it to the Status field.
+func (o *ResponseDetails) SetStatus(v SingleMessageStatus) {
+	o.Status = &v
+}
+
+func (o ResponseDetails) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ResponseDetails) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	return toSerialize, nil
+}
+
+type NullableResponseDetails struct {
+	value *ResponseDetails
+	isSet bool
+}
+
+func (v NullableResponseDetails) Get() *ResponseDetails {
+	return v.value
+}
+
+func (v *NullableResponseDetails) Set(val *ResponseDetails) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableResponseDetails) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableResponseDetails) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableResponseDetails(val *ResponseDetails) *NullableResponseDetails {
+	return &NullableResponseDetails{value: val, isSet: true}
+}
+
+func (v NullableResponseDetails) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableResponseDetails) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/return_path_address_request.go b/pkg/infobip/models/email/return_path_address_request.go
new file mode 100644
index 0000000..3255f20
--- /dev/null
+++ b/pkg/infobip/models/email/return_path_address_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ReturnPathAddressRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ReturnPathAddressRequest{}
+
+// ReturnPathAddressRequest struct for ReturnPathAddressRequest
+type ReturnPathAddressRequest struct {
+	// Mailbox for return path, this mailbox should be based on the same domain. If you want to disable custom return path and use our default return path address set the value to an empty string.
+	ReturnPathAddress string
+}
+
+type _ReturnPathAddressRequest ReturnPathAddressRequest
+
+// NewReturnPathAddressRequest instantiates a new ReturnPathAddressRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewReturnPathAddressRequest(returnPathAddress string) *ReturnPathAddressRequest {
+	this := ReturnPathAddressRequest{}
+	this.ReturnPathAddress = returnPathAddress
+	return &this
+}
+
+// NewReturnPathAddressRequestWithDefaults instantiates a new ReturnPathAddressRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewReturnPathAddressRequestWithDefaults() *ReturnPathAddressRequest {
+	this := ReturnPathAddressRequest{}
+
+	return &this
+}
+
+// GetReturnPathAddress returns the ReturnPathAddress field value
+func (o *ReturnPathAddressRequest) GetReturnPathAddress() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ReturnPathAddress
+}
+
+// GetReturnPathAddressOk returns a tuple with the ReturnPathAddress field value
+// and a boolean to check if the value has been set.
+func (o *ReturnPathAddressRequest) GetReturnPathAddressOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ReturnPathAddress, true
+}
+
+// SetReturnPathAddress sets field value
+func (o *ReturnPathAddressRequest) SetReturnPathAddress(v string) {
+	o.ReturnPathAddress = v
+}
+
+func (o ReturnPathAddressRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ReturnPathAddressRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["returnPathAddress"] = o.ReturnPathAddress
+	return toSerialize, nil
+}
+
+type NullableReturnPathAddressRequest struct {
+	value *ReturnPathAddressRequest
+	isSet bool
+}
+
+func (v NullableReturnPathAddressRequest) Get() *ReturnPathAddressRequest {
+	return v.value
+}
+
+func (v *NullableReturnPathAddressRequest) Set(val *ReturnPathAddressRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableReturnPathAddressRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableReturnPathAddressRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableReturnPathAddressRequest(val *ReturnPathAddressRequest) *NullableReturnPathAddressRequest {
+	return &NullableReturnPathAddressRequest{value: val, isSet: true}
+}
+
+func (v NullableReturnPathAddressRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableReturnPathAddressRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/send_response.go b/pkg/infobip/models/email/send_response.go
new file mode 100644
index 0000000..2012144
--- /dev/null
+++ b/pkg/infobip/models/email/send_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SendResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SendResponse{}
+
+// SendResponse struct for SendResponse
+type SendResponse struct {
+	// The ID that uniquely identifies a list of message responses.
+	BulkId *string
+	// List of message response details.
+	Messages []ResponseDetails
+}
+
+// NewSendResponse instantiates a new SendResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSendResponse() *SendResponse {
+	this := SendResponse{}
+	return &this
+}
+
+// NewSendResponseWithDefaults instantiates a new SendResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSendResponseWithDefaults() *SendResponse {
+	this := SendResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *SendResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SendResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *SendResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *SendResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessages returns the Messages field value if set, zero value otherwise.
+func (o *SendResponse) GetMessages() []ResponseDetails {
+	if o == nil || IsNil(o.Messages) {
+		var ret []ResponseDetails
+		return ret
+	}
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SendResponse) GetMessagesOk() ([]ResponseDetails, bool) {
+	if o == nil || IsNil(o.Messages) {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// HasMessages returns a boolean if a field has been set.
+func (o *SendResponse) HasMessages() bool {
+	if o != nil && !IsNil(o.Messages) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessages gets a reference to the given []ResponseDetails and assigns it to the Messages field.
+func (o *SendResponse) SetMessages(v []ResponseDetails) {
+	o.Messages = v
+}
+
+func (o SendResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SendResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.Messages) {
+		toSerialize["messages"] = o.Messages
+	}
+	return toSerialize, nil
+}
+
+type NullableSendResponse struct {
+	value *SendResponse
+	isSet bool
+}
+
+func (v NullableSendResponse) Get() *SendResponse {
+	return v.value
+}
+
+func (v *NullableSendResponse) Set(val *SendResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSendResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSendResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSendResponse(val *SendResponse) *NullableSendResponse {
+	return &NullableSendResponse{value: val, isSet: true}
+}
+
+func (v NullableSendResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSendResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/single_message_status.go b/pkg/infobip/models/email/single_message_status.go
new file mode 100644
index 0000000..98115f6
--- /dev/null
+++ b/pkg/infobip/models/email/single_message_status.go
@@ -0,0 +1,277 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SingleMessageStatus type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SingleMessageStatus{}
+
+// SingleMessageStatus Indicates the message status.
+type SingleMessageStatus struct {
+	// Status group ID.
+	GroupId *int32
+	// Status group name.
+	GroupName *string
+	// Status ID.
+	Id *int32
+	// Status name.
+	Name *string
+	// Status description.
+	Description *string
+}
+
+// NewSingleMessageStatus instantiates a new SingleMessageStatus object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSingleMessageStatus() *SingleMessageStatus {
+	this := SingleMessageStatus{}
+	return &this
+}
+
+// NewSingleMessageStatusWithDefaults instantiates a new SingleMessageStatus object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSingleMessageStatusWithDefaults() *SingleMessageStatus {
+	this := SingleMessageStatus{}
+
+	return &this
+}
+
+// GetGroupId returns the GroupId field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetGroupId() int32 {
+	if o == nil || IsNil(o.GroupId) {
+		var ret int32
+		return ret
+	}
+	return *o.GroupId
+}
+
+// GetGroupIdOk returns a tuple with the GroupId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetGroupIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.GroupId) {
+		return nil, false
+	}
+	return o.GroupId, true
+}
+
+// HasGroupId returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasGroupId() bool {
+	if o != nil && !IsNil(o.GroupId) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupId gets a reference to the given int32 and assigns it to the GroupId field.
+func (o *SingleMessageStatus) SetGroupId(v int32) {
+	o.GroupId = &v
+}
+
+// GetGroupName returns the GroupName field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetGroupName() string {
+	if o == nil || IsNil(o.GroupName) {
+		var ret string
+		return ret
+	}
+	return *o.GroupName
+}
+
+// GetGroupNameOk returns a tuple with the GroupName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetGroupNameOk() (*string, bool) {
+	if o == nil || IsNil(o.GroupName) {
+		return nil, false
+	}
+	return o.GroupName, true
+}
+
+// HasGroupName returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasGroupName() bool {
+	if o != nil && !IsNil(o.GroupName) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupName gets a reference to the given string and assigns it to the GroupName field.
+func (o *SingleMessageStatus) SetGroupName(v string) {
+	o.GroupName = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetId() int32 {
+	if o == nil || IsNil(o.Id) {
+		var ret int32
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given int32 and assigns it to the Id field.
+func (o *SingleMessageStatus) SetId(v int32) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *SingleMessageStatus) SetName(v string) {
+	o.Name = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *SingleMessageStatus) SetDescription(v string) {
+	o.Description = &v
+}
+
+func (o SingleMessageStatus) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SingleMessageStatus) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.GroupId) {
+		toSerialize["groupId"] = o.GroupId
+	}
+	if !IsNil(o.GroupName) {
+		toSerialize["groupName"] = o.GroupName
+	}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	return toSerialize, nil
+}
+
+type NullableSingleMessageStatus struct {
+	value *SingleMessageStatus
+	isSet bool
+}
+
+func (v NullableSingleMessageStatus) Get() *SingleMessageStatus {
+	return v.value
+}
+
+func (v *NullableSingleMessageStatus) Set(val *SingleMessageStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSingleMessageStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSingleMessageStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSingleMessageStatus(val *SingleMessageStatus) *NullableSingleMessageStatus {
+	return &NullableSingleMessageStatus{value: val, isSet: true}
+}
+
+func (v NullableSingleMessageStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSingleMessageStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/sms/status.go b/pkg/infobip/models/email/status.go
similarity index 93%
rename from pkg/infobip/models/sms/status.go
rename to pkg/infobip/models/email/status.go
index e2d45d9..5a3c048 100644
--- a/pkg/infobip/models/sms/status.go
+++ b/pkg/infobip/models/email/status.go
@@ -8,7 +8,7 @@ Contact: support@infobip.com
 
 // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
 
-package sms
+package email
 
 import (
 	"encoding/json"
@@ -19,19 +19,19 @@ import (
 // checks if the Status type satisfies the MappedNullable interface at compile time
 var _ MappedNullable = &Status{}
 
-// Status Indicates the [status](https://www.infobip.com/docs/essentials/response-status-and-error-codes#api-status-codes) of the message and how to recover from an error should there be any.
+// Status Indicates whether the initiated email has been successfully sent, not sent, delivered, not delivered, waiting for delivery or any other possible status.
 type Status struct {
 	// Status group ID.
 	GroupId *int32
-	// Status group name that describes which category the status code belongs to, e.g. PENDING, UNDELIVERABLE, DELIVERED, EXPIRED, REJECTED.
+	// Status group name.
 	GroupName *string
 	// Status ID.
 	Id *int32
-	// [Status name](https://www.infobip.com/docs/essentials/response-status-and-error-codes).
+	// Status name.
 	Name *string
 	// Human-readable description of the status.
 	Description *string
-	// Action that should be taken to recover from the error.
+	// Action name.
 	Action *string
 }
 
@@ -39,6 +39,7 @@ type Status struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewStatus() *Status {
 	this := Status{}
 	return &this
@@ -49,6 +50,7 @@ func NewStatus() *Status {
 // but it doesn't guarantee that properties required by API are set
 func NewStatusWithDefaults() *Status {
 	this := Status{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/email/suppression_info.go b/pkg/infobip/models/email/suppression_info.go
new file mode 100644
index 0000000..fe97d53
--- /dev/null
+++ b/pkg/infobip/models/email/suppression_info.go
@@ -0,0 +1,234 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SuppressionInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SuppressionInfo{}
+
+// SuppressionInfo Suppression get response.
+type SuppressionInfo struct {
+	// Name of the requested domain.
+	DomainName string
+	// Email address that is suppressed.
+	EmailAddress string
+	// Type of suppression.
+	Type string
+	// Date and time when email address was suppressed.
+	CreatedDate Time
+	// Reason for suppression.
+	Reason string
+}
+
+type _SuppressionInfo SuppressionInfo
+
+// NewSuppressionInfo instantiates a new SuppressionInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSuppressionInfo(domainName string, emailAddress string, type_ string, createdDate Time, reason string) *SuppressionInfo {
+	this := SuppressionInfo{}
+	this.DomainName = domainName
+	this.EmailAddress = emailAddress
+	this.Type = type_
+	this.CreatedDate = createdDate
+	this.Reason = reason
+	return &this
+}
+
+// NewSuppressionInfoWithDefaults instantiates a new SuppressionInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSuppressionInfoWithDefaults() *SuppressionInfo {
+	this := SuppressionInfo{}
+
+	return &this
+}
+
+// GetDomainName returns the DomainName field value
+func (o *SuppressionInfo) GetDomainName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DomainName
+}
+
+// GetDomainNameOk returns a tuple with the DomainName field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfo) GetDomainNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DomainName, true
+}
+
+// SetDomainName sets field value
+func (o *SuppressionInfo) SetDomainName(v string) {
+	o.DomainName = v
+}
+
+// GetEmailAddress returns the EmailAddress field value
+func (o *SuppressionInfo) GetEmailAddress() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.EmailAddress
+}
+
+// GetEmailAddressOk returns a tuple with the EmailAddress field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfo) GetEmailAddressOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.EmailAddress, true
+}
+
+// SetEmailAddress sets field value
+func (o *SuppressionInfo) SetEmailAddress(v string) {
+	o.EmailAddress = v
+}
+
+// GetType returns the Type field value
+func (o *SuppressionInfo) GetType() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfo) GetTypeOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *SuppressionInfo) SetType(v string) {
+	o.Type = v
+}
+
+// GetCreatedDate returns the CreatedDate field value
+func (o *SuppressionInfo) GetCreatedDate() Time {
+	if o == nil {
+		var ret Time
+		return ret
+	}
+
+	return o.CreatedDate
+}
+
+// GetCreatedDateOk returns a tuple with the CreatedDate field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfo) GetCreatedDateOk() (*Time, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CreatedDate, true
+}
+
+// SetCreatedDate sets field value
+func (o *SuppressionInfo) SetCreatedDate(v Time) {
+	o.CreatedDate = v
+}
+
+// GetReason returns the Reason field value
+func (o *SuppressionInfo) GetReason() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Reason
+}
+
+// GetReasonOk returns a tuple with the Reason field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfo) GetReasonOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Reason, true
+}
+
+// SetReason sets field value
+func (o *SuppressionInfo) SetReason(v string) {
+	o.Reason = v
+}
+
+func (o SuppressionInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SuppressionInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["domainName"] = o.DomainName
+	toSerialize["emailAddress"] = o.EmailAddress
+	toSerialize["type"] = o.Type
+	toSerialize["createdDate"] = o.CreatedDate
+	toSerialize["reason"] = o.Reason
+	return toSerialize, nil
+}
+
+type NullableSuppressionInfo struct {
+	value *SuppressionInfo
+	isSet bool
+}
+
+func (v NullableSuppressionInfo) Get() *SuppressionInfo {
+	return v.value
+}
+
+func (v *NullableSuppressionInfo) Set(val *SuppressionInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSuppressionInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSuppressionInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSuppressionInfo(val *SuppressionInfo) *NullableSuppressionInfo {
+	return &NullableSuppressionInfo{value: val, isSet: true}
+}
+
+func (v NullableSuppressionInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSuppressionInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/suppression_info_page_response.go b/pkg/infobip/models/email/suppression_info_page_response.go
new file mode 100644
index 0000000..f0329a3
--- /dev/null
+++ b/pkg/infobip/models/email/suppression_info_page_response.go
@@ -0,0 +1,149 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SuppressionInfoPageResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SuppressionInfoPageResponse{}
+
+// SuppressionInfoPageResponse Suppression get response.
+type SuppressionInfoPageResponse struct {
+	// Suppressed addresses for requested paging information.
+	Results []SuppressionInfo
+	Paging  ApiPageDetails
+}
+
+type _SuppressionInfoPageResponse SuppressionInfoPageResponse
+
+// NewSuppressionInfoPageResponse instantiates a new SuppressionInfoPageResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSuppressionInfoPageResponse(results []SuppressionInfo, paging ApiPageDetails) *SuppressionInfoPageResponse {
+	this := SuppressionInfoPageResponse{}
+	this.Results = results
+	this.Paging = paging
+	return &this
+}
+
+// NewSuppressionInfoPageResponseWithDefaults instantiates a new SuppressionInfoPageResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSuppressionInfoPageResponseWithDefaults() *SuppressionInfoPageResponse {
+	this := SuppressionInfoPageResponse{}
+
+	return &this
+}
+
+// GetResults returns the Results field value
+func (o *SuppressionInfoPageResponse) GetResults() []SuppressionInfo {
+	if o == nil {
+		var ret []SuppressionInfo
+		return ret
+	}
+
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfoPageResponse) GetResultsOk() ([]SuppressionInfo, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// SetResults sets field value
+func (o *SuppressionInfoPageResponse) SetResults(v []SuppressionInfo) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value
+func (o *SuppressionInfoPageResponse) GetPaging() ApiPageDetails {
+	if o == nil {
+		var ret ApiPageDetails
+		return ret
+	}
+
+	return o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value
+// and a boolean to check if the value has been set.
+func (o *SuppressionInfoPageResponse) GetPagingOk() (*ApiPageDetails, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Paging, true
+}
+
+// SetPaging sets field value
+func (o *SuppressionInfoPageResponse) SetPaging(v ApiPageDetails) {
+	o.Paging = v
+}
+
+func (o SuppressionInfoPageResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SuppressionInfoPageResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["results"] = o.Results
+	toSerialize["paging"] = o.Paging
+	return toSerialize, nil
+}
+
+type NullableSuppressionInfoPageResponse struct {
+	value *SuppressionInfoPageResponse
+	isSet bool
+}
+
+func (v NullableSuppressionInfoPageResponse) Get() *SuppressionInfoPageResponse {
+	return v.value
+}
+
+func (v *NullableSuppressionInfoPageResponse) Set(val *SuppressionInfoPageResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSuppressionInfoPageResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSuppressionInfoPageResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSuppressionInfoPageResponse(val *SuppressionInfoPageResponse) *NullableSuppressionInfoPageResponse {
+	return &NullableSuppressionInfoPageResponse{value: val, isSet: true}
+}
+
+func (v NullableSuppressionInfoPageResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSuppressionInfoPageResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/track_report.go b/pkg/infobip/models/email/track_report.go
new file mode 100644
index 0000000..37d6afa
--- /dev/null
+++ b/pkg/infobip/models/email/track_report.go
@@ -0,0 +1,460 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the TrackReport type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &TrackReport{}
+
+// TrackReport struct for TrackReport
+type TrackReport struct {
+	// Tells the type of user event that took place. Possible events: `OPENED`, `CLICKED`, `COMPLAINED`, `UNSUBSCRIBED`.
+	NotificationType *string
+	// The sending domain used to send the email to the recipient.
+	Domain *string
+	// Recipient of the email.
+	Recipient *string
+	// The link the recipient has clicked. This attribute will only be present if the event is of the type `CLICKED`.
+	Url *string
+	// The time at which the email was sent. Time is in milliseconds.
+	SendDateTime *float32
+	// The ID that uniquely identifies the message sent to the recipient.
+	MessageId *string
+	// The ID that uniquely identifies a list of email messages. This is either defined by user in the request or auto generated.
+	BulkId *string
+	// The callback data sent through the callbackData field in your fully featured Email message.
+	CallbackData  *string
+	RecipientInfo *RecipientInfo
+	GeoLocation   *GeoLocation
+}
+
+// NewTrackReport instantiates a new TrackReport object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewTrackReport() *TrackReport {
+	this := TrackReport{}
+	return &this
+}
+
+// NewTrackReportWithDefaults instantiates a new TrackReport object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewTrackReportWithDefaults() *TrackReport {
+	this := TrackReport{}
+
+	return &this
+}
+
+// GetNotificationType returns the NotificationType field value if set, zero value otherwise.
+func (o *TrackReport) GetNotificationType() string {
+	if o == nil || IsNil(o.NotificationType) {
+		var ret string
+		return ret
+	}
+	return *o.NotificationType
+}
+
+// GetNotificationTypeOk returns a tuple with the NotificationType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetNotificationTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.NotificationType) {
+		return nil, false
+	}
+	return o.NotificationType, true
+}
+
+// HasNotificationType returns a boolean if a field has been set.
+func (o *TrackReport) HasNotificationType() bool {
+	if o != nil && !IsNil(o.NotificationType) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotificationType gets a reference to the given string and assigns it to the NotificationType field.
+func (o *TrackReport) SetNotificationType(v string) {
+	o.NotificationType = &v
+}
+
+// GetDomain returns the Domain field value if set, zero value otherwise.
+func (o *TrackReport) GetDomain() string {
+	if o == nil || IsNil(o.Domain) {
+		var ret string
+		return ret
+	}
+	return *o.Domain
+}
+
+// GetDomainOk returns a tuple with the Domain field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetDomainOk() (*string, bool) {
+	if o == nil || IsNil(o.Domain) {
+		return nil, false
+	}
+	return o.Domain, true
+}
+
+// HasDomain returns a boolean if a field has been set.
+func (o *TrackReport) HasDomain() bool {
+	if o != nil && !IsNil(o.Domain) {
+		return true
+	}
+
+	return false
+}
+
+// SetDomain gets a reference to the given string and assigns it to the Domain field.
+func (o *TrackReport) SetDomain(v string) {
+	o.Domain = &v
+}
+
+// GetRecipient returns the Recipient field value if set, zero value otherwise.
+func (o *TrackReport) GetRecipient() string {
+	if o == nil || IsNil(o.Recipient) {
+		var ret string
+		return ret
+	}
+	return *o.Recipient
+}
+
+// GetRecipientOk returns a tuple with the Recipient field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetRecipientOk() (*string, bool) {
+	if o == nil || IsNil(o.Recipient) {
+		return nil, false
+	}
+	return o.Recipient, true
+}
+
+// HasRecipient returns a boolean if a field has been set.
+func (o *TrackReport) HasRecipient() bool {
+	if o != nil && !IsNil(o.Recipient) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecipient gets a reference to the given string and assigns it to the Recipient field.
+func (o *TrackReport) SetRecipient(v string) {
+	o.Recipient = &v
+}
+
+// GetUrl returns the Url field value if set, zero value otherwise.
+func (o *TrackReport) GetUrl() string {
+	if o == nil || IsNil(o.Url) {
+		var ret string
+		return ret
+	}
+	return *o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.Url) {
+		return nil, false
+	}
+	return o.Url, true
+}
+
+// HasUrl returns a boolean if a field has been set.
+func (o *TrackReport) HasUrl() bool {
+	if o != nil && !IsNil(o.Url) {
+		return true
+	}
+
+	return false
+}
+
+// SetUrl gets a reference to the given string and assigns it to the Url field.
+func (o *TrackReport) SetUrl(v string) {
+	o.Url = &v
+}
+
+// GetSendDateTime returns the SendDateTime field value if set, zero value otherwise.
+func (o *TrackReport) GetSendDateTime() float32 {
+	if o == nil || IsNil(o.SendDateTime) {
+		var ret float32
+		return ret
+	}
+	return *o.SendDateTime
+}
+
+// GetSendDateTimeOk returns a tuple with the SendDateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetSendDateTimeOk() (*float32, bool) {
+	if o == nil || IsNil(o.SendDateTime) {
+		return nil, false
+	}
+	return o.SendDateTime, true
+}
+
+// HasSendDateTime returns a boolean if a field has been set.
+func (o *TrackReport) HasSendDateTime() bool {
+	if o != nil && !IsNil(o.SendDateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendDateTime gets a reference to the given float32 and assigns it to the SendDateTime field.
+func (o *TrackReport) SetSendDateTime(v float32) {
+	o.SendDateTime = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *TrackReport) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *TrackReport) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *TrackReport) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *TrackReport) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *TrackReport) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *TrackReport) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *TrackReport) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *TrackReport) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *TrackReport) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+// GetRecipientInfo returns the RecipientInfo field value if set, zero value otherwise.
+func (o *TrackReport) GetRecipientInfo() RecipientInfo {
+	if o == nil || IsNil(o.RecipientInfo) {
+		var ret RecipientInfo
+		return ret
+	}
+	return *o.RecipientInfo
+}
+
+// GetRecipientInfoOk returns a tuple with the RecipientInfo field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetRecipientInfoOk() (*RecipientInfo, bool) {
+	if o == nil || IsNil(o.RecipientInfo) {
+		return nil, false
+	}
+	return o.RecipientInfo, true
+}
+
+// HasRecipientInfo returns a boolean if a field has been set.
+func (o *TrackReport) HasRecipientInfo() bool {
+	if o != nil && !IsNil(o.RecipientInfo) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecipientInfo gets a reference to the given RecipientInfo and assigns it to the RecipientInfo field.
+func (o *TrackReport) SetRecipientInfo(v RecipientInfo) {
+	o.RecipientInfo = &v
+}
+
+// GetGeoLocation returns the GeoLocation field value if set, zero value otherwise.
+func (o *TrackReport) GetGeoLocation() GeoLocation {
+	if o == nil || IsNil(o.GeoLocation) {
+		var ret GeoLocation
+		return ret
+	}
+	return *o.GeoLocation
+}
+
+// GetGeoLocationOk returns a tuple with the GeoLocation field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackReport) GetGeoLocationOk() (*GeoLocation, bool) {
+	if o == nil || IsNil(o.GeoLocation) {
+		return nil, false
+	}
+	return o.GeoLocation, true
+}
+
+// HasGeoLocation returns a boolean if a field has been set.
+func (o *TrackReport) HasGeoLocation() bool {
+	if o != nil && !IsNil(o.GeoLocation) {
+		return true
+	}
+
+	return false
+}
+
+// SetGeoLocation gets a reference to the given GeoLocation and assigns it to the GeoLocation field.
+func (o *TrackReport) SetGeoLocation(v GeoLocation) {
+	o.GeoLocation = &v
+}
+
+func (o TrackReport) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o TrackReport) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.NotificationType) {
+		toSerialize["notificationType"] = o.NotificationType
+	}
+	if !IsNil(o.Domain) {
+		toSerialize["domain"] = o.Domain
+	}
+	if !IsNil(o.Recipient) {
+		toSerialize["recipient"] = o.Recipient
+	}
+	if !IsNil(o.Url) {
+		toSerialize["url"] = o.Url
+	}
+	if !IsNil(o.SendDateTime) {
+		toSerialize["sendDateTime"] = o.SendDateTime
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	if !IsNil(o.RecipientInfo) {
+		toSerialize["recipientInfo"] = o.RecipientInfo
+	}
+	if !IsNil(o.GeoLocation) {
+		toSerialize["geoLocation"] = o.GeoLocation
+	}
+	return toSerialize, nil
+}
+
+type NullableTrackReport struct {
+	value *TrackReport
+	isSet bool
+}
+
+func (v NullableTrackReport) Get() *TrackReport {
+	return v.value
+}
+
+func (v *NullableTrackReport) Set(val *TrackReport) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTrackReport) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTrackReport) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTrackReport(val *TrackReport) *NullableTrackReport {
+	return &NullableTrackReport{value: val, isSet: true}
+}
+
+func (v NullableTrackReport) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTrackReport) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/track_response.go b/pkg/infobip/models/email/track_response.go
new file mode 100644
index 0000000..f323cb7
--- /dev/null
+++ b/pkg/infobip/models/email/track_response.go
@@ -0,0 +1,460 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the TrackResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &TrackResponse{}
+
+// TrackResponse struct for TrackResponse
+type TrackResponse struct {
+	// Tells the type of user event that took place. Possible events: `OPENED`, `CLICKED`, `COMPLAINED`, `UNSUBSCRIBED`.
+	NotificationType *string
+	// The sending domain used to send the email to the recipient.
+	Domain *string
+	// Recipient of the email.
+	Recipient *string
+	// The link the recipient has clicked. This attribute will only be present if the event is of the type `CLICKED`.
+	Url *string
+	// The time at which the email was sent. Time is in milliseconds.
+	SendDateTime *float32
+	// The ID that uniquely identifies the message sent to the recipient.
+	MessageId *string
+	// The ID that uniquely identifies a list of email messages. This is either defined by user in the request or auto generated.
+	BulkId *string
+	// The callback data sent through the callbackData field in your fully featured Email message.
+	CallbackData  *string
+	RecipientInfo *RecipientInfo
+	GeoLocation   *GeoLocation
+}
+
+// NewTrackResponse instantiates a new TrackResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewTrackResponse() *TrackResponse {
+	this := TrackResponse{}
+	return &this
+}
+
+// NewTrackResponseWithDefaults instantiates a new TrackResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewTrackResponseWithDefaults() *TrackResponse {
+	this := TrackResponse{}
+
+	return &this
+}
+
+// GetNotificationType returns the NotificationType field value if set, zero value otherwise.
+func (o *TrackResponse) GetNotificationType() string {
+	if o == nil || IsNil(o.NotificationType) {
+		var ret string
+		return ret
+	}
+	return *o.NotificationType
+}
+
+// GetNotificationTypeOk returns a tuple with the NotificationType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetNotificationTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.NotificationType) {
+		return nil, false
+	}
+	return o.NotificationType, true
+}
+
+// HasNotificationType returns a boolean if a field has been set.
+func (o *TrackResponse) HasNotificationType() bool {
+	if o != nil && !IsNil(o.NotificationType) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotificationType gets a reference to the given string and assigns it to the NotificationType field.
+func (o *TrackResponse) SetNotificationType(v string) {
+	o.NotificationType = &v
+}
+
+// GetDomain returns the Domain field value if set, zero value otherwise.
+func (o *TrackResponse) GetDomain() string {
+	if o == nil || IsNil(o.Domain) {
+		var ret string
+		return ret
+	}
+	return *o.Domain
+}
+
+// GetDomainOk returns a tuple with the Domain field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetDomainOk() (*string, bool) {
+	if o == nil || IsNil(o.Domain) {
+		return nil, false
+	}
+	return o.Domain, true
+}
+
+// HasDomain returns a boolean if a field has been set.
+func (o *TrackResponse) HasDomain() bool {
+	if o != nil && !IsNil(o.Domain) {
+		return true
+	}
+
+	return false
+}
+
+// SetDomain gets a reference to the given string and assigns it to the Domain field.
+func (o *TrackResponse) SetDomain(v string) {
+	o.Domain = &v
+}
+
+// GetRecipient returns the Recipient field value if set, zero value otherwise.
+func (o *TrackResponse) GetRecipient() string {
+	if o == nil || IsNil(o.Recipient) {
+		var ret string
+		return ret
+	}
+	return *o.Recipient
+}
+
+// GetRecipientOk returns a tuple with the Recipient field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetRecipientOk() (*string, bool) {
+	if o == nil || IsNil(o.Recipient) {
+		return nil, false
+	}
+	return o.Recipient, true
+}
+
+// HasRecipient returns a boolean if a field has been set.
+func (o *TrackResponse) HasRecipient() bool {
+	if o != nil && !IsNil(o.Recipient) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecipient gets a reference to the given string and assigns it to the Recipient field.
+func (o *TrackResponse) SetRecipient(v string) {
+	o.Recipient = &v
+}
+
+// GetUrl returns the Url field value if set, zero value otherwise.
+func (o *TrackResponse) GetUrl() string {
+	if o == nil || IsNil(o.Url) {
+		var ret string
+		return ret
+	}
+	return *o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.Url) {
+		return nil, false
+	}
+	return o.Url, true
+}
+
+// HasUrl returns a boolean if a field has been set.
+func (o *TrackResponse) HasUrl() bool {
+	if o != nil && !IsNil(o.Url) {
+		return true
+	}
+
+	return false
+}
+
+// SetUrl gets a reference to the given string and assigns it to the Url field.
+func (o *TrackResponse) SetUrl(v string) {
+	o.Url = &v
+}
+
+// GetSendDateTime returns the SendDateTime field value if set, zero value otherwise.
+func (o *TrackResponse) GetSendDateTime() float32 {
+	if o == nil || IsNil(o.SendDateTime) {
+		var ret float32
+		return ret
+	}
+	return *o.SendDateTime
+}
+
+// GetSendDateTimeOk returns a tuple with the SendDateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetSendDateTimeOk() (*float32, bool) {
+	if o == nil || IsNil(o.SendDateTime) {
+		return nil, false
+	}
+	return o.SendDateTime, true
+}
+
+// HasSendDateTime returns a boolean if a field has been set.
+func (o *TrackResponse) HasSendDateTime() bool {
+	if o != nil && !IsNil(o.SendDateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendDateTime gets a reference to the given float32 and assigns it to the SendDateTime field.
+func (o *TrackResponse) SetSendDateTime(v float32) {
+	o.SendDateTime = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *TrackResponse) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *TrackResponse) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *TrackResponse) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *TrackResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *TrackResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *TrackResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *TrackResponse) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *TrackResponse) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *TrackResponse) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+// GetRecipientInfo returns the RecipientInfo field value if set, zero value otherwise.
+func (o *TrackResponse) GetRecipientInfo() RecipientInfo {
+	if o == nil || IsNil(o.RecipientInfo) {
+		var ret RecipientInfo
+		return ret
+	}
+	return *o.RecipientInfo
+}
+
+// GetRecipientInfoOk returns a tuple with the RecipientInfo field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetRecipientInfoOk() (*RecipientInfo, bool) {
+	if o == nil || IsNil(o.RecipientInfo) {
+		return nil, false
+	}
+	return o.RecipientInfo, true
+}
+
+// HasRecipientInfo returns a boolean if a field has been set.
+func (o *TrackResponse) HasRecipientInfo() bool {
+	if o != nil && !IsNil(o.RecipientInfo) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecipientInfo gets a reference to the given RecipientInfo and assigns it to the RecipientInfo field.
+func (o *TrackResponse) SetRecipientInfo(v RecipientInfo) {
+	o.RecipientInfo = &v
+}
+
+// GetGeoLocation returns the GeoLocation field value if set, zero value otherwise.
+func (o *TrackResponse) GetGeoLocation() GeoLocation {
+	if o == nil || IsNil(o.GeoLocation) {
+		var ret GeoLocation
+		return ret
+	}
+	return *o.GeoLocation
+}
+
+// GetGeoLocationOk returns a tuple with the GeoLocation field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackResponse) GetGeoLocationOk() (*GeoLocation, bool) {
+	if o == nil || IsNil(o.GeoLocation) {
+		return nil, false
+	}
+	return o.GeoLocation, true
+}
+
+// HasGeoLocation returns a boolean if a field has been set.
+func (o *TrackResponse) HasGeoLocation() bool {
+	if o != nil && !IsNil(o.GeoLocation) {
+		return true
+	}
+
+	return false
+}
+
+// SetGeoLocation gets a reference to the given GeoLocation and assigns it to the GeoLocation field.
+func (o *TrackResponse) SetGeoLocation(v GeoLocation) {
+	o.GeoLocation = &v
+}
+
+func (o TrackResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o TrackResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.NotificationType) {
+		toSerialize["notificationType"] = o.NotificationType
+	}
+	if !IsNil(o.Domain) {
+		toSerialize["domain"] = o.Domain
+	}
+	if !IsNil(o.Recipient) {
+		toSerialize["recipient"] = o.Recipient
+	}
+	if !IsNil(o.Url) {
+		toSerialize["url"] = o.Url
+	}
+	if !IsNil(o.SendDateTime) {
+		toSerialize["sendDateTime"] = o.SendDateTime
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	if !IsNil(o.RecipientInfo) {
+		toSerialize["recipientInfo"] = o.RecipientInfo
+	}
+	if !IsNil(o.GeoLocation) {
+		toSerialize["geoLocation"] = o.GeoLocation
+	}
+	return toSerialize, nil
+}
+
+type NullableTrackResponse struct {
+	value *TrackResponse
+	isSet bool
+}
+
+func (v NullableTrackResponse) Get() *TrackResponse {
+	return v.value
+}
+
+func (v *NullableTrackResponse) Set(val *TrackResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTrackResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTrackResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTrackResponse(val *TrackResponse) *NullableTrackResponse {
+	return &NullableTrackResponse{value: val, isSet: true}
+}
+
+func (v NullableTrackResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTrackResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/tracking_event_request.go b/pkg/infobip/models/email/tracking_event_request.go
new file mode 100644
index 0000000..8ebe1ef
--- /dev/null
+++ b/pkg/infobip/models/email/tracking_event_request.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the TrackingEventRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &TrackingEventRequest{}
+
+// TrackingEventRequest struct for TrackingEventRequest
+type TrackingEventRequest struct {
+	// Boolean value corresponding to whether opens for a message needs to be tracked or not.
+	Open *bool
+	// Boolean value corresponding to whether clicks for a message needs to be tracked or not.
+	Clicks *bool
+	// Boolean value corresponding to whether unsubscribe for a message needs to be tracked or not.
+	Unsubscribe *bool
+}
+
+// NewTrackingEventRequest instantiates a new TrackingEventRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewTrackingEventRequest() *TrackingEventRequest {
+	this := TrackingEventRequest{}
+	return &this
+}
+
+// NewTrackingEventRequestWithDefaults instantiates a new TrackingEventRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewTrackingEventRequestWithDefaults() *TrackingEventRequest {
+	this := TrackingEventRequest{}
+
+	return &this
+}
+
+// GetOpen returns the Open field value if set, zero value otherwise.
+func (o *TrackingEventRequest) GetOpen() bool {
+	if o == nil || IsNil(o.Open) {
+		var ret bool
+		return ret
+	}
+	return *o.Open
+}
+
+// GetOpenOk returns a tuple with the Open field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackingEventRequest) GetOpenOk() (*bool, bool) {
+	if o == nil || IsNil(o.Open) {
+		return nil, false
+	}
+	return o.Open, true
+}
+
+// HasOpen returns a boolean if a field has been set.
+func (o *TrackingEventRequest) HasOpen() bool {
+	if o != nil && !IsNil(o.Open) {
+		return true
+	}
+
+	return false
+}
+
+// SetOpen gets a reference to the given bool and assigns it to the Open field.
+func (o *TrackingEventRequest) SetOpen(v bool) {
+	o.Open = &v
+}
+
+// GetClicks returns the Clicks field value if set, zero value otherwise.
+func (o *TrackingEventRequest) GetClicks() bool {
+	if o == nil || IsNil(o.Clicks) {
+		var ret bool
+		return ret
+	}
+	return *o.Clicks
+}
+
+// GetClicksOk returns a tuple with the Clicks field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackingEventRequest) GetClicksOk() (*bool, bool) {
+	if o == nil || IsNil(o.Clicks) {
+		return nil, false
+	}
+	return o.Clicks, true
+}
+
+// HasClicks returns a boolean if a field has been set.
+func (o *TrackingEventRequest) HasClicks() bool {
+	if o != nil && !IsNil(o.Clicks) {
+		return true
+	}
+
+	return false
+}
+
+// SetClicks gets a reference to the given bool and assigns it to the Clicks field.
+func (o *TrackingEventRequest) SetClicks(v bool) {
+	o.Clicks = &v
+}
+
+// GetUnsubscribe returns the Unsubscribe field value if set, zero value otherwise.
+func (o *TrackingEventRequest) GetUnsubscribe() bool {
+	if o == nil || IsNil(o.Unsubscribe) {
+		var ret bool
+		return ret
+	}
+	return *o.Unsubscribe
+}
+
+// GetUnsubscribeOk returns a tuple with the Unsubscribe field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackingEventRequest) GetUnsubscribeOk() (*bool, bool) {
+	if o == nil || IsNil(o.Unsubscribe) {
+		return nil, false
+	}
+	return o.Unsubscribe, true
+}
+
+// HasUnsubscribe returns a boolean if a field has been set.
+func (o *TrackingEventRequest) HasUnsubscribe() bool {
+	if o != nil && !IsNil(o.Unsubscribe) {
+		return true
+	}
+
+	return false
+}
+
+// SetUnsubscribe gets a reference to the given bool and assigns it to the Unsubscribe field.
+func (o *TrackingEventRequest) SetUnsubscribe(v bool) {
+	o.Unsubscribe = &v
+}
+
+func (o TrackingEventRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o TrackingEventRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Open) {
+		toSerialize["open"] = o.Open
+	}
+	if !IsNil(o.Clicks) {
+		toSerialize["clicks"] = o.Clicks
+	}
+	if !IsNil(o.Unsubscribe) {
+		toSerialize["unsubscribe"] = o.Unsubscribe
+	}
+	return toSerialize, nil
+}
+
+type NullableTrackingEventRequest struct {
+	value *TrackingEventRequest
+	isSet bool
+}
+
+func (v NullableTrackingEventRequest) Get() *TrackingEventRequest {
+	return v.value
+}
+
+func (v *NullableTrackingEventRequest) Set(val *TrackingEventRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTrackingEventRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTrackingEventRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTrackingEventRequest(val *TrackingEventRequest) *NullableTrackingEventRequest {
+	return &NullableTrackingEventRequest{value: val, isSet: true}
+}
+
+func (v NullableTrackingEventRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTrackingEventRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/tracking_response.go b/pkg/infobip/models/email/tracking_response.go
new file mode 100644
index 0000000..9b8f331
--- /dev/null
+++ b/pkg/infobip/models/email/tracking_response.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the TrackingResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &TrackingResponse{}
+
+// TrackingResponse Tracking details of the domain.
+type TrackingResponse struct {
+	// Indicates whether tracking of clicks is enabled.
+	Clicks *bool
+	// Indicates whether tracking of opens is enabled.
+	Opens *bool
+	// Indicates whether tracking of unsubscribes is enabled.
+	Unsubscribe *bool
+}
+
+// NewTrackingResponse instantiates a new TrackingResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewTrackingResponse() *TrackingResponse {
+	this := TrackingResponse{}
+	return &this
+}
+
+// NewTrackingResponseWithDefaults instantiates a new TrackingResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewTrackingResponseWithDefaults() *TrackingResponse {
+	this := TrackingResponse{}
+
+	return &this
+}
+
+// GetClicks returns the Clicks field value if set, zero value otherwise.
+func (o *TrackingResponse) GetClicks() bool {
+	if o == nil || IsNil(o.Clicks) {
+		var ret bool
+		return ret
+	}
+	return *o.Clicks
+}
+
+// GetClicksOk returns a tuple with the Clicks field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackingResponse) GetClicksOk() (*bool, bool) {
+	if o == nil || IsNil(o.Clicks) {
+		return nil, false
+	}
+	return o.Clicks, true
+}
+
+// HasClicks returns a boolean if a field has been set.
+func (o *TrackingResponse) HasClicks() bool {
+	if o != nil && !IsNil(o.Clicks) {
+		return true
+	}
+
+	return false
+}
+
+// SetClicks gets a reference to the given bool and assigns it to the Clicks field.
+func (o *TrackingResponse) SetClicks(v bool) {
+	o.Clicks = &v
+}
+
+// GetOpens returns the Opens field value if set, zero value otherwise.
+func (o *TrackingResponse) GetOpens() bool {
+	if o == nil || IsNil(o.Opens) {
+		var ret bool
+		return ret
+	}
+	return *o.Opens
+}
+
+// GetOpensOk returns a tuple with the Opens field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackingResponse) GetOpensOk() (*bool, bool) {
+	if o == nil || IsNil(o.Opens) {
+		return nil, false
+	}
+	return o.Opens, true
+}
+
+// HasOpens returns a boolean if a field has been set.
+func (o *TrackingResponse) HasOpens() bool {
+	if o != nil && !IsNil(o.Opens) {
+		return true
+	}
+
+	return false
+}
+
+// SetOpens gets a reference to the given bool and assigns it to the Opens field.
+func (o *TrackingResponse) SetOpens(v bool) {
+	o.Opens = &v
+}
+
+// GetUnsubscribe returns the Unsubscribe field value if set, zero value otherwise.
+func (o *TrackingResponse) GetUnsubscribe() bool {
+	if o == nil || IsNil(o.Unsubscribe) {
+		var ret bool
+		return ret
+	}
+	return *o.Unsubscribe
+}
+
+// GetUnsubscribeOk returns a tuple with the Unsubscribe field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TrackingResponse) GetUnsubscribeOk() (*bool, bool) {
+	if o == nil || IsNil(o.Unsubscribe) {
+		return nil, false
+	}
+	return o.Unsubscribe, true
+}
+
+// HasUnsubscribe returns a boolean if a field has been set.
+func (o *TrackingResponse) HasUnsubscribe() bool {
+	if o != nil && !IsNil(o.Unsubscribe) {
+		return true
+	}
+
+	return false
+}
+
+// SetUnsubscribe gets a reference to the given bool and assigns it to the Unsubscribe field.
+func (o *TrackingResponse) SetUnsubscribe(v bool) {
+	o.Unsubscribe = &v
+}
+
+func (o TrackingResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o TrackingResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Clicks) {
+		toSerialize["clicks"] = o.Clicks
+	}
+	if !IsNil(o.Opens) {
+		toSerialize["opens"] = o.Opens
+	}
+	if !IsNil(o.Unsubscribe) {
+		toSerialize["unsubscribe"] = o.Unsubscribe
+	}
+	return toSerialize, nil
+}
+
+type NullableTrackingResponse struct {
+	value *TrackingResponse
+	isSet bool
+}
+
+func (v NullableTrackingResponse) Get() *TrackingResponse {
+	return v.value
+}
+
+func (v *NullableTrackingResponse) Set(val *TrackingResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTrackingResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTrackingResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTrackingResponse(val *TrackingResponse) *NullableTrackingResponse {
+	return &NullableTrackingResponse{value: val, isSet: true}
+}
+
+func (v NullableTrackingResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTrackingResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/validation_request.go b/pkg/infobip/models/email/validation_request.go
new file mode 100644
index 0000000..8b9a847
--- /dev/null
+++ b/pkg/infobip/models/email/validation_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ValidationRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ValidationRequest{}
+
+// ValidationRequest struct for ValidationRequest
+type ValidationRequest struct {
+	// Email address of the recipient.
+	To string
+}
+
+type _ValidationRequest ValidationRequest
+
+// NewValidationRequest instantiates a new ValidationRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewValidationRequest(to string) *ValidationRequest {
+	this := ValidationRequest{}
+	this.To = to
+	return &this
+}
+
+// NewValidationRequestWithDefaults instantiates a new ValidationRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewValidationRequestWithDefaults() *ValidationRequest {
+	this := ValidationRequest{}
+
+	return &this
+}
+
+// GetTo returns the To field value
+func (o *ValidationRequest) GetTo() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.To
+}
+
+// GetToOk returns a tuple with the To field value
+// and a boolean to check if the value has been set.
+func (o *ValidationRequest) GetToOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.To, true
+}
+
+// SetTo sets field value
+func (o *ValidationRequest) SetTo(v string) {
+	o.To = v
+}
+
+func (o ValidationRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ValidationRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["to"] = o.To
+	return toSerialize, nil
+}
+
+type NullableValidationRequest struct {
+	value *ValidationRequest
+	isSet bool
+}
+
+func (v NullableValidationRequest) Get() *ValidationRequest {
+	return v.value
+}
+
+func (v *NullableValidationRequest) Set(val *ValidationRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableValidationRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableValidationRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableValidationRequest(val *ValidationRequest) *NullableValidationRequest {
+	return &NullableValidationRequest{value: val, isSet: true}
+}
+
+func (v NullableValidationRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableValidationRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/email/validation_response.go b/pkg/infobip/models/email/validation_response.go
new file mode 100644
index 0000000..32dcdb2
--- /dev/null
+++ b/pkg/infobip/models/email/validation_response.go
@@ -0,0 +1,460 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package email
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ValidationResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ValidationResponse{}
+
+// ValidationResponse struct for ValidationResponse
+type ValidationResponse struct {
+	// Email address of the recipient.
+	To *string
+	// Represents status of recipient email address.
+	ValidMailbox *string
+	// Represents syntax of recipient email address.
+	ValidSyntax *bool
+	// Denotes catch all status of recipient email address.
+	CatchAll *bool
+	// Suggests alternate addresses that maybe valid.
+	DidYouMean *string
+	Disposable *bool
+	RoleBased  *bool
+	// Reason is provided when validMailbox status is unknown. 1. INBOX_FULL - The user quota exceeded / The user inbox is full / The user doesn't accept any more requests.  2. UNEXPECTED_FAILURE - The mail Server returned a temporary error. 3. THROTTLED - The mail server is not allowing us momentarily because of too many requests. 4. TIMED_OUT - The Mail Server took a longer time to respond / there was a delay in the network. 5. TEMP_REJECTION - Mail server temporarily rejected. 6. UNABLE_TO_CONNECT - Unable to connect to the Mail Server.
+	Reason *string
+	// Is provided when validMailbox is 'unknown' or 'false' and lists reasons clarifying why validMailbox has that status.
+	DetailedReasons *string
+	// Returns one of the following values: 'High', 'Medium', 'Low' or 'Unknown'. High risk addresses have very high chances of bouncing (and potentially damaging the sender's reputation), whereas low risk addresses have very low chances of bouncing and damaging the sender's reputation.
+	Risk *string
+}
+
+// NewValidationResponse instantiates a new ValidationResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewValidationResponse() *ValidationResponse {
+	this := ValidationResponse{}
+	return &this
+}
+
+// NewValidationResponseWithDefaults instantiates a new ValidationResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewValidationResponseWithDefaults() *ValidationResponse {
+	this := ValidationResponse{}
+
+	return &this
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *ValidationResponse) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *ValidationResponse) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *ValidationResponse) SetTo(v string) {
+	o.To = &v
+}
+
+// GetValidMailbox returns the ValidMailbox field value if set, zero value otherwise.
+func (o *ValidationResponse) GetValidMailbox() string {
+	if o == nil || IsNil(o.ValidMailbox) {
+		var ret string
+		return ret
+	}
+	return *o.ValidMailbox
+}
+
+// GetValidMailboxOk returns a tuple with the ValidMailbox field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetValidMailboxOk() (*string, bool) {
+	if o == nil || IsNil(o.ValidMailbox) {
+		return nil, false
+	}
+	return o.ValidMailbox, true
+}
+
+// HasValidMailbox returns a boolean if a field has been set.
+func (o *ValidationResponse) HasValidMailbox() bool {
+	if o != nil && !IsNil(o.ValidMailbox) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidMailbox gets a reference to the given string and assigns it to the ValidMailbox field.
+func (o *ValidationResponse) SetValidMailbox(v string) {
+	o.ValidMailbox = &v
+}
+
+// GetValidSyntax returns the ValidSyntax field value if set, zero value otherwise.
+func (o *ValidationResponse) GetValidSyntax() bool {
+	if o == nil || IsNil(o.ValidSyntax) {
+		var ret bool
+		return ret
+	}
+	return *o.ValidSyntax
+}
+
+// GetValidSyntaxOk returns a tuple with the ValidSyntax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetValidSyntaxOk() (*bool, bool) {
+	if o == nil || IsNil(o.ValidSyntax) {
+		return nil, false
+	}
+	return o.ValidSyntax, true
+}
+
+// HasValidSyntax returns a boolean if a field has been set.
+func (o *ValidationResponse) HasValidSyntax() bool {
+	if o != nil && !IsNil(o.ValidSyntax) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidSyntax gets a reference to the given bool and assigns it to the ValidSyntax field.
+func (o *ValidationResponse) SetValidSyntax(v bool) {
+	o.ValidSyntax = &v
+}
+
+// GetCatchAll returns the CatchAll field value if set, zero value otherwise.
+func (o *ValidationResponse) GetCatchAll() bool {
+	if o == nil || IsNil(o.CatchAll) {
+		var ret bool
+		return ret
+	}
+	return *o.CatchAll
+}
+
+// GetCatchAllOk returns a tuple with the CatchAll field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetCatchAllOk() (*bool, bool) {
+	if o == nil || IsNil(o.CatchAll) {
+		return nil, false
+	}
+	return o.CatchAll, true
+}
+
+// HasCatchAll returns a boolean if a field has been set.
+func (o *ValidationResponse) HasCatchAll() bool {
+	if o != nil && !IsNil(o.CatchAll) {
+		return true
+	}
+
+	return false
+}
+
+// SetCatchAll gets a reference to the given bool and assigns it to the CatchAll field.
+func (o *ValidationResponse) SetCatchAll(v bool) {
+	o.CatchAll = &v
+}
+
+// GetDidYouMean returns the DidYouMean field value if set, zero value otherwise.
+func (o *ValidationResponse) GetDidYouMean() string {
+	if o == nil || IsNil(o.DidYouMean) {
+		var ret string
+		return ret
+	}
+	return *o.DidYouMean
+}
+
+// GetDidYouMeanOk returns a tuple with the DidYouMean field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetDidYouMeanOk() (*string, bool) {
+	if o == nil || IsNil(o.DidYouMean) {
+		return nil, false
+	}
+	return o.DidYouMean, true
+}
+
+// HasDidYouMean returns a boolean if a field has been set.
+func (o *ValidationResponse) HasDidYouMean() bool {
+	if o != nil && !IsNil(o.DidYouMean) {
+		return true
+	}
+
+	return false
+}
+
+// SetDidYouMean gets a reference to the given string and assigns it to the DidYouMean field.
+func (o *ValidationResponse) SetDidYouMean(v string) {
+	o.DidYouMean = &v
+}
+
+// GetDisposable returns the Disposable field value if set, zero value otherwise.
+func (o *ValidationResponse) GetDisposable() bool {
+	if o == nil || IsNil(o.Disposable) {
+		var ret bool
+		return ret
+	}
+	return *o.Disposable
+}
+
+// GetDisposableOk returns a tuple with the Disposable field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetDisposableOk() (*bool, bool) {
+	if o == nil || IsNil(o.Disposable) {
+		return nil, false
+	}
+	return o.Disposable, true
+}
+
+// HasDisposable returns a boolean if a field has been set.
+func (o *ValidationResponse) HasDisposable() bool {
+	if o != nil && !IsNil(o.Disposable) {
+		return true
+	}
+
+	return false
+}
+
+// SetDisposable gets a reference to the given bool and assigns it to the Disposable field.
+func (o *ValidationResponse) SetDisposable(v bool) {
+	o.Disposable = &v
+}
+
+// GetRoleBased returns the RoleBased field value if set, zero value otherwise.
+func (o *ValidationResponse) GetRoleBased() bool {
+	if o == nil || IsNil(o.RoleBased) {
+		var ret bool
+		return ret
+	}
+	return *o.RoleBased
+}
+
+// GetRoleBasedOk returns a tuple with the RoleBased field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetRoleBasedOk() (*bool, bool) {
+	if o == nil || IsNil(o.RoleBased) {
+		return nil, false
+	}
+	return o.RoleBased, true
+}
+
+// HasRoleBased returns a boolean if a field has been set.
+func (o *ValidationResponse) HasRoleBased() bool {
+	if o != nil && !IsNil(o.RoleBased) {
+		return true
+	}
+
+	return false
+}
+
+// SetRoleBased gets a reference to the given bool and assigns it to the RoleBased field.
+func (o *ValidationResponse) SetRoleBased(v bool) {
+	o.RoleBased = &v
+}
+
+// GetReason returns the Reason field value if set, zero value otherwise.
+func (o *ValidationResponse) GetReason() string {
+	if o == nil || IsNil(o.Reason) {
+		var ret string
+		return ret
+	}
+	return *o.Reason
+}
+
+// GetReasonOk returns a tuple with the Reason field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetReasonOk() (*string, bool) {
+	if o == nil || IsNil(o.Reason) {
+		return nil, false
+	}
+	return o.Reason, true
+}
+
+// HasReason returns a boolean if a field has been set.
+func (o *ValidationResponse) HasReason() bool {
+	if o != nil && !IsNil(o.Reason) {
+		return true
+	}
+
+	return false
+}
+
+// SetReason gets a reference to the given string and assigns it to the Reason field.
+func (o *ValidationResponse) SetReason(v string) {
+	o.Reason = &v
+}
+
+// GetDetailedReasons returns the DetailedReasons field value if set, zero value otherwise.
+func (o *ValidationResponse) GetDetailedReasons() string {
+	if o == nil || IsNil(o.DetailedReasons) {
+		var ret string
+		return ret
+	}
+	return *o.DetailedReasons
+}
+
+// GetDetailedReasonsOk returns a tuple with the DetailedReasons field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetDetailedReasonsOk() (*string, bool) {
+	if o == nil || IsNil(o.DetailedReasons) {
+		return nil, false
+	}
+	return o.DetailedReasons, true
+}
+
+// HasDetailedReasons returns a boolean if a field has been set.
+func (o *ValidationResponse) HasDetailedReasons() bool {
+	if o != nil && !IsNil(o.DetailedReasons) {
+		return true
+	}
+
+	return false
+}
+
+// SetDetailedReasons gets a reference to the given string and assigns it to the DetailedReasons field.
+func (o *ValidationResponse) SetDetailedReasons(v string) {
+	o.DetailedReasons = &v
+}
+
+// GetRisk returns the Risk field value if set, zero value otherwise.
+func (o *ValidationResponse) GetRisk() string {
+	if o == nil || IsNil(o.Risk) {
+		var ret string
+		return ret
+	}
+	return *o.Risk
+}
+
+// GetRiskOk returns a tuple with the Risk field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationResponse) GetRiskOk() (*string, bool) {
+	if o == nil || IsNil(o.Risk) {
+		return nil, false
+	}
+	return o.Risk, true
+}
+
+// HasRisk returns a boolean if a field has been set.
+func (o *ValidationResponse) HasRisk() bool {
+	if o != nil && !IsNil(o.Risk) {
+		return true
+	}
+
+	return false
+}
+
+// SetRisk gets a reference to the given string and assigns it to the Risk field.
+func (o *ValidationResponse) SetRisk(v string) {
+	o.Risk = &v
+}
+
+func (o ValidationResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ValidationResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.ValidMailbox) {
+		toSerialize["validMailbox"] = o.ValidMailbox
+	}
+	if !IsNil(o.ValidSyntax) {
+		toSerialize["validSyntax"] = o.ValidSyntax
+	}
+	if !IsNil(o.CatchAll) {
+		toSerialize["catchAll"] = o.CatchAll
+	}
+	if !IsNil(o.DidYouMean) {
+		toSerialize["didYouMean"] = o.DidYouMean
+	}
+	if !IsNil(o.Disposable) {
+		toSerialize["disposable"] = o.Disposable
+	}
+	if !IsNil(o.RoleBased) {
+		toSerialize["roleBased"] = o.RoleBased
+	}
+	if !IsNil(o.Reason) {
+		toSerialize["reason"] = o.Reason
+	}
+	if !IsNil(o.DetailedReasons) {
+		toSerialize["detailedReasons"] = o.DetailedReasons
+	}
+	if !IsNil(o.Risk) {
+		toSerialize["risk"] = o.Risk
+	}
+	return toSerialize, nil
+}
+
+type NullableValidationResponse struct {
+	value *ValidationResponse
+	isSet bool
+}
+
+func (v NullableValidationResponse) Get() *ValidationResponse {
+	return v.value
+}
+
+func (v *NullableValidationResponse) Set(val *ValidationResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableValidationResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableValidationResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableValidationResponse(val *ValidationResponse) *NullableValidationResponse {
+	return &NullableValidationResponse{value: val, isSet: true}
+}
+
+func (v NullableValidationResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableValidationResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/api_error.go b/pkg/infobip/models/messagesapi/api_error.go
index 86a77b7..48c3700 100644
--- a/pkg/infobip/models/messagesapi/api_error.go
+++ b/pkg/infobip/models/messagesapi/api_error.go
@@ -39,6 +39,7 @@ type _ApiError ApiError
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiError(errorCode string, description string, action string, violations []ApiErrorViolation, resources []ApiErrorResource) *ApiError {
 	this := ApiError{}
 	this.ErrorCode = errorCode
@@ -54,6 +55,7 @@ func NewApiError(errorCode string, description string, action string, violations
 // but it doesn't guarantee that properties required by API are set
 func NewApiErrorWithDefaults() *ApiError {
 	this := ApiError{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/api_error_resource.go b/pkg/infobip/models/messagesapi/api_error_resource.go
index 1833ef7..3f08cc1 100644
--- a/pkg/infobip/models/messagesapi/api_error_resource.go
+++ b/pkg/infobip/models/messagesapi/api_error_resource.go
@@ -31,6 +31,7 @@ type ApiErrorResource struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiErrorResource() *ApiErrorResource {
 	this := ApiErrorResource{}
 	return &this
@@ -41,6 +42,7 @@ func NewApiErrorResource() *ApiErrorResource {
 // but it doesn't guarantee that properties required by API are set
 func NewApiErrorResourceWithDefaults() *ApiErrorResource {
 	this := ApiErrorResource{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/api_error_violation.go b/pkg/infobip/models/messagesapi/api_error_violation.go
index 20b411f..f32f3bb 100644
--- a/pkg/infobip/models/messagesapi/api_error_violation.go
+++ b/pkg/infobip/models/messagesapi/api_error_violation.go
@@ -31,6 +31,7 @@ type ApiErrorViolation struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiErrorViolation() *ApiErrorViolation {
 	this := ApiErrorViolation{}
 	return &this
@@ -41,6 +42,7 @@ func NewApiErrorViolation() *ApiErrorViolation {
 // but it doesn't guarantee that properties required by API are set
 func NewApiErrorViolationWithDefaults() *ApiErrorViolation {
 	this := ApiErrorViolation{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/base_failover.go b/pkg/infobip/models/messagesapi/base_failover.go
index 3cb47ee..43b0e64 100644
--- a/pkg/infobip/models/messagesapi/base_failover.go
+++ b/pkg/infobip/models/messagesapi/base_failover.go
@@ -14,8 +14,9 @@ import (
 	"encoding/json"
 	"fmt"
 
-	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 	"gopkg.in/validator.v2"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
 // BaseFailover - Provides options for configuring a message failover. When message fails it will be sent over channels in order specified in an array. Make sure to provide correct sender and destinations specified as `Channels Destination` for each channel.
diff --git a/pkg/infobip/models/messagesapi/carousel_template_open_url_button.go b/pkg/infobip/models/messagesapi/carousel_template_open_url_button.go
index bd78679..fbcaa3f 100644
--- a/pkg/infobip/models/messagesapi/carousel_template_open_url_button.go
+++ b/pkg/infobip/models/messagesapi/carousel_template_open_url_button.go
@@ -34,7 +34,7 @@ type _CarouselTemplateOpenUrlButton CarouselTemplateOpenUrlButton
 // will change when the set of required properties is changed
 func NewCarouselTemplateOpenUrlButton(suffix string) *CarouselTemplateOpenUrlButton {
 	this := CarouselTemplateOpenUrlButton{}
-	this.Type = CAROUSELTEMPLATEBUTTONTYPE_OPEN_URL
+	this.Type = "OPEN_URL"
 	this.Suffix = suffix
 	return &this
 }
@@ -44,6 +44,7 @@ func NewCarouselTemplateOpenUrlButton(suffix string) *CarouselTemplateOpenUrlBut
 // but it doesn't guarantee that properties required by API are set
 func NewCarouselTemplateOpenUrlButtonWithDefaults() *CarouselTemplateOpenUrlButton {
 	this := CarouselTemplateOpenUrlButton{}
+	this.Type = "OPEN_URL"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/carousel_template_phone_number_button.go b/pkg/infobip/models/messagesapi/carousel_template_phone_number_button.go
index 5bc182f..9c5670d 100644
--- a/pkg/infobip/models/messagesapi/carousel_template_phone_number_button.go
+++ b/pkg/infobip/models/messagesapi/carousel_template_phone_number_button.go
@@ -32,7 +32,7 @@ type _CarouselTemplatePhoneNumberButton CarouselTemplatePhoneNumberButton
 // will change when the set of required properties is changed
 func NewCarouselTemplatePhoneNumberButton() *CarouselTemplatePhoneNumberButton {
 	this := CarouselTemplatePhoneNumberButton{}
-	this.Type = CAROUSELTEMPLATEBUTTONTYPE_PHONE_NUMBER
+	this.Type = "PHONE_NUMBER"
 	return &this
 }
 
@@ -41,6 +41,7 @@ func NewCarouselTemplatePhoneNumberButton() *CarouselTemplatePhoneNumberButton {
 // but it doesn't guarantee that properties required by API are set
 func NewCarouselTemplatePhoneNumberButtonWithDefaults() *CarouselTemplatePhoneNumberButton {
 	this := CarouselTemplatePhoneNumberButton{}
+	this.Type = "PHONE_NUMBER"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/carousel_template_quick_reply_button.go b/pkg/infobip/models/messagesapi/carousel_template_quick_reply_button.go
index 823b3af..4b85741 100644
--- a/pkg/infobip/models/messagesapi/carousel_template_quick_reply_button.go
+++ b/pkg/infobip/models/messagesapi/carousel_template_quick_reply_button.go
@@ -34,7 +34,7 @@ type _CarouselTemplateQuickReplyButton CarouselTemplateQuickReplyButton
 // will change when the set of required properties is changed
 func NewCarouselTemplateQuickReplyButton(postbackData string) *CarouselTemplateQuickReplyButton {
 	this := CarouselTemplateQuickReplyButton{}
-	this.Type = CAROUSELTEMPLATEBUTTONTYPE_QUICK_REPLY
+	this.Type = "QUICK_REPLY"
 	this.PostbackData = postbackData
 	return &this
 }
@@ -44,6 +44,7 @@ func NewCarouselTemplateQuickReplyButton(postbackData string) *CarouselTemplateQ
 // but it doesn't guarantee that properties required by API are set
 func NewCarouselTemplateQuickReplyButtonWithDefaults() *CarouselTemplateQuickReplyButton {
 	this := CarouselTemplateQuickReplyButton{}
+	this.Type = "QUICK_REPLY"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/channel_destination.go b/pkg/infobip/models/messagesapi/channel_destination.go
index 0a6630c..02f9a1c 100644
--- a/pkg/infobip/models/messagesapi/channel_destination.go
+++ b/pkg/infobip/models/messagesapi/channel_destination.go
@@ -34,6 +34,7 @@ type _ChannelDestination ChannelDestination
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewChannelDestination(channel OutboundMessageChannel, to string) *ChannelDestination {
 	this := ChannelDestination{}
 	this.Channel = channel
@@ -46,6 +47,7 @@ func NewChannelDestination(channel OutboundMessageChannel, to string) *ChannelDe
 // but it doesn't guarantee that properties required by API are set
 func NewChannelDestinationWithDefaults() *ChannelDestination {
 	this := ChannelDestination{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/channels_destination.go b/pkg/infobip/models/messagesapi/channels_destination.go
index 029719a..0b75704 100644
--- a/pkg/infobip/models/messagesapi/channels_destination.go
+++ b/pkg/infobip/models/messagesapi/channels_destination.go
@@ -31,6 +31,7 @@ type _ChannelsDestination ChannelsDestination
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewChannelsDestination(byChannel []ChannelDestination) *ChannelsDestination {
 	this := ChannelsDestination{}
 	this.ByChannel = byChannel
@@ -42,6 +43,7 @@ func NewChannelsDestination(byChannel []ChannelDestination) *ChannelsDestination
 // but it doesn't guarantee that properties required by API are set
 func NewChannelsDestinationWithDefaults() *ChannelsDestination {
 	this := ChannelsDestination{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/default_message_request_options.go b/pkg/infobip/models/messagesapi/default_message_request_options.go
index a720f06..3d42823 100644
--- a/pkg/infobip/models/messagesapi/default_message_request_options.go
+++ b/pkg/infobip/models/messagesapi/default_message_request_options.go
@@ -29,6 +29,7 @@ type DefaultMessageRequestOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDefaultMessageRequestOptions() *DefaultMessageRequestOptions {
 	this := DefaultMessageRequestOptions{}
 	return &this
@@ -39,6 +40,7 @@ func NewDefaultMessageRequestOptions() *DefaultMessageRequestOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewDefaultMessageRequestOptionsWithDefaults() *DefaultMessageRequestOptions {
 	this := DefaultMessageRequestOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/delivery_error.go b/pkg/infobip/models/messagesapi/delivery_error.go
index 46ff73b..874da44 100644
--- a/pkg/infobip/models/messagesapi/delivery_error.go
+++ b/pkg/infobip/models/messagesapi/delivery_error.go
@@ -41,6 +41,7 @@ type _DeliveryError DeliveryError
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryError(id int32) *DeliveryError {
 	this := DeliveryError{}
 	this.Id = id
@@ -52,6 +53,7 @@ func NewDeliveryError(id int32) *DeliveryError {
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryErrorWithDefaults() *DeliveryError {
 	this := DeliveryError{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/delivery_report.go b/pkg/infobip/models/messagesapi/delivery_report.go
index b511b02..b1e4dbc 100644
--- a/pkg/infobip/models/messagesapi/delivery_report.go
+++ b/pkg/infobip/models/messagesapi/delivery_report.go
@@ -31,6 +31,7 @@ type _DeliveryReport DeliveryReport
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryReport(results []DeliveryResult) *DeliveryReport {
 	this := DeliveryReport{}
 	this.Results = results
@@ -42,6 +43,7 @@ func NewDeliveryReport(results []DeliveryResult) *DeliveryReport {
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryReportWithDefaults() *DeliveryReport {
 	this := DeliveryReport{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/delivery_result.go b/pkg/infobip/models/messagesapi/delivery_result.go
index dec67ab..9b8fc1c 100644
--- a/pkg/infobip/models/messagesapi/delivery_result.go
+++ b/pkg/infobip/models/messagesapi/delivery_result.go
@@ -59,6 +59,7 @@ type _DeliveryResult DeliveryResult
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryResult(event string, channel InboundDlrChannel, sender string, destination string, sentAt string, doneAt string, bulkId string, messageId string, messageCount int32, status DeliveryStatus, error_ DeliveryError) *DeliveryResult {
 	this := DeliveryResult{}
 	this.Event = event
@@ -80,6 +81,7 @@ func NewDeliveryResult(event string, channel InboundDlrChannel, sender string, d
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryResultWithDefaults() *DeliveryResult {
 	this := DeliveryResult{}
+
 	var event string = "DELIVERY"
 	this.Event = event
 	return &this
diff --git a/pkg/infobip/models/messagesapi/delivery_status.go b/pkg/infobip/models/messagesapi/delivery_status.go
index 318485b..8397984 100644
--- a/pkg/infobip/models/messagesapi/delivery_status.go
+++ b/pkg/infobip/models/messagesapi/delivery_status.go
@@ -39,6 +39,7 @@ type _DeliveryStatus DeliveryStatus
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryStatus(groupId int32, groupName string, id int32, name string, description string) *DeliveryStatus {
 	this := DeliveryStatus{}
 	this.GroupId = groupId
@@ -54,6 +55,7 @@ func NewDeliveryStatus(groupId int32, groupName string, id int32, name string, d
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryStatusWithDefaults() *DeliveryStatus {
 	this := DeliveryStatus{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/event_options.go b/pkg/infobip/models/messagesapi/event_options.go
index fb5905a..6ad6546 100644
--- a/pkg/infobip/models/messagesapi/event_options.go
+++ b/pkg/infobip/models/messagesapi/event_options.go
@@ -29,6 +29,7 @@ type EventOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewEventOptions() *EventOptions {
 	this := EventOptions{}
 	return &this
@@ -39,6 +40,7 @@ func NewEventOptions() *EventOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewEventOptionsWithDefaults() *EventOptions {
 	this := EventOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/event_request.go b/pkg/infobip/models/messagesapi/event_request.go
index dd43032..ff1a3d0 100644
--- a/pkg/infobip/models/messagesapi/event_request.go
+++ b/pkg/infobip/models/messagesapi/event_request.go
@@ -31,6 +31,7 @@ type _EventRequest EventRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewEventRequest(events []OutboundEvent) *EventRequest {
 	this := EventRequest{}
 	this.Events = events
@@ -42,6 +43,7 @@ func NewEventRequest(events []OutboundEvent) *EventRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewEventRequestWithDefaults() *EventRequest {
 	this := EventRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/failover.go b/pkg/infobip/models/messagesapi/failover.go
index 2951514..245f3d8 100644
--- a/pkg/infobip/models/messagesapi/failover.go
+++ b/pkg/infobip/models/messagesapi/failover.go
@@ -34,6 +34,7 @@ type _Failover Failover
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewFailover(channel OutboundMessageChannel, sender string) *Failover {
 	this := Failover{}
 	this.Channel = channel
@@ -46,6 +47,7 @@ func NewFailover(channel OutboundMessageChannel, sender string) *Failover {
 // but it doesn't guarantee that properties required by API are set
 func NewFailoverWithDefaults() *Failover {
 	this := Failover{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/inbound_typing_started_event.go b/pkg/infobip/models/messagesapi/inbound_typing_started_event.go
index f25de47..f36d738 100644
--- a/pkg/infobip/models/messagesapi/inbound_typing_started_event.go
+++ b/pkg/infobip/models/messagesapi/inbound_typing_started_event.go
@@ -21,7 +21,7 @@ var _ MappedNullable = &InboundTypingStartedEvent{}
 
 // InboundTypingStartedEvent struct for InboundTypingStartedEvent
 type InboundTypingStartedEvent struct {
-	Event InboundEventType
+	Event   InboundEventType
 	Channel InboundTypingIndicatorChannel
 	// Identifier (usually number) of the party which sent the message.
 	Sender string
@@ -46,7 +46,7 @@ type _InboundTypingStartedEvent InboundTypingStartedEvent
 // will change when the set of required properties is changed
 func NewInboundTypingStartedEvent(channel InboundTypingIndicatorChannel, sender string, destination string, receivedAt Time, messageId string) *InboundTypingStartedEvent {
 	this := InboundTypingStartedEvent{}
-	this.Event = INBOUNDEVENTTYPE_TYPING_STARTED
+	this.Event = "TYPING_STARTED"
 	this.Channel = channel
 	this.Sender = sender
 	this.Destination = destination
@@ -60,6 +60,7 @@ func NewInboundTypingStartedEvent(channel InboundTypingIndicatorChannel, sender
 // but it doesn't guarantee that properties required by API are set
 func NewInboundTypingStartedEventWithDefaults() *InboundTypingStartedEvent {
 	this := InboundTypingStartedEvent{}
+	this.Event = "TYPING_STARTED"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/inbound_typing_stopped_event.go b/pkg/infobip/models/messagesapi/inbound_typing_stopped_event.go
index 290b180..b013d06 100644
--- a/pkg/infobip/models/messagesapi/inbound_typing_stopped_event.go
+++ b/pkg/infobip/models/messagesapi/inbound_typing_stopped_event.go
@@ -21,7 +21,7 @@ var _ MappedNullable = &InboundTypingStoppedEvent{}
 
 // InboundTypingStoppedEvent struct for InboundTypingStoppedEvent
 type InboundTypingStoppedEvent struct {
-	Event InboundEventType
+	Event   InboundEventType
 	Channel InboundTypingIndicatorChannel
 	// Identifier (usually number) of the party which sent the message.
 	Sender string
@@ -46,7 +46,7 @@ type _InboundTypingStoppedEvent InboundTypingStoppedEvent
 // will change when the set of required properties is changed
 func NewInboundTypingStoppedEvent(channel InboundTypingIndicatorChannel, sender string, destination string, receivedAt Time, messageId string) *InboundTypingStoppedEvent {
 	this := InboundTypingStoppedEvent{}
-	this.Event = INBOUNDEVENTTYPE_TYPING_STOPPED
+	this.Event = "TYPING_STOPPED"
 	this.Channel = channel
 	this.Sender = sender
 	this.Destination = destination
@@ -60,6 +60,7 @@ func NewInboundTypingStoppedEvent(channel InboundTypingIndicatorChannel, sender
 // but it doesn't guarantee that properties required by API are set
 func NewInboundTypingStoppedEventWithDefaults() *InboundTypingStoppedEvent {
 	this := InboundTypingStoppedEvent{}
+	this.Event = "TYPING_STOPPED"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/incoming_message.go b/pkg/infobip/models/messagesapi/incoming_message.go
index 4a51535..f007a70 100644
--- a/pkg/infobip/models/messagesapi/incoming_message.go
+++ b/pkg/infobip/models/messagesapi/incoming_message.go
@@ -31,6 +31,7 @@ type _IncomingMessage IncomingMessage
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewIncomingMessage(results []InboundEvent) *IncomingMessage {
 	this := IncomingMessage{}
 	this.Results = results
@@ -42,6 +43,7 @@ func NewIncomingMessage(results []InboundEvent) *IncomingMessage {
 // but it doesn't guarantee that properties required by API are set
 func NewIncomingMessageWithDefaults() *IncomingMessage {
 	this := IncomingMessage{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/india_dlt_options.go b/pkg/infobip/models/messagesapi/india_dlt_options.go
index a869b25..7fb462c 100644
--- a/pkg/infobip/models/messagesapi/india_dlt_options.go
+++ b/pkg/infobip/models/messagesapi/india_dlt_options.go
@@ -25,6 +25,8 @@ type IndiaDltOptions struct {
 	ContentTemplateId *string
 	// Your assigned DLT principal entity ID.
 	PrincipalEntityId string
+	// Your assigned Telemarketer ID. (required for Aggregators)
+	TelemarketerId *string
 }
 
 type _IndiaDltOptions IndiaDltOptions
@@ -33,6 +35,7 @@ type _IndiaDltOptions IndiaDltOptions
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewIndiaDltOptions(principalEntityId string) *IndiaDltOptions {
 	this := IndiaDltOptions{}
 	this.PrincipalEntityId = principalEntityId
@@ -44,6 +47,7 @@ func NewIndiaDltOptions(principalEntityId string) *IndiaDltOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewIndiaDltOptionsWithDefaults() *IndiaDltOptions {
 	this := IndiaDltOptions{}
+
 	return &this
 }
 
@@ -103,6 +107,38 @@ func (o *IndiaDltOptions) SetPrincipalEntityId(v string) {
 	o.PrincipalEntityId = v
 }
 
+// GetTelemarketerId returns the TelemarketerId field value if set, zero value otherwise.
+func (o *IndiaDltOptions) GetTelemarketerId() string {
+	if o == nil || IsNil(o.TelemarketerId) {
+		var ret string
+		return ret
+	}
+	return *o.TelemarketerId
+}
+
+// GetTelemarketerIdOk returns a tuple with the TelemarketerId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IndiaDltOptions) GetTelemarketerIdOk() (*string, bool) {
+	if o == nil || IsNil(o.TelemarketerId) {
+		return nil, false
+	}
+	return o.TelemarketerId, true
+}
+
+// HasTelemarketerId returns a boolean if a field has been set.
+func (o *IndiaDltOptions) HasTelemarketerId() bool {
+	if o != nil && !IsNil(o.TelemarketerId) {
+		return true
+	}
+
+	return false
+}
+
+// SetTelemarketerId gets a reference to the given string and assigns it to the TelemarketerId field.
+func (o *IndiaDltOptions) SetTelemarketerId(v string) {
+	o.TelemarketerId = &v
+}
+
 func (o IndiaDltOptions) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
@@ -117,6 +153,9 @@ func (o IndiaDltOptions) ToMap() (map[string]interface{}, error) {
 		toSerialize["contentTemplateId"] = o.ContentTemplateId
 	}
 	toSerialize["principalEntityId"] = o.PrincipalEntityId
+	if !IsNil(o.TelemarketerId) {
+		toSerialize["telemarketerId"] = o.TelemarketerId
+	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/messagesapi/message.go b/pkg/infobip/models/messagesapi/message.go
index dca3c3c..63ce4d9 100644
--- a/pkg/infobip/models/messagesapi/message.go
+++ b/pkg/infobip/models/messagesapi/message.go
@@ -39,6 +39,7 @@ type _Message Message
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessage(channel OutboundMessageChannel, sender string, destinations []MessageDestination, content MessageContent) *Message {
 	this := Message{}
 	this.Channel = channel
@@ -53,6 +54,7 @@ func NewMessage(channel OutboundMessageChannel, sender string, destinations []Me
 // but it doesn't guarantee that properties required by API are set
 func NewMessageWithDefaults() *Message {
 	this := Message{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_add_calendar_event_button.go b/pkg/infobip/models/messagesapi/message_add_calendar_event_button.go
new file mode 100644
index 0000000..37208e2
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_add_calendar_event_button.go
@@ -0,0 +1,273 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageAddCalendarEventButton type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageAddCalendarEventButton{}
+
+// MessageAddCalendarEventButton struct for MessageAddCalendarEventButton
+type MessageAddCalendarEventButton struct {
+	Type MessageButtonType
+	// Text to be displayed on the button.
+	Text string
+	// Custom data that will be sent to you when user reply to a message.
+	PostbackData string
+	// Event start time. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	StartTime Time
+	// Event end time. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	EndTime Time
+	// Event title.
+	Title string
+	// Event description.
+	Description *string
+}
+
+type _MessageAddCalendarEventButton MessageAddCalendarEventButton
+
+// NewMessageAddCalendarEventButton instantiates a new MessageAddCalendarEventButton object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewMessageAddCalendarEventButton(text string, postbackData string, startTime Time, endTime Time, title string) *MessageAddCalendarEventButton {
+	this := MessageAddCalendarEventButton{}
+	this.Type = "ADD_CALENDAR_EVENT"
+	this.Text = text
+	this.PostbackData = postbackData
+	this.StartTime = startTime
+	this.EndTime = endTime
+	this.Title = title
+	return &this
+}
+
+// NewMessageAddCalendarEventButtonWithDefaults instantiates a new MessageAddCalendarEventButton object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageAddCalendarEventButtonWithDefaults() *MessageAddCalendarEventButton {
+	this := MessageAddCalendarEventButton{}
+	this.Type = "ADD_CALENDAR_EVENT"
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *MessageAddCalendarEventButton) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *MessageAddCalendarEventButton) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *MessageAddCalendarEventButton) SetText(v string) {
+	o.Text = v
+}
+
+// GetPostbackData returns the PostbackData field value
+func (o *MessageAddCalendarEventButton) GetPostbackData() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PostbackData
+}
+
+// GetPostbackDataOk returns a tuple with the PostbackData field value
+// and a boolean to check if the value has been set.
+func (o *MessageAddCalendarEventButton) GetPostbackDataOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PostbackData, true
+}
+
+// SetPostbackData sets field value
+func (o *MessageAddCalendarEventButton) SetPostbackData(v string) {
+	o.PostbackData = v
+}
+
+// GetStartTime returns the StartTime field value
+func (o *MessageAddCalendarEventButton) GetStartTime() Time {
+	if o == nil {
+		var ret Time
+		return ret
+	}
+
+	return o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value
+// and a boolean to check if the value has been set.
+func (o *MessageAddCalendarEventButton) GetStartTimeOk() (*Time, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.StartTime, true
+}
+
+// SetStartTime sets field value
+func (o *MessageAddCalendarEventButton) SetStartTime(v Time) {
+	o.StartTime = v
+}
+
+// GetEndTime returns the EndTime field value
+func (o *MessageAddCalendarEventButton) GetEndTime() Time {
+	if o == nil {
+		var ret Time
+		return ret
+	}
+
+	return o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value
+// and a boolean to check if the value has been set.
+func (o *MessageAddCalendarEventButton) GetEndTimeOk() (*Time, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.EndTime, true
+}
+
+// SetEndTime sets field value
+func (o *MessageAddCalendarEventButton) SetEndTime(v Time) {
+	o.EndTime = v
+}
+
+// GetTitle returns the Title field value
+func (o *MessageAddCalendarEventButton) GetTitle() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Title
+}
+
+// GetTitleOk returns a tuple with the Title field value
+// and a boolean to check if the value has been set.
+func (o *MessageAddCalendarEventButton) GetTitleOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Title, true
+}
+
+// SetTitle sets field value
+func (o *MessageAddCalendarEventButton) SetTitle(v string) {
+	o.Title = v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *MessageAddCalendarEventButton) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageAddCalendarEventButton) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *MessageAddCalendarEventButton) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *MessageAddCalendarEventButton) SetDescription(v string) {
+	o.Description = &v
+}
+
+func (o MessageAddCalendarEventButton) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageAddCalendarEventButton) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["text"] = o.Text
+	toSerialize["postbackData"] = o.PostbackData
+	toSerialize["startTime"] = o.StartTime
+	toSerialize["endTime"] = o.EndTime
+	toSerialize["title"] = o.Title
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	return toSerialize, nil
+}
+
+type NullableMessageAddCalendarEventButton struct {
+	value *MessageAddCalendarEventButton
+	isSet bool
+}
+
+func (v NullableMessageAddCalendarEventButton) Get() *MessageAddCalendarEventButton {
+	return v.value
+}
+
+func (v *NullableMessageAddCalendarEventButton) Set(val *MessageAddCalendarEventButton) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageAddCalendarEventButton) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageAddCalendarEventButton) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageAddCalendarEventButton(val *MessageAddCalendarEventButton) *NullableMessageAddCalendarEventButton {
+	return &NullableMessageAddCalendarEventButton{value: val, isSet: true}
+}
+
+func (v NullableMessageAddCalendarEventButton) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageAddCalendarEventButton) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_authentication_request_body.go b/pkg/infobip/models/messagesapi/message_authentication_request_body.go
index aac5c60..80929e5 100644
--- a/pkg/infobip/models/messagesapi/message_authentication_request_body.go
+++ b/pkg/infobip/models/messagesapi/message_authentication_request_body.go
@@ -38,7 +38,7 @@ type _MessageAuthenticationRequestBody MessageAuthenticationRequestBody
 // will change when the set of required properties is changed
 func NewMessageAuthenticationRequestBody(text string) *MessageAuthenticationRequestBody {
 	this := MessageAuthenticationRequestBody{}
-	this.Type = MESSAGEBODYTYPE_AUTHENTICATION_REQUEST
+	this.Type = "AUTHENTICATION_REQUEST"
 	this.Text = text
 	return &this
 }
@@ -48,6 +48,7 @@ func NewMessageAuthenticationRequestBody(text string) *MessageAuthenticationRequ
 // but it doesn't guarantee that properties required by API are set
 func NewMessageAuthenticationRequestBodyWithDefaults() *MessageAuthenticationRequestBody {
 	this := MessageAuthenticationRequestBody{}
+	this.Type = "AUTHENTICATION_REQUEST"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_body.go b/pkg/infobip/models/messagesapi/message_body.go
index a6927a6..e597a99 100644
--- a/pkg/infobip/models/messagesapi/message_body.go
+++ b/pkg/infobip/models/messagesapi/message_body.go
@@ -19,10 +19,13 @@ import (
 type MessageBody struct {
 	MessageAuthenticationRequestBody *MessageAuthenticationRequestBody
 	MessageCarouselBody              *MessageCarouselBody
+	MessageContactBody               *MessageContactBody
 	MessageDocumentBody              *MessageDocumentBody
 	MessageImageBody                 *MessageImageBody
 	MessageListBody                  *MessageListBody
+	MessageLocationBody              *MessageLocationBody
 	MessageRichLinkBody              *MessageRichLinkBody
+	MessageStickerBody               *MessageStickerBody
 	MessageTextBody                  *MessageTextBody
 	MessageVideoBody                 *MessageVideoBody
 }
@@ -41,6 +44,13 @@ func MessageCarouselBodyAsMessageBody(v *MessageCarouselBody) MessageBody {
 	}
 }
 
+// MessageContactBodyAsMessageBody is a convenience function that returns MessageContactBody wrapped in MessageBody
+func MessageContactBodyAsMessageBody(v *MessageContactBody) MessageBody {
+	return MessageBody{
+		MessageContactBody: v,
+	}
+}
+
 // MessageDocumentBodyAsMessageBody is a convenience function that returns MessageDocumentBody wrapped in MessageBody
 func MessageDocumentBodyAsMessageBody(v *MessageDocumentBody) MessageBody {
 	return MessageBody{
@@ -62,6 +72,13 @@ func MessageListBodyAsMessageBody(v *MessageListBody) MessageBody {
 	}
 }
 
+// MessageLocationBodyAsMessageBody is a convenience function that returns MessageLocationBody wrapped in MessageBody
+func MessageLocationBodyAsMessageBody(v *MessageLocationBody) MessageBody {
+	return MessageBody{
+		MessageLocationBody: v,
+	}
+}
+
 // MessageRichLinkBodyAsMessageBody is a convenience function that returns MessageRichLinkBody wrapped in MessageBody
 func MessageRichLinkBodyAsMessageBody(v *MessageRichLinkBody) MessageBody {
 	return MessageBody{
@@ -69,6 +86,13 @@ func MessageRichLinkBodyAsMessageBody(v *MessageRichLinkBody) MessageBody {
 	}
 }
 
+// MessageStickerBodyAsMessageBody is a convenience function that returns MessageStickerBody wrapped in MessageBody
+func MessageStickerBodyAsMessageBody(v *MessageStickerBody) MessageBody {
+	return MessageBody{
+		MessageStickerBody: v,
+	}
+}
+
 // MessageTextBodyAsMessageBody is a convenience function that returns MessageTextBody wrapped in MessageBody
 func MessageTextBodyAsMessageBody(v *MessageTextBody) MessageBody {
 	return MessageBody{
@@ -122,6 +146,21 @@ func (dst *MessageBody) UnmarshalJSON(data []byte) error {
 			dst.MessageCarouselBody = nil
 		}
 	}
+	// check if the discriminator value is 'CONTACT'
+	if jsonDict["type"] == "CONTACT" {
+		// try to unmarshal JSON data into MessageContactBody
+		err = json.Unmarshal(data, &dst.MessageContactBody)
+		if err == nil {
+			jsonMessageContactBody, _ := json.Marshal(dst.MessageContactBody)
+			if string(jsonMessageContactBody) == "{}" { // empty struct
+				dst.MessageContactBody = nil
+			} else {
+				return nil // data stored in dst.MessageContactBody, return on the first match
+			}
+		} else {
+			dst.MessageContactBody = nil
+		}
+	}
 	// check if the discriminator value is 'DOCUMENT'
 	if jsonDict["type"] == "DOCUMENT" {
 		// try to unmarshal JSON data into MessageDocumentBody
@@ -167,6 +206,21 @@ func (dst *MessageBody) UnmarshalJSON(data []byte) error {
 			dst.MessageListBody = nil
 		}
 	}
+	// check if the discriminator value is 'LOCATION'
+	if jsonDict["type"] == "LOCATION" {
+		// try to unmarshal JSON data into MessageLocationBody
+		err = json.Unmarshal(data, &dst.MessageLocationBody)
+		if err == nil {
+			jsonMessageLocationBody, _ := json.Marshal(dst.MessageLocationBody)
+			if string(jsonMessageLocationBody) == "{}" { // empty struct
+				dst.MessageLocationBody = nil
+			} else {
+				return nil // data stored in dst.MessageLocationBody, return on the first match
+			}
+		} else {
+			dst.MessageLocationBody = nil
+		}
+	}
 	// check if the discriminator value is 'RICH_LINK'
 	if jsonDict["type"] == "RICH_LINK" {
 		// try to unmarshal JSON data into MessageRichLinkBody
@@ -182,6 +236,21 @@ func (dst *MessageBody) UnmarshalJSON(data []byte) error {
 			dst.MessageRichLinkBody = nil
 		}
 	}
+	// check if the discriminator value is 'STICKER'
+	if jsonDict["type"] == "STICKER" {
+		// try to unmarshal JSON data into MessageStickerBody
+		err = json.Unmarshal(data, &dst.MessageStickerBody)
+		if err == nil {
+			jsonMessageStickerBody, _ := json.Marshal(dst.MessageStickerBody)
+			if string(jsonMessageStickerBody) == "{}" { // empty struct
+				dst.MessageStickerBody = nil
+			} else {
+				return nil // data stored in dst.MessageStickerBody, return on the first match
+			}
+		} else {
+			dst.MessageStickerBody = nil
+		}
+	}
 	// check if the discriminator value is 'TEXT'
 	if jsonDict["type"] == "TEXT" {
 		// try to unmarshal JSON data into MessageTextBody
@@ -223,6 +292,9 @@ func (src MessageBody) MarshalJSON() ([]byte, error) {
 	if src.MessageCarouselBody != nil {
 		return json.Marshal(&src.MessageCarouselBody)
 	}
+	if src.MessageContactBody != nil {
+		return json.Marshal(&src.MessageContactBody)
+	}
 	if src.MessageDocumentBody != nil {
 		return json.Marshal(&src.MessageDocumentBody)
 	}
@@ -232,9 +304,15 @@ func (src MessageBody) MarshalJSON() ([]byte, error) {
 	if src.MessageListBody != nil {
 		return json.Marshal(&src.MessageListBody)
 	}
+	if src.MessageLocationBody != nil {
+		return json.Marshal(&src.MessageLocationBody)
+	}
 	if src.MessageRichLinkBody != nil {
 		return json.Marshal(&src.MessageRichLinkBody)
 	}
+	if src.MessageStickerBody != nil {
+		return json.Marshal(&src.MessageStickerBody)
+	}
 	if src.MessageTextBody != nil {
 		return json.Marshal(&src.MessageTextBody)
 	}
@@ -255,6 +333,9 @@ func (obj *MessageBody) GetActualInstance() interface{} {
 	if obj.MessageCarouselBody != nil {
 		return obj.MessageCarouselBody
 	}
+	if obj.MessageContactBody != nil {
+		return obj.MessageContactBody
+	}
 	if obj.MessageDocumentBody != nil {
 		return obj.MessageDocumentBody
 	}
@@ -264,9 +345,15 @@ func (obj *MessageBody) GetActualInstance() interface{} {
 	if obj.MessageListBody != nil {
 		return obj.MessageListBody
 	}
+	if obj.MessageLocationBody != nil {
+		return obj.MessageLocationBody
+	}
 	if obj.MessageRichLinkBody != nil {
 		return obj.MessageRichLinkBody
 	}
+	if obj.MessageStickerBody != nil {
+		return obj.MessageStickerBody
+	}
 	if obj.MessageTextBody != nil {
 		return obj.MessageTextBody
 	}
diff --git a/pkg/infobip/models/messagesapi/message_body_type.go b/pkg/infobip/models/messagesapi/message_body_type.go
index 8d71353..473f1d3 100644
--- a/pkg/infobip/models/messagesapi/message_body_type.go
+++ b/pkg/infobip/models/messagesapi/message_body_type.go
@@ -28,6 +28,9 @@ const (
 	MESSAGEBODYTYPE_AUTHENTICATION_REQUEST MessageBodyType = "AUTHENTICATION_REQUEST"
 	MESSAGEBODYTYPE_LIST                   MessageBodyType = "LIST"
 	MESSAGEBODYTYPE_CAROUSEL               MessageBodyType = "CAROUSEL"
+	MESSAGEBODYTYPE_LOCATION               MessageBodyType = "LOCATION"
+	MESSAGEBODYTYPE_CONTACT                MessageBodyType = "CONTACT"
+	MESSAGEBODYTYPE_STICKER                MessageBodyType = "STICKER"
 )
 
 // All allowed values of MessageBodyType enum
@@ -40,6 +43,9 @@ var AllowedMessageBodyTypeEnumValues = []MessageBodyType{
 	"AUTHENTICATION_REQUEST",
 	"LIST",
 	"CAROUSEL",
+	"LOCATION",
+	"CONTACT",
+	"STICKER",
 }
 
 func (v *MessageBodyType) UnmarshalJSON(src []byte) error {
diff --git a/pkg/infobip/models/messagesapi/message_button.go b/pkg/infobip/models/messagesapi/message_button.go
index 39785e5..3d5da87 100644
--- a/pkg/infobip/models/messagesapi/message_button.go
+++ b/pkg/infobip/models/messagesapi/message_button.go
@@ -15,10 +15,19 @@ import (
 	"fmt"
 )
 
-// MessageButton List of buttons for the message.
+// MessageButton List of buttons of the message.
 type MessageButton struct {
-	MessageOpenUrlButton *MessageOpenUrlButton
-	MessageReplyButton   *MessageReplyButton
+	MessageAddCalendarEventButton *MessageAddCalendarEventButton
+	MessageOpenUrlButton          *MessageOpenUrlButton
+	MessageReplyButton            *MessageReplyButton
+	MessageRequestLocationButton  *MessageRequestLocationButton
+}
+
+// MessageAddCalendarEventButtonAsMessageButton is a convenience function that returns MessageAddCalendarEventButton wrapped in MessageButton
+func MessageAddCalendarEventButtonAsMessageButton(v *MessageAddCalendarEventButton) MessageButton {
+	return MessageButton{
+		MessageAddCalendarEventButton: v,
+	}
 }
 
 // MessageOpenUrlButtonAsMessageButton is a convenience function that returns MessageOpenUrlButton wrapped in MessageButton
@@ -35,6 +44,13 @@ func MessageReplyButtonAsMessageButton(v *MessageReplyButton) MessageButton {
 	}
 }
 
+// MessageRequestLocationButtonAsMessageButton is a convenience function that returns MessageRequestLocationButton wrapped in MessageButton
+func MessageRequestLocationButtonAsMessageButton(v *MessageRequestLocationButton) MessageButton {
+	return MessageButton{
+		MessageRequestLocationButton: v,
+	}
+}
+
 // Unmarshal JSON data into any of the pointers in the struct
 func (dst *MessageButton) UnmarshalJSON(data []byte) error {
 	// use discriminator value to speed up the lookup
@@ -44,6 +60,21 @@ func (dst *MessageButton) UnmarshalJSON(data []byte) error {
 		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
 	}
 
+	// check if the discriminator value is 'ADD_CALENDAR_EVENT'
+	if jsonDict["type"] == "ADD_CALENDAR_EVENT" {
+		// try to unmarshal JSON data into MessageAddCalendarEventButton
+		err = json.Unmarshal(data, &dst.MessageAddCalendarEventButton)
+		if err == nil {
+			jsonMessageAddCalendarEventButton, _ := json.Marshal(dst.MessageAddCalendarEventButton)
+			if string(jsonMessageAddCalendarEventButton) == "{}" { // empty struct
+				dst.MessageAddCalendarEventButton = nil
+			} else {
+				return nil // data stored in dst.MessageAddCalendarEventButton, return on the first match
+			}
+		} else {
+			dst.MessageAddCalendarEventButton = nil
+		}
+	}
 	// check if the discriminator value is 'OPEN_URL'
 	if jsonDict["type"] == "OPEN_URL" {
 		// try to unmarshal JSON data into MessageOpenUrlButton
@@ -74,17 +105,38 @@ func (dst *MessageButton) UnmarshalJSON(data []byte) error {
 			dst.MessageReplyButton = nil
 		}
 	}
+	// check if the discriminator value is 'REQUEST_LOCATION'
+	if jsonDict["type"] == "REQUEST_LOCATION" {
+		// try to unmarshal JSON data into MessageRequestLocationButton
+		err = json.Unmarshal(data, &dst.MessageRequestLocationButton)
+		if err == nil {
+			jsonMessageRequestLocationButton, _ := json.Marshal(dst.MessageRequestLocationButton)
+			if string(jsonMessageRequestLocationButton) == "{}" { // empty struct
+				dst.MessageRequestLocationButton = nil
+			} else {
+				return nil // data stored in dst.MessageRequestLocationButton, return on the first match
+			}
+		} else {
+			dst.MessageRequestLocationButton = nil
+		}
+	}
 	return fmt.Errorf("Data failed to match schemas in anyOf(MessageButton)")
 }
 
 // Marshal data from the first non-nil pointers in the struct to JSON
 func (src MessageButton) MarshalJSON() ([]byte, error) {
+	if src.MessageAddCalendarEventButton != nil {
+		return json.Marshal(&src.MessageAddCalendarEventButton)
+	}
 	if src.MessageOpenUrlButton != nil {
 		return json.Marshal(&src.MessageOpenUrlButton)
 	}
 	if src.MessageReplyButton != nil {
 		return json.Marshal(&src.MessageReplyButton)
 	}
+	if src.MessageRequestLocationButton != nil {
+		return json.Marshal(&src.MessageRequestLocationButton)
+	}
 	return nil, nil // no data in anyOf schemas
 }
 
@@ -93,12 +145,18 @@ func (obj *MessageButton) GetActualInstance() interface{} {
 	if obj == nil {
 		return nil
 	}
+	if obj.MessageAddCalendarEventButton != nil {
+		return obj.MessageAddCalendarEventButton
+	}
 	if obj.MessageOpenUrlButton != nil {
 		return obj.MessageOpenUrlButton
 	}
 	if obj.MessageReplyButton != nil {
 		return obj.MessageReplyButton
 	}
+	if obj.MessageRequestLocationButton != nil {
+		return obj.MessageRequestLocationButton
+	}
 	// all schemas are nil
 	return nil
 }
diff --git a/pkg/infobip/models/messagesapi/message_button_type.go b/pkg/infobip/models/messagesapi/message_button_type.go
index 36d2b5a..cf1381b 100644
--- a/pkg/infobip/models/messagesapi/message_button_type.go
+++ b/pkg/infobip/models/messagesapi/message_button_type.go
@@ -20,14 +20,18 @@ type MessageButtonType string
 
 // List of MessageButtonType
 const (
-	MESSAGEBUTTONTYPE_REPLY    MessageButtonType = "REPLY"
-	MESSAGEBUTTONTYPE_OPEN_URL MessageButtonType = "OPEN_URL"
+	MESSAGEBUTTONTYPE_REPLY              MessageButtonType = "REPLY"
+	MESSAGEBUTTONTYPE_OPEN_URL           MessageButtonType = "OPEN_URL"
+	MESSAGEBUTTONTYPE_REQUEST_LOCATION   MessageButtonType = "REQUEST_LOCATION"
+	MESSAGEBUTTONTYPE_ADD_CALENDAR_EVENT MessageButtonType = "ADD_CALENDAR_EVENT"
 )
 
 // All allowed values of MessageButtonType enum
 var AllowedMessageButtonTypeEnumValues = []MessageButtonType{
 	"REPLY",
 	"OPEN_URL",
+	"REQUEST_LOCATION",
+	"ADD_CALENDAR_EVENT",
 }
 
 func (v *MessageButtonType) UnmarshalJSON(src []byte) error {
diff --git a/pkg/infobip/models/messagesapi/message_card_options.go b/pkg/infobip/models/messagesapi/message_card_options.go
new file mode 100644
index 0000000..8a61184
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_card_options.go
@@ -0,0 +1,212 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageCardOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageCardOptions{}
+
+// MessageCardOptions Set of alignment options for the Card.
+type MessageCardOptions struct {
+	Orientation *MessageCardOptionsOrientationEnum
+	Alignment   *MessageCardOptionsAlignmentEnum
+	Height      *MessageCardOptionsHeightEnum
+}
+
+// NewMessageCardOptions instantiates a new MessageCardOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMessageCardOptions() *MessageCardOptions {
+	this := MessageCardOptions{}
+	var orientation MessageCardOptionsOrientationEnum = MESSAGECARDOPTIONSORIENTATIONENUM_VERTICAL
+	this.Orientation = &orientation
+	var alignment MessageCardOptionsAlignmentEnum = MESSAGECARDOPTIONSALIGNMENTENUM_LEFT
+	this.Alignment = &alignment
+	var height MessageCardOptionsHeightEnum = MESSAGECARDOPTIONSHEIGHTENUM_MEDIUM
+	this.Height = &height
+	return &this
+}
+
+// NewMessageCardOptionsWithDefaults instantiates a new MessageCardOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageCardOptionsWithDefaults() *MessageCardOptions {
+	this := MessageCardOptions{}
+
+	var orientation MessageCardOptionsOrientationEnum = MESSAGECARDOPTIONSORIENTATIONENUM_VERTICAL
+	this.Orientation = &orientation
+	var alignment MessageCardOptionsAlignmentEnum = MESSAGECARDOPTIONSALIGNMENTENUM_LEFT
+	this.Alignment = &alignment
+	var height MessageCardOptionsHeightEnum = MESSAGECARDOPTIONSHEIGHTENUM_MEDIUM
+	this.Height = &height
+	return &this
+}
+
+// GetOrientation returns the Orientation field value if set, zero value otherwise.
+func (o *MessageCardOptions) GetOrientation() MessageCardOptionsOrientationEnum {
+	if o == nil || IsNil(o.Orientation) {
+		var ret MessageCardOptionsOrientationEnum
+		return ret
+	}
+	return *o.Orientation
+}
+
+// GetOrientationOk returns a tuple with the Orientation field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageCardOptions) GetOrientationOk() (*MessageCardOptionsOrientationEnum, bool) {
+	if o == nil || IsNil(o.Orientation) {
+		return nil, false
+	}
+	return o.Orientation, true
+}
+
+// HasOrientation returns a boolean if a field has been set.
+func (o *MessageCardOptions) HasOrientation() bool {
+	if o != nil && !IsNil(o.Orientation) {
+		return true
+	}
+
+	return false
+}
+
+// SetOrientation gets a reference to the given MessageCardOptionsOrientationEnum and assigns it to the Orientation field.
+func (o *MessageCardOptions) SetOrientation(v MessageCardOptionsOrientationEnum) {
+	o.Orientation = &v
+}
+
+// GetAlignment returns the Alignment field value if set, zero value otherwise.
+func (o *MessageCardOptions) GetAlignment() MessageCardOptionsAlignmentEnum {
+	if o == nil || IsNil(o.Alignment) {
+		var ret MessageCardOptionsAlignmentEnum
+		return ret
+	}
+	return *o.Alignment
+}
+
+// GetAlignmentOk returns a tuple with the Alignment field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageCardOptions) GetAlignmentOk() (*MessageCardOptionsAlignmentEnum, bool) {
+	if o == nil || IsNil(o.Alignment) {
+		return nil, false
+	}
+	return o.Alignment, true
+}
+
+// HasAlignment returns a boolean if a field has been set.
+func (o *MessageCardOptions) HasAlignment() bool {
+	if o != nil && !IsNil(o.Alignment) {
+		return true
+	}
+
+	return false
+}
+
+// SetAlignment gets a reference to the given MessageCardOptionsAlignmentEnum and assigns it to the Alignment field.
+func (o *MessageCardOptions) SetAlignment(v MessageCardOptionsAlignmentEnum) {
+	o.Alignment = &v
+}
+
+// GetHeight returns the Height field value if set, zero value otherwise.
+func (o *MessageCardOptions) GetHeight() MessageCardOptionsHeightEnum {
+	if o == nil || IsNil(o.Height) {
+		var ret MessageCardOptionsHeightEnum
+		return ret
+	}
+	return *o.Height
+}
+
+// GetHeightOk returns a tuple with the Height field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageCardOptions) GetHeightOk() (*MessageCardOptionsHeightEnum, bool) {
+	if o == nil || IsNil(o.Height) {
+		return nil, false
+	}
+	return o.Height, true
+}
+
+// HasHeight returns a boolean if a field has been set.
+func (o *MessageCardOptions) HasHeight() bool {
+	if o != nil && !IsNil(o.Height) {
+		return true
+	}
+
+	return false
+}
+
+// SetHeight gets a reference to the given MessageCardOptionsHeightEnum and assigns it to the Height field.
+func (o *MessageCardOptions) SetHeight(v MessageCardOptionsHeightEnum) {
+	o.Height = &v
+}
+
+func (o MessageCardOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageCardOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Orientation) {
+		toSerialize["orientation"] = o.Orientation
+	}
+	if !IsNil(o.Alignment) {
+		toSerialize["alignment"] = o.Alignment
+	}
+	if !IsNil(o.Height) {
+		toSerialize["height"] = o.Height
+	}
+	return toSerialize, nil
+}
+
+type NullableMessageCardOptions struct {
+	value *MessageCardOptions
+	isSet bool
+}
+
+func (v NullableMessageCardOptions) Get() *MessageCardOptions {
+	return v.value
+}
+
+func (v *NullableMessageCardOptions) Set(val *MessageCardOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageCardOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageCardOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageCardOptions(val *MessageCardOptions) *NullableMessageCardOptions {
+	return &NullableMessageCardOptions{value: val, isSet: true}
+}
+
+func (v NullableMessageCardOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageCardOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_card_options_alignment_enum.go b/pkg/infobip/models/messagesapi/message_card_options_alignment_enum.go
new file mode 100644
index 0000000..8acdf1c
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_card_options_alignment_enum.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// MessageCardOptionsAlignmentEnum Alignment of the card.
+type MessageCardOptionsAlignmentEnum string
+
+// List of MessageCardOptionsAlignmentEnum
+const (
+	MESSAGECARDOPTIONSALIGNMENTENUM_LEFT  MessageCardOptionsAlignmentEnum = "LEFT"
+	MESSAGECARDOPTIONSALIGNMENTENUM_RIGHT MessageCardOptionsAlignmentEnum = "RIGHT"
+)
+
+// All allowed values of MessageCardOptionsAlignmentEnum enum
+var AllowedMessageCardOptionsAlignmentEnumEnumValues = []MessageCardOptionsAlignmentEnum{
+	"LEFT",
+	"RIGHT",
+}
+
+func (v *MessageCardOptionsAlignmentEnum) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := MessageCardOptionsAlignmentEnum(value)
+	for _, existing := range AllowedMessageCardOptionsAlignmentEnumEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid MessageCardOptionsAlignmentEnum", value)
+}
+
+// NewMessageCardOptionsAlignmentEnumFromValue returns a pointer to a valid MessageCardOptionsAlignmentEnum
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewMessageCardOptionsAlignmentEnumFromValue(v string) (*MessageCardOptionsAlignmentEnum, error) {
+	ev := MessageCardOptionsAlignmentEnum(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for MessageCardOptionsAlignmentEnum: valid values are %v", v, AllowedMessageCardOptionsAlignmentEnumEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v MessageCardOptionsAlignmentEnum) IsValid() bool {
+	for _, existing := range AllowedMessageCardOptionsAlignmentEnumEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to MessageCardOptionsAlignmentEnum value
+func (v MessageCardOptionsAlignmentEnum) Ptr() *MessageCardOptionsAlignmentEnum {
+	return &v
+}
+
+type NullableMessageCardOptionsAlignmentEnum struct {
+	value *MessageCardOptionsAlignmentEnum
+	isSet bool
+}
+
+func (v NullableMessageCardOptionsAlignmentEnum) Get() *MessageCardOptionsAlignmentEnum {
+	return v.value
+}
+
+func (v *NullableMessageCardOptionsAlignmentEnum) Set(val *MessageCardOptionsAlignmentEnum) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageCardOptionsAlignmentEnum) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageCardOptionsAlignmentEnum) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageCardOptionsAlignmentEnum(val *MessageCardOptionsAlignmentEnum) *NullableMessageCardOptionsAlignmentEnum {
+	return &NullableMessageCardOptionsAlignmentEnum{value: val, isSet: true}
+}
+
+func (v NullableMessageCardOptionsAlignmentEnum) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageCardOptionsAlignmentEnum) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_card_options_height_enum.go b/pkg/infobip/models/messagesapi/message_card_options_height_enum.go
new file mode 100644
index 0000000..01d932b
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_card_options_height_enum.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// MessageCardOptionsHeightEnum Height of the card media.
+type MessageCardOptionsHeightEnum string
+
+// List of MessageCardOptionsHeightEnum
+const (
+	MESSAGECARDOPTIONSHEIGHTENUM_SHORT  MessageCardOptionsHeightEnum = "SHORT"
+	MESSAGECARDOPTIONSHEIGHTENUM_MEDIUM MessageCardOptionsHeightEnum = "MEDIUM"
+	MESSAGECARDOPTIONSHEIGHTENUM_TALL   MessageCardOptionsHeightEnum = "TALL"
+)
+
+// All allowed values of MessageCardOptionsHeightEnum enum
+var AllowedMessageCardOptionsHeightEnumEnumValues = []MessageCardOptionsHeightEnum{
+	"SHORT",
+	"MEDIUM",
+	"TALL",
+}
+
+func (v *MessageCardOptionsHeightEnum) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := MessageCardOptionsHeightEnum(value)
+	for _, existing := range AllowedMessageCardOptionsHeightEnumEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid MessageCardOptionsHeightEnum", value)
+}
+
+// NewMessageCardOptionsHeightEnumFromValue returns a pointer to a valid MessageCardOptionsHeightEnum
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewMessageCardOptionsHeightEnumFromValue(v string) (*MessageCardOptionsHeightEnum, error) {
+	ev := MessageCardOptionsHeightEnum(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for MessageCardOptionsHeightEnum: valid values are %v", v, AllowedMessageCardOptionsHeightEnumEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v MessageCardOptionsHeightEnum) IsValid() bool {
+	for _, existing := range AllowedMessageCardOptionsHeightEnumEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to MessageCardOptionsHeightEnum value
+func (v MessageCardOptionsHeightEnum) Ptr() *MessageCardOptionsHeightEnum {
+	return &v
+}
+
+type NullableMessageCardOptionsHeightEnum struct {
+	value *MessageCardOptionsHeightEnum
+	isSet bool
+}
+
+func (v NullableMessageCardOptionsHeightEnum) Get() *MessageCardOptionsHeightEnum {
+	return v.value
+}
+
+func (v *NullableMessageCardOptionsHeightEnum) Set(val *MessageCardOptionsHeightEnum) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageCardOptionsHeightEnum) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageCardOptionsHeightEnum) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageCardOptionsHeightEnum(val *MessageCardOptionsHeightEnum) *NullableMessageCardOptionsHeightEnum {
+	return &NullableMessageCardOptionsHeightEnum{value: val, isSet: true}
+}
+
+func (v NullableMessageCardOptionsHeightEnum) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageCardOptionsHeightEnum) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_card_options_orientation_enum.go b/pkg/infobip/models/messagesapi/message_card_options_orientation_enum.go
new file mode 100644
index 0000000..27f51c2
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_card_options_orientation_enum.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// MessageCardOptionsOrientationEnum Orientation of the card.
+type MessageCardOptionsOrientationEnum string
+
+// List of MessageCardOptionsOrientationEnum
+const (
+	MESSAGECARDOPTIONSORIENTATIONENUM_HORIZONTAL MessageCardOptionsOrientationEnum = "HORIZONTAL"
+	MESSAGECARDOPTIONSORIENTATIONENUM_VERTICAL   MessageCardOptionsOrientationEnum = "VERTICAL"
+)
+
+// All allowed values of MessageCardOptionsOrientationEnum enum
+var AllowedMessageCardOptionsOrientationEnumEnumValues = []MessageCardOptionsOrientationEnum{
+	"HORIZONTAL",
+	"VERTICAL",
+}
+
+func (v *MessageCardOptionsOrientationEnum) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := MessageCardOptionsOrientationEnum(value)
+	for _, existing := range AllowedMessageCardOptionsOrientationEnumEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid MessageCardOptionsOrientationEnum", value)
+}
+
+// NewMessageCardOptionsOrientationEnumFromValue returns a pointer to a valid MessageCardOptionsOrientationEnum
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewMessageCardOptionsOrientationEnumFromValue(v string) (*MessageCardOptionsOrientationEnum, error) {
+	ev := MessageCardOptionsOrientationEnum(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for MessageCardOptionsOrientationEnum: valid values are %v", v, AllowedMessageCardOptionsOrientationEnumEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v MessageCardOptionsOrientationEnum) IsValid() bool {
+	for _, existing := range AllowedMessageCardOptionsOrientationEnumEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to MessageCardOptionsOrientationEnum value
+func (v MessageCardOptionsOrientationEnum) Ptr() *MessageCardOptionsOrientationEnum {
+	return &v
+}
+
+type NullableMessageCardOptionsOrientationEnum struct {
+	value *MessageCardOptionsOrientationEnum
+	isSet bool
+}
+
+func (v NullableMessageCardOptionsOrientationEnum) Get() *MessageCardOptionsOrientationEnum {
+	return v.value
+}
+
+func (v *NullableMessageCardOptionsOrientationEnum) Set(val *MessageCardOptionsOrientationEnum) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageCardOptionsOrientationEnum) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageCardOptionsOrientationEnum) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageCardOptionsOrientationEnum(val *MessageCardOptionsOrientationEnum) *NullableMessageCardOptionsOrientationEnum {
+	return &NullableMessageCardOptionsOrientationEnum{value: val, isSet: true}
+}
+
+func (v NullableMessageCardOptionsOrientationEnum) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageCardOptionsOrientationEnum) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_carousel_body.go b/pkg/infobip/models/messagesapi/message_carousel_body.go
index 89f12cc..ce5daeb 100644
--- a/pkg/infobip/models/messagesapi/message_carousel_body.go
+++ b/pkg/infobip/models/messagesapi/message_carousel_body.go
@@ -34,7 +34,7 @@ type _MessageCarouselBody MessageCarouselBody
 // will change when the set of required properties is changed
 func NewMessageCarouselBody(cards []MessageCarouselCard) *MessageCarouselBody {
 	this := MessageCarouselBody{}
-	this.Type = MESSAGEBODYTYPE_CAROUSEL
+	this.Type = "CAROUSEL"
 	this.Cards = cards
 	return &this
 }
@@ -44,6 +44,7 @@ func NewMessageCarouselBody(cards []MessageCarouselCard) *MessageCarouselBody {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageCarouselBodyWithDefaults() *MessageCarouselBody {
 	this := MessageCarouselBody{}
+	this.Type = "CAROUSEL"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_carousel_card.go b/pkg/infobip/models/messagesapi/message_carousel_card.go
index d0bb61e..2251c04 100644
--- a/pkg/infobip/models/messagesapi/message_carousel_card.go
+++ b/pkg/infobip/models/messagesapi/message_carousel_card.go
@@ -32,6 +32,7 @@ type _MessageCarouselCard MessageCarouselCard
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageCarouselCard(body MessageCarouselCardBody) *MessageCarouselCard {
 	this := MessageCarouselCard{}
 	this.Body = body
@@ -43,6 +44,7 @@ func NewMessageCarouselCard(body MessageCarouselCardBody) *MessageCarouselCard {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageCarouselCardWithDefaults() *MessageCarouselCard {
 	this := MessageCarouselCard{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_carousel_card_body.go b/pkg/infobip/models/messagesapi/message_carousel_card_body.go
index a0f2305..e48e4dc 100644
--- a/pkg/infobip/models/messagesapi/message_carousel_card_body.go
+++ b/pkg/infobip/models/messagesapi/message_carousel_card_body.go
@@ -31,6 +31,7 @@ type MessageCarouselCardBody struct {
 	IsVideo *bool
 	// URL of the thumbnail image. If you add this, then we use as thumbnail image for video you provided in `url`. Applicable only when `isVideo=true`.
 	ThumbnailUrl *string
+	CardOptions  *MessageCardOptions
 }
 
 type _MessageCarouselCardBody MessageCarouselCardBody
@@ -39,6 +40,7 @@ type _MessageCarouselCardBody MessageCarouselCardBody
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageCarouselCardBody(text string, url string) *MessageCarouselCardBody {
 	this := MessageCarouselCardBody{}
 	this.Text = text
@@ -53,6 +55,7 @@ func NewMessageCarouselCardBody(text string, url string) *MessageCarouselCardBod
 // but it doesn't guarantee that properties required by API are set
 func NewMessageCarouselCardBodyWithDefaults() *MessageCarouselCardBody {
 	this := MessageCarouselCardBody{}
+
 	var isVideo bool = false
 	this.IsVideo = &isVideo
 	return &this
@@ -202,6 +205,38 @@ func (o *MessageCarouselCardBody) SetThumbnailUrl(v string) {
 	o.ThumbnailUrl = &v
 }
 
+// GetCardOptions returns the CardOptions field value if set, zero value otherwise.
+func (o *MessageCarouselCardBody) GetCardOptions() MessageCardOptions {
+	if o == nil || IsNil(o.CardOptions) {
+		var ret MessageCardOptions
+		return ret
+	}
+	return *o.CardOptions
+}
+
+// GetCardOptionsOk returns a tuple with the CardOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageCarouselCardBody) GetCardOptionsOk() (*MessageCardOptions, bool) {
+	if o == nil || IsNil(o.CardOptions) {
+		return nil, false
+	}
+	return o.CardOptions, true
+}
+
+// HasCardOptions returns a boolean if a field has been set.
+func (o *MessageCarouselCardBody) HasCardOptions() bool {
+	if o != nil && !IsNil(o.CardOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetCardOptions gets a reference to the given MessageCardOptions and assigns it to the CardOptions field.
+func (o *MessageCarouselCardBody) SetCardOptions(v MessageCardOptions) {
+	o.CardOptions = &v
+}
+
 func (o MessageCarouselCardBody) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
@@ -223,6 +258,9 @@ func (o MessageCarouselCardBody) ToMap() (map[string]interface{}, error) {
 	if !IsNil(o.ThumbnailUrl) {
 		toSerialize["thumbnailUrl"] = o.ThumbnailUrl
 	}
+	if !IsNil(o.CardOptions) {
+		toSerialize["cardOptions"] = o.CardOptions
+	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_confirmation_body.go b/pkg/infobip/models/messagesapi/message_confirmation_body.go
index 8bd4d7a..cf96444 100644
--- a/pkg/infobip/models/messagesapi/message_confirmation_body.go
+++ b/pkg/infobip/models/messagesapi/message_confirmation_body.go
@@ -35,6 +35,7 @@ type _MessageConfirmationBody MessageConfirmationBody
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageConfirmationBody(text string) *MessageConfirmationBody {
 	this := MessageConfirmationBody{}
 	this.Text = text
@@ -46,6 +47,7 @@ func NewMessageConfirmationBody(text string) *MessageConfirmationBody {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageConfirmationBodyWithDefaults() *MessageConfirmationBody {
 	this := MessageConfirmationBody{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_contact_body.go b/pkg/infobip/models/messagesapi/message_contact_body.go
new file mode 100644
index 0000000..4cd400b
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_contact_body.go
@@ -0,0 +1,152 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageContactBody type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageContactBody{}
+
+// MessageContactBody struct for MessageContactBody
+type MessageContactBody struct {
+	Type MessageBodyType
+	// Name of the contact.
+	Name string
+	// Phone number of the contact.
+	PhoneNumber string
+}
+
+type _MessageContactBody MessageContactBody
+
+// NewMessageContactBody instantiates a new MessageContactBody object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewMessageContactBody(name string, phoneNumber string) *MessageContactBody {
+	this := MessageContactBody{}
+	this.Type = "CONTACT"
+	this.Name = name
+	this.PhoneNumber = phoneNumber
+	return &this
+}
+
+// NewMessageContactBodyWithDefaults instantiates a new MessageContactBody object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageContactBodyWithDefaults() *MessageContactBody {
+	this := MessageContactBody{}
+	this.Type = "CONTACT"
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *MessageContactBody) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *MessageContactBody) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *MessageContactBody) SetName(v string) {
+	o.Name = v
+}
+
+// GetPhoneNumber returns the PhoneNumber field value
+func (o *MessageContactBody) GetPhoneNumber() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value
+// and a boolean to check if the value has been set.
+func (o *MessageContactBody) GetPhoneNumberOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PhoneNumber, true
+}
+
+// SetPhoneNumber sets field value
+func (o *MessageContactBody) SetPhoneNumber(v string) {
+	o.PhoneNumber = v
+}
+
+func (o MessageContactBody) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageContactBody) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["name"] = o.Name
+	toSerialize["phoneNumber"] = o.PhoneNumber
+	return toSerialize, nil
+}
+
+type NullableMessageContactBody struct {
+	value *MessageContactBody
+	isSet bool
+}
+
+func (v NullableMessageContactBody) Get() *MessageContactBody {
+	return v.value
+}
+
+func (v *NullableMessageContactBody) Set(val *MessageContactBody) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageContactBody) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageContactBody) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageContactBody(val *MessageContactBody) *NullableMessageContactBody {
+	return &NullableMessageContactBody{value: val, isSet: true}
+}
+
+func (v NullableMessageContactBody) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageContactBody) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_content.go b/pkg/infobip/models/messagesapi/message_content.go
index c1bfb63..4c68d24 100644
--- a/pkg/infobip/models/messagesapi/message_content.go
+++ b/pkg/infobip/models/messagesapi/message_content.go
@@ -23,9 +23,10 @@ var _ MappedNullable = &MessageContent{}
 type MessageContent struct {
 	Header *MessageHeader
 	Body   MessageBody
-	// List of buttons for the message.
+	// List of buttons of the message.
 	Buttons          []MessageButton
 	ConfirmationBody *MessageConfirmationBody
+	Footer           *MessageFooter
 }
 
 type _MessageContent MessageContent
@@ -34,6 +35,7 @@ type _MessageContent MessageContent
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageContent(body MessageBody) *MessageContent {
 	this := MessageContent{}
 	this.Body = body
@@ -45,6 +47,7 @@ func NewMessageContent(body MessageBody) *MessageContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageContentWithDefaults() *MessageContent {
 	this := MessageContent{}
+
 	return &this
 }
 
@@ -168,6 +171,38 @@ func (o *MessageContent) SetConfirmationBody(v MessageConfirmationBody) {
 	o.ConfirmationBody = &v
 }
 
+// GetFooter returns the Footer field value if set, zero value otherwise.
+func (o *MessageContent) GetFooter() MessageFooter {
+	if o == nil || IsNil(o.Footer) {
+		var ret MessageFooter
+		return ret
+	}
+	return *o.Footer
+}
+
+// GetFooterOk returns a tuple with the Footer field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageContent) GetFooterOk() (*MessageFooter, bool) {
+	if o == nil || IsNil(o.Footer) {
+		return nil, false
+	}
+	return o.Footer, true
+}
+
+// HasFooter returns a boolean if a field has been set.
+func (o *MessageContent) HasFooter() bool {
+	if o != nil && !IsNil(o.Footer) {
+		return true
+	}
+
+	return false
+}
+
+// SetFooter gets a reference to the given MessageFooter and assigns it to the Footer field.
+func (o *MessageContent) SetFooter(v MessageFooter) {
+	o.Footer = &v
+}
+
 func (o MessageContent) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
@@ -188,6 +223,9 @@ func (o MessageContent) ToMap() (map[string]interface{}, error) {
 	if !IsNil(o.ConfirmationBody) {
 		toSerialize["confirmationBody"] = o.ConfirmationBody
 	}
+	if !IsNil(o.Footer) {
+		toSerialize["footer"] = o.Footer
+	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_delivery_reporting.go b/pkg/infobip/models/messagesapi/message_delivery_reporting.go
index 974578c..7e46ffe 100644
--- a/pkg/infobip/models/messagesapi/message_delivery_reporting.go
+++ b/pkg/infobip/models/messagesapi/message_delivery_reporting.go
@@ -31,6 +31,7 @@ type MessageDeliveryReporting struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageDeliveryReporting() *MessageDeliveryReporting {
 	this := MessageDeliveryReporting{}
 	return &this
@@ -41,6 +42,7 @@ func NewMessageDeliveryReporting() *MessageDeliveryReporting {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageDeliveryReportingWithDefaults() *MessageDeliveryReporting {
 	this := MessageDeliveryReporting{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_destination.go b/pkg/infobip/models/messagesapi/message_destination.go
index 3fe7fc3..49ee3ad 100644
--- a/pkg/infobip/models/messagesapi/message_destination.go
+++ b/pkg/infobip/models/messagesapi/message_destination.go
@@ -14,8 +14,9 @@ import (
 	"encoding/json"
 	"fmt"
 
-	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 	"gopkg.in/validator.v2"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
 // MessageDestination - Array of destination objects for where messages are being sent. A valid destination is required.
diff --git a/pkg/infobip/models/messagesapi/message_document_body.go b/pkg/infobip/models/messagesapi/message_document_body.go
index 4680f66..490e8cb 100644
--- a/pkg/infobip/models/messagesapi/message_document_body.go
+++ b/pkg/infobip/models/messagesapi/message_document_body.go
@@ -38,7 +38,7 @@ type _MessageDocumentBody MessageDocumentBody
 // will change when the set of required properties is changed
 func NewMessageDocumentBody(url string) *MessageDocumentBody {
 	this := MessageDocumentBody{}
-	this.Type = MESSAGEBODYTYPE_DOCUMENT
+	this.Type = "DOCUMENT"
 	this.Url = url
 	return &this
 }
@@ -48,6 +48,7 @@ func NewMessageDocumentBody(url string) *MessageDocumentBody {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageDocumentBodyWithDefaults() *MessageDocumentBody {
 	this := MessageDocumentBody{}
+	this.Type = "DOCUMENT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_footer.go b/pkg/infobip/models/messagesapi/message_footer.go
new file mode 100644
index 0000000..d4814fd
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_footer.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageFooter type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageFooter{}
+
+// MessageFooter Footer of the message.
+type MessageFooter struct {
+	// Text of the footer.
+	Text string
+}
+
+type _MessageFooter MessageFooter
+
+// NewMessageFooter instantiates a new MessageFooter object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMessageFooter(text string) *MessageFooter {
+	this := MessageFooter{}
+	this.Text = text
+	return &this
+}
+
+// NewMessageFooterWithDefaults instantiates a new MessageFooter object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageFooterWithDefaults() *MessageFooter {
+	this := MessageFooter{}
+
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *MessageFooter) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *MessageFooter) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *MessageFooter) SetText(v string) {
+	o.Text = v
+}
+
+func (o MessageFooter) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageFooter) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["text"] = o.Text
+	return toSerialize, nil
+}
+
+type NullableMessageFooter struct {
+	value *MessageFooter
+	isSet bool
+}
+
+func (v NullableMessageFooter) Get() *MessageFooter {
+	return v.value
+}
+
+func (v *NullableMessageFooter) Set(val *MessageFooter) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageFooter) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageFooter) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageFooter(val *MessageFooter) *NullableMessageFooter {
+	return &NullableMessageFooter{value: val, isSet: true}
+}
+
+func (v NullableMessageFooter) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageFooter) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_image_body.go b/pkg/infobip/models/messagesapi/message_image_body.go
index 12d7126..fd95b25 100644
--- a/pkg/infobip/models/messagesapi/message_image_body.go
+++ b/pkg/infobip/models/messagesapi/message_image_body.go
@@ -36,7 +36,7 @@ type _MessageImageBody MessageImageBody
 // will change when the set of required properties is changed
 func NewMessageImageBody(url string) *MessageImageBody {
 	this := MessageImageBody{}
-	this.Type = MESSAGEBODYTYPE_IMAGE
+	this.Type = "IMAGE"
 	this.Url = url
 	return &this
 }
@@ -46,6 +46,7 @@ func NewMessageImageBody(url string) *MessageImageBody {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageImageBodyWithDefaults() *MessageImageBody {
 	this := MessageImageBody{}
+	this.Type = "IMAGE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_list_body.go b/pkg/infobip/models/messagesapi/message_list_body.go
index 3c292fb..112ec83 100644
--- a/pkg/infobip/models/messagesapi/message_list_body.go
+++ b/pkg/infobip/models/messagesapi/message_list_body.go
@@ -40,7 +40,7 @@ type _MessageListBody MessageListBody
 // will change when the set of required properties is changed
 func NewMessageListBody(text string, sections []MessageListSection) *MessageListBody {
 	this := MessageListBody{}
-	this.Type = MESSAGEBODYTYPE_LIST
+	this.Type = "LIST"
 	this.Text = text
 	this.Sections = sections
 	return &this
@@ -51,6 +51,7 @@ func NewMessageListBody(text string, sections []MessageListSection) *MessageList
 // but it doesn't guarantee that properties required by API are set
 func NewMessageListBodyWithDefaults() *MessageListBody {
 	this := MessageListBody{}
+	this.Type = "LIST"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_list_item.go b/pkg/infobip/models/messagesapi/message_list_item.go
index eb87ea1..f5450d6 100644
--- a/pkg/infobip/models/messagesapi/message_list_item.go
+++ b/pkg/infobip/models/messagesapi/message_list_item.go
@@ -21,6 +21,8 @@ var _ MappedNullable = &MessageListItem{}
 
 // MessageListItem List Items.
 type MessageListItem struct {
+	// Item ID (supported only by WhatsApp), has to be unique for each item.
+	Id *string
 	// Item Text.
 	Text string
 	// Item Description.
@@ -35,6 +37,7 @@ type _MessageListItem MessageListItem
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageListItem(text string) *MessageListItem {
 	this := MessageListItem{}
 	this.Text = text
@@ -46,9 +49,42 @@ func NewMessageListItem(text string) *MessageListItem {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageListItemWithDefaults() *MessageListItem {
 	this := MessageListItem{}
+
 	return &this
 }
 
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *MessageListItem) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageListItem) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *MessageListItem) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *MessageListItem) SetId(v string) {
+	o.Id = &v
+}
+
 // GetText returns the Text field value
 func (o *MessageListItem) GetText() string {
 	if o == nil {
@@ -147,6 +183,9 @@ func (o MessageListItem) MarshalJSON() ([]byte, error) {
 
 func (o MessageListItem) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
 	toSerialize["text"] = o.Text
 	if !IsNil(o.Description) {
 		toSerialize["description"] = o.Description
diff --git a/pkg/infobip/models/messagesapi/message_list_section.go b/pkg/infobip/models/messagesapi/message_list_section.go
index 2524d2a..214b975 100644
--- a/pkg/infobip/models/messagesapi/message_list_section.go
+++ b/pkg/infobip/models/messagesapi/message_list_section.go
@@ -35,6 +35,7 @@ type _MessageListSection MessageListSection
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageListSection(sectionTitle string, items []MessageListItem) *MessageListSection {
 	this := MessageListSection{}
 	this.SectionTitle = sectionTitle
@@ -47,6 +48,7 @@ func NewMessageListSection(sectionTitle string, items []MessageListItem) *Messag
 // but it doesn't guarantee that properties required by API are set
 func NewMessageListSectionWithDefaults() *MessageListSection {
 	this := MessageListSection{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_location_body.go b/pkg/infobip/models/messagesapi/message_location_body.go
new file mode 100644
index 0000000..51f0b49
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_location_body.go
@@ -0,0 +1,226 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageLocationBody type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageLocationBody{}
+
+// MessageLocationBody struct for MessageLocationBody
+type MessageLocationBody struct {
+	Type MessageBodyType
+	// Latitude of a location.
+	Latitude float64
+	// Longitude of a location.
+	Longitude float64
+	// Location name.
+	Name *string
+	// Location address.
+	Address *string
+}
+
+type _MessageLocationBody MessageLocationBody
+
+// NewMessageLocationBody instantiates a new MessageLocationBody object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewMessageLocationBody(latitude float64, longitude float64) *MessageLocationBody {
+	this := MessageLocationBody{}
+	this.Type = "LOCATION"
+	this.Latitude = latitude
+	this.Longitude = longitude
+	return &this
+}
+
+// NewMessageLocationBodyWithDefaults instantiates a new MessageLocationBody object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageLocationBodyWithDefaults() *MessageLocationBody {
+	this := MessageLocationBody{}
+	this.Type = "LOCATION"
+	return &this
+}
+
+// GetLatitude returns the Latitude field value
+func (o *MessageLocationBody) GetLatitude() float64 {
+	if o == nil {
+		var ret float64
+		return ret
+	}
+
+	return o.Latitude
+}
+
+// GetLatitudeOk returns a tuple with the Latitude field value
+// and a boolean to check if the value has been set.
+func (o *MessageLocationBody) GetLatitudeOk() (*float64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Latitude, true
+}
+
+// SetLatitude sets field value
+func (o *MessageLocationBody) SetLatitude(v float64) {
+	o.Latitude = v
+}
+
+// GetLongitude returns the Longitude field value
+func (o *MessageLocationBody) GetLongitude() float64 {
+	if o == nil {
+		var ret float64
+		return ret
+	}
+
+	return o.Longitude
+}
+
+// GetLongitudeOk returns a tuple with the Longitude field value
+// and a boolean to check if the value has been set.
+func (o *MessageLocationBody) GetLongitudeOk() (*float64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Longitude, true
+}
+
+// SetLongitude sets field value
+func (o *MessageLocationBody) SetLongitude(v float64) {
+	o.Longitude = v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *MessageLocationBody) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageLocationBody) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *MessageLocationBody) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *MessageLocationBody) SetName(v string) {
+	o.Name = &v
+}
+
+// GetAddress returns the Address field value if set, zero value otherwise.
+func (o *MessageLocationBody) GetAddress() string {
+	if o == nil || IsNil(o.Address) {
+		var ret string
+		return ret
+	}
+	return *o.Address
+}
+
+// GetAddressOk returns a tuple with the Address field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageLocationBody) GetAddressOk() (*string, bool) {
+	if o == nil || IsNil(o.Address) {
+		return nil, false
+	}
+	return o.Address, true
+}
+
+// HasAddress returns a boolean if a field has been set.
+func (o *MessageLocationBody) HasAddress() bool {
+	if o != nil && !IsNil(o.Address) {
+		return true
+	}
+
+	return false
+}
+
+// SetAddress gets a reference to the given string and assigns it to the Address field.
+func (o *MessageLocationBody) SetAddress(v string) {
+	o.Address = &v
+}
+
+func (o MessageLocationBody) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageLocationBody) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["latitude"] = o.Latitude
+	toSerialize["longitude"] = o.Longitude
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Address) {
+		toSerialize["address"] = o.Address
+	}
+	return toSerialize, nil
+}
+
+type NullableMessageLocationBody struct {
+	value *MessageLocationBody
+	isSet bool
+}
+
+func (v NullableMessageLocationBody) Get() *MessageLocationBody {
+	return v.value
+}
+
+func (v *NullableMessageLocationBody) Set(val *MessageLocationBody) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageLocationBody) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageLocationBody) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageLocationBody(val *MessageLocationBody) *NullableMessageLocationBody {
+	return &NullableMessageLocationBody{value: val, isSet: true}
+}
+
+func (v NullableMessageLocationBody) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageLocationBody) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_open_url_button.go b/pkg/infobip/models/messagesapi/message_open_url_button.go
index e22ea38..ac46655 100644
--- a/pkg/infobip/models/messagesapi/message_open_url_button.go
+++ b/pkg/infobip/models/messagesapi/message_open_url_button.go
@@ -36,7 +36,7 @@ type _MessageOpenUrlButton MessageOpenUrlButton
 // will change when the set of required properties is changed
 func NewMessageOpenUrlButton(text string, url string) *MessageOpenUrlButton {
 	this := MessageOpenUrlButton{}
-	this.Type = MESSAGEBUTTONTYPE_OPEN_URL
+	this.Type = "OPEN_URL"
 	this.Text = text
 	this.Url = url
 	return &this
@@ -47,6 +47,7 @@ func NewMessageOpenUrlButton(text string, url string) *MessageOpenUrlButton {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageOpenUrlButtonWithDefaults() *MessageOpenUrlButton {
 	this := MessageOpenUrlButton{}
+	this.Type = "OPEN_URL"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_options.go b/pkg/infobip/models/messagesapi/message_options.go
index f0cc5ad..8c98f1c 100644
--- a/pkg/infobip/models/messagesapi/message_options.go
+++ b/pkg/infobip/models/messagesapi/message_options.go
@@ -34,6 +34,7 @@ type MessageOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageOptions() *MessageOptions {
 	this := MessageOptions{}
 	var adaptationMode bool = true
@@ -46,6 +47,7 @@ func NewMessageOptions() *MessageOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageOptionsWithDefaults() *MessageOptions {
 	this := MessageOptions{}
+
 	var adaptationMode bool = true
 	this.AdaptationMode = &adaptationMode
 	return &this
diff --git a/pkg/infobip/models/messagesapi/message_reply_button.go b/pkg/infobip/models/messagesapi/message_reply_button.go
index 1dff660..31a21c4 100644
--- a/pkg/infobip/models/messagesapi/message_reply_button.go
+++ b/pkg/infobip/models/messagesapi/message_reply_button.go
@@ -36,7 +36,7 @@ type _MessageReplyButton MessageReplyButton
 // will change when the set of required properties is changed
 func NewMessageReplyButton(text string, postbackData string) *MessageReplyButton {
 	this := MessageReplyButton{}
-	this.Type = MESSAGEBUTTONTYPE_REPLY
+	this.Type = "REPLY"
 	this.Text = text
 	this.PostbackData = postbackData
 	return &this
@@ -47,6 +47,7 @@ func NewMessageReplyButton(text string, postbackData string) *MessageReplyButton
 // but it doesn't guarantee that properties required by API are set
 func NewMessageReplyButtonWithDefaults() *MessageReplyButton {
 	this := MessageReplyButton{}
+	this.Type = "REPLY"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_request_location_button.go b/pkg/infobip/models/messagesapi/message_request_location_button.go
new file mode 100644
index 0000000..32fa26d
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_request_location_button.go
@@ -0,0 +1,170 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageRequestLocationButton type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageRequestLocationButton{}
+
+// MessageRequestLocationButton struct for MessageRequestLocationButton
+type MessageRequestLocationButton struct {
+	Type MessageButtonType
+	// Text to be displayed on the button.
+	Text *string
+	// Custom data that will be sent to you when user reply to a message.
+	PostbackData *string
+}
+
+type _MessageRequestLocationButton MessageRequestLocationButton
+
+// NewMessageRequestLocationButton instantiates a new MessageRequestLocationButton object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewMessageRequestLocationButton() *MessageRequestLocationButton {
+	this := MessageRequestLocationButton{}
+	this.Type = "REQUEST_LOCATION"
+	return &this
+}
+
+// NewMessageRequestLocationButtonWithDefaults instantiates a new MessageRequestLocationButton object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageRequestLocationButtonWithDefaults() *MessageRequestLocationButton {
+	this := MessageRequestLocationButton{}
+	this.Type = "REQUEST_LOCATION"
+	return &this
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *MessageRequestLocationButton) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageRequestLocationButton) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *MessageRequestLocationButton) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *MessageRequestLocationButton) SetText(v string) {
+	o.Text = &v
+}
+
+// GetPostbackData returns the PostbackData field value if set, zero value otherwise.
+func (o *MessageRequestLocationButton) GetPostbackData() string {
+	if o == nil || IsNil(o.PostbackData) {
+		var ret string
+		return ret
+	}
+	return *o.PostbackData
+}
+
+// GetPostbackDataOk returns a tuple with the PostbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageRequestLocationButton) GetPostbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.PostbackData) {
+		return nil, false
+	}
+	return o.PostbackData, true
+}
+
+// HasPostbackData returns a boolean if a field has been set.
+func (o *MessageRequestLocationButton) HasPostbackData() bool {
+	if o != nil && !IsNil(o.PostbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetPostbackData gets a reference to the given string and assigns it to the PostbackData field.
+func (o *MessageRequestLocationButton) SetPostbackData(v string) {
+	o.PostbackData = &v
+}
+
+func (o MessageRequestLocationButton) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageRequestLocationButton) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.PostbackData) {
+		toSerialize["postbackData"] = o.PostbackData
+	}
+	return toSerialize, nil
+}
+
+type NullableMessageRequestLocationButton struct {
+	value *MessageRequestLocationButton
+	isSet bool
+}
+
+func (v NullableMessageRequestLocationButton) Get() *MessageRequestLocationButton {
+	return v.value
+}
+
+func (v *NullableMessageRequestLocationButton) Set(val *MessageRequestLocationButton) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageRequestLocationButton) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageRequestLocationButton) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageRequestLocationButton(val *MessageRequestLocationButton) *NullableMessageRequestLocationButton {
+	return &NullableMessageRequestLocationButton{value: val, isSet: true}
+}
+
+func (v NullableMessageRequestLocationButton) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageRequestLocationButton) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_response.go b/pkg/infobip/models/messagesapi/message_response.go
new file mode 100644
index 0000000..40dcbf8
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_response.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageResponse{}
+
+// MessageResponse struct for MessageResponse
+type MessageResponse struct {
+	// Unique ID assigned to the request if messaging multiple recipients or sending multiple messages via a single API request. If not provided, it will be auto-generated and returned in the API response. Typically used for fetching delivery reports and message logs.
+	BulkId *string
+	// An array of message objects of a single message or multiple messages sent under one bulk ID.
+	Messages []MessageResponseDetails
+}
+
+type _MessageResponse MessageResponse
+
+// NewMessageResponse instantiates a new MessageResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMessageResponse(messages []MessageResponseDetails) *MessageResponse {
+	this := MessageResponse{}
+	this.Messages = messages
+	return &this
+}
+
+// NewMessageResponseWithDefaults instantiates a new MessageResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageResponseWithDefaults() *MessageResponse {
+	this := MessageResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *MessageResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *MessageResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *MessageResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessages returns the Messages field value
+func (o *MessageResponse) GetMessages() []MessageResponseDetails {
+	if o == nil {
+		var ret []MessageResponseDetails
+		return ret
+	}
+
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value
+// and a boolean to check if the value has been set.
+func (o *MessageResponse) GetMessagesOk() ([]MessageResponseDetails, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// SetMessages sets field value
+func (o *MessageResponse) SetMessages(v []MessageResponseDetails) {
+	o.Messages = v
+}
+
+func (o MessageResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	toSerialize["messages"] = o.Messages
+	return toSerialize, nil
+}
+
+type NullableMessageResponse struct {
+	value *MessageResponse
+	isSet bool
+}
+
+func (v NullableMessageResponse) Get() *MessageResponse {
+	return v.value
+}
+
+func (v *NullableMessageResponse) Set(val *MessageResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageResponse(val *MessageResponse) *NullableMessageResponse {
+	return &NullableMessageResponse{value: val, isSet: true}
+}
+
+func (v NullableMessageResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_response_message_response_details.go b/pkg/infobip/models/messagesapi/message_response_details.go
similarity index 58%
rename from pkg/infobip/models/messagesapi/message_response_message_response_details.go
rename to pkg/infobip/models/messagesapi/message_response_details.go
index 7ae3af1..32428a1 100644
--- a/pkg/infobip/models/messagesapi/message_response_message_response_details.go
+++ b/pkg/infobip/models/messagesapi/message_response_details.go
@@ -16,11 +16,11 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the MessageResponseMessageResponseDetails type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &MessageResponseMessageResponseDetails{}
+// checks if the MessageResponseDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageResponseDetails{}
 
-// MessageResponseMessageResponseDetails An array of message objects of a single message or multiple messages sent under one bulk ID.
-type MessageResponseMessageResponseDetails struct {
+// MessageResponseDetails An array of message objects of a single message or multiple messages sent under one bulk ID.
+type MessageResponseDetails struct {
 	// Unique message ID. If not provided, it will be auto-generated and returned in the API response.
 	MessageId *string
 	Status    *MessageStatus
@@ -30,25 +30,27 @@ type MessageResponseMessageResponseDetails struct {
 	Details map[string]interface{}
 }
 
-// NewMessageResponseMessageResponseDetails instantiates a new MessageResponseMessageResponseDetails object
+// NewMessageResponseDetails instantiates a new MessageResponseDetails object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewMessageResponseMessageResponseDetails() *MessageResponseMessageResponseDetails {
-	this := MessageResponseMessageResponseDetails{}
+
+func NewMessageResponseDetails() *MessageResponseDetails {
+	this := MessageResponseDetails{}
 	return &this
 }
 
-// NewMessageResponseMessageResponseDetailsWithDefaults instantiates a new MessageResponseMessageResponseDetails object
+// NewMessageResponseDetailsWithDefaults instantiates a new MessageResponseDetails object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewMessageResponseMessageResponseDetailsWithDefaults() *MessageResponseMessageResponseDetails {
-	this := MessageResponseMessageResponseDetails{}
+func NewMessageResponseDetailsWithDefaults() *MessageResponseDetails {
+	this := MessageResponseDetails{}
+
 	return &this
 }
 
 // GetMessageId returns the MessageId field value if set, zero value otherwise.
-func (o *MessageResponseMessageResponseDetails) GetMessageId() string {
+func (o *MessageResponseDetails) GetMessageId() string {
 	if o == nil || IsNil(o.MessageId) {
 		var ret string
 		return ret
@@ -58,7 +60,7 @@ func (o *MessageResponseMessageResponseDetails) GetMessageId() string {
 
 // GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *MessageResponseMessageResponseDetails) GetMessageIdOk() (*string, bool) {
+func (o *MessageResponseDetails) GetMessageIdOk() (*string, bool) {
 	if o == nil || IsNil(o.MessageId) {
 		return nil, false
 	}
@@ -66,7 +68,7 @@ func (o *MessageResponseMessageResponseDetails) GetMessageIdOk() (*string, bool)
 }
 
 // HasMessageId returns a boolean if a field has been set.
-func (o *MessageResponseMessageResponseDetails) HasMessageId() bool {
+func (o *MessageResponseDetails) HasMessageId() bool {
 	if o != nil && !IsNil(o.MessageId) {
 		return true
 	}
@@ -75,12 +77,12 @@ func (o *MessageResponseMessageResponseDetails) HasMessageId() bool {
 }
 
 // SetMessageId gets a reference to the given string and assigns it to the MessageId field.
-func (o *MessageResponseMessageResponseDetails) SetMessageId(v string) {
+func (o *MessageResponseDetails) SetMessageId(v string) {
 	o.MessageId = &v
 }
 
 // GetStatus returns the Status field value if set, zero value otherwise.
-func (o *MessageResponseMessageResponseDetails) GetStatus() MessageStatus {
+func (o *MessageResponseDetails) GetStatus() MessageStatus {
 	if o == nil || IsNil(o.Status) {
 		var ret MessageStatus
 		return ret
@@ -90,7 +92,7 @@ func (o *MessageResponseMessageResponseDetails) GetStatus() MessageStatus {
 
 // GetStatusOk returns a tuple with the Status field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *MessageResponseMessageResponseDetails) GetStatusOk() (*MessageStatus, bool) {
+func (o *MessageResponseDetails) GetStatusOk() (*MessageStatus, bool) {
 	if o == nil || IsNil(o.Status) {
 		return nil, false
 	}
@@ -98,7 +100,7 @@ func (o *MessageResponseMessageResponseDetails) GetStatusOk() (*MessageStatus, b
 }
 
 // HasStatus returns a boolean if a field has been set.
-func (o *MessageResponseMessageResponseDetails) HasStatus() bool {
+func (o *MessageResponseDetails) HasStatus() bool {
 	if o != nil && !IsNil(o.Status) {
 		return true
 	}
@@ -107,12 +109,12 @@ func (o *MessageResponseMessageResponseDetails) HasStatus() bool {
 }
 
 // SetStatus gets a reference to the given MessageStatus and assigns it to the Status field.
-func (o *MessageResponseMessageResponseDetails) SetStatus(v MessageStatus) {
+func (o *MessageResponseDetails) SetStatus(v MessageStatus) {
 	o.Status = &v
 }
 
 // GetDestination returns the Destination field value if set, zero value otherwise.
-func (o *MessageResponseMessageResponseDetails) GetDestination() string {
+func (o *MessageResponseDetails) GetDestination() string {
 	if o == nil || IsNil(o.Destination) {
 		var ret string
 		return ret
@@ -122,7 +124,7 @@ func (o *MessageResponseMessageResponseDetails) GetDestination() string {
 
 // GetDestinationOk returns a tuple with the Destination field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *MessageResponseMessageResponseDetails) GetDestinationOk() (*string, bool) {
+func (o *MessageResponseDetails) GetDestinationOk() (*string, bool) {
 	if o == nil || IsNil(o.Destination) {
 		return nil, false
 	}
@@ -130,7 +132,7 @@ func (o *MessageResponseMessageResponseDetails) GetDestinationOk() (*string, boo
 }
 
 // HasDestination returns a boolean if a field has been set.
-func (o *MessageResponseMessageResponseDetails) HasDestination() bool {
+func (o *MessageResponseDetails) HasDestination() bool {
 	if o != nil && !IsNil(o.Destination) {
 		return true
 	}
@@ -139,12 +141,12 @@ func (o *MessageResponseMessageResponseDetails) HasDestination() bool {
 }
 
 // SetDestination gets a reference to the given string and assigns it to the Destination field.
-func (o *MessageResponseMessageResponseDetails) SetDestination(v string) {
+func (o *MessageResponseDetails) SetDestination(v string) {
 	o.Destination = &v
 }
 
 // GetDetails returns the Details field value if set, zero value otherwise.
-func (o *MessageResponseMessageResponseDetails) GetDetails() map[string]interface{} {
+func (o *MessageResponseDetails) GetDetails() map[string]interface{} {
 	if o == nil || IsNil(o.Details) {
 		var ret map[string]interface{}
 		return ret
@@ -154,7 +156,7 @@ func (o *MessageResponseMessageResponseDetails) GetDetails() map[string]interfac
 
 // GetDetailsOk returns a tuple with the Details field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *MessageResponseMessageResponseDetails) GetDetailsOk() (map[string]interface{}, bool) {
+func (o *MessageResponseDetails) GetDetailsOk() (map[string]interface{}, bool) {
 	if o == nil || IsNil(o.Details) {
 		return map[string]interface{}{}, false
 	}
@@ -162,7 +164,7 @@ func (o *MessageResponseMessageResponseDetails) GetDetailsOk() (map[string]inter
 }
 
 // HasDetails returns a boolean if a field has been set.
-func (o *MessageResponseMessageResponseDetails) HasDetails() bool {
+func (o *MessageResponseDetails) HasDetails() bool {
 	if o != nil && !IsNil(o.Details) {
 		return true
 	}
@@ -171,11 +173,11 @@ func (o *MessageResponseMessageResponseDetails) HasDetails() bool {
 }
 
 // SetDetails gets a reference to the given map[string]interface{} and assigns it to the Details field.
-func (o *MessageResponseMessageResponseDetails) SetDetails(v map[string]interface{}) {
+func (o *MessageResponseDetails) SetDetails(v map[string]interface{}) {
 	o.Details = v
 }
 
-func (o MessageResponseMessageResponseDetails) MarshalJSON() ([]byte, error) {
+func (o MessageResponseDetails) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -183,7 +185,7 @@ func (o MessageResponseMessageResponseDetails) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o MessageResponseMessageResponseDetails) ToMap() (map[string]interface{}, error) {
+func (o MessageResponseDetails) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.MessageId) {
 		toSerialize["messageId"] = o.MessageId
@@ -200,38 +202,38 @@ func (o MessageResponseMessageResponseDetails) ToMap() (map[string]interface{},
 	return toSerialize, nil
 }
 
-type NullableMessageResponseMessageResponseDetails struct {
-	value *MessageResponseMessageResponseDetails
+type NullableMessageResponseDetails struct {
+	value *MessageResponseDetails
 	isSet bool
 }
 
-func (v NullableMessageResponseMessageResponseDetails) Get() *MessageResponseMessageResponseDetails {
+func (v NullableMessageResponseDetails) Get() *MessageResponseDetails {
 	return v.value
 }
 
-func (v *NullableMessageResponseMessageResponseDetails) Set(val *MessageResponseMessageResponseDetails) {
+func (v *NullableMessageResponseDetails) Set(val *MessageResponseDetails) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableMessageResponseMessageResponseDetails) IsSet() bool {
+func (v NullableMessageResponseDetails) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableMessageResponseMessageResponseDetails) Unset() {
+func (v *NullableMessageResponseDetails) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableMessageResponseMessageResponseDetails(val *MessageResponseMessageResponseDetails) *NullableMessageResponseMessageResponseDetails {
-	return &NullableMessageResponseMessageResponseDetails{value: val, isSet: true}
+func NewNullableMessageResponseDetails(val *MessageResponseDetails) *NullableMessageResponseDetails {
+	return &NullableMessageResponseDetails{value: val, isSet: true}
 }
 
-func (v NullableMessageResponseMessageResponseDetails) MarshalJSON() ([]byte, error) {
+func (v NullableMessageResponseDetails) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableMessageResponseMessageResponseDetails) UnmarshalJSON(src []byte) error {
+func (v *NullableMessageResponseDetails) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/messagesapi/message_rich_link_body.go b/pkg/infobip/models/messagesapi/message_rich_link_body.go
index a8d7b3b..a03f44e 100644
--- a/pkg/infobip/models/messagesapi/message_rich_link_body.go
+++ b/pkg/infobip/models/messagesapi/message_rich_link_body.go
@@ -33,7 +33,8 @@ type MessageRichLinkBody struct {
 	// URL of the thumbnail image. If you add this, then we use as thumbnail image for video you provided in `url`. Applicable only when `isVideo=true`.
 	ThumbnailUrl *string
 	// Button label text.
-	ButtonText *string
+	ButtonText  *string
+	CardOptions *MessageCardOptions
 }
 
 type _MessageRichLinkBody MessageRichLinkBody
@@ -44,7 +45,7 @@ type _MessageRichLinkBody MessageRichLinkBody
 // will change when the set of required properties is changed
 func NewMessageRichLinkBody(redirectUrl string, text string, url string) *MessageRichLinkBody {
 	this := MessageRichLinkBody{}
-	this.Type = MESSAGEBODYTYPE_RICH_LINK
+	this.Type = "RICH_LINK"
 	this.RedirectUrl = redirectUrl
 	this.Text = text
 	this.Url = url
@@ -58,6 +59,7 @@ func NewMessageRichLinkBody(redirectUrl string, text string, url string) *Messag
 // but it doesn't guarantee that properties required by API are set
 func NewMessageRichLinkBodyWithDefaults() *MessageRichLinkBody {
 	this := MessageRichLinkBody{}
+	this.Type = "RICH_LINK"
 	var isVideo bool = false
 	this.IsVideo = &isVideo
 	return &this
@@ -231,6 +233,38 @@ func (o *MessageRichLinkBody) SetButtonText(v string) {
 	o.ButtonText = &v
 }
 
+// GetCardOptions returns the CardOptions field value if set, zero value otherwise.
+func (o *MessageRichLinkBody) GetCardOptions() MessageCardOptions {
+	if o == nil || IsNil(o.CardOptions) {
+		var ret MessageCardOptions
+		return ret
+	}
+	return *o.CardOptions
+}
+
+// GetCardOptionsOk returns a tuple with the CardOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MessageRichLinkBody) GetCardOptionsOk() (*MessageCardOptions, bool) {
+	if o == nil || IsNil(o.CardOptions) {
+		return nil, false
+	}
+	return o.CardOptions, true
+}
+
+// HasCardOptions returns a boolean if a field has been set.
+func (o *MessageRichLinkBody) HasCardOptions() bool {
+	if o != nil && !IsNil(o.CardOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetCardOptions gets a reference to the given MessageCardOptions and assigns it to the CardOptions field.
+func (o *MessageRichLinkBody) SetCardOptions(v MessageCardOptions) {
+	o.CardOptions = &v
+}
+
 func (o MessageRichLinkBody) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
@@ -254,6 +288,9 @@ func (o MessageRichLinkBody) ToMap() (map[string]interface{}, error) {
 	if !IsNil(o.ButtonText) {
 		toSerialize["buttonText"] = o.ButtonText
 	}
+	if !IsNil(o.CardOptions) {
+		toSerialize["cardOptions"] = o.CardOptions
+	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_status.go b/pkg/infobip/models/messagesapi/message_status.go
index a14a73e..cae50d6 100644
--- a/pkg/infobip/models/messagesapi/message_status.go
+++ b/pkg/infobip/models/messagesapi/message_status.go
@@ -38,6 +38,7 @@ type MessageStatus struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageStatus() *MessageStatus {
 	this := MessageStatus{}
 	return &this
@@ -48,6 +49,7 @@ func NewMessageStatus() *MessageStatus {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageStatusWithDefaults() *MessageStatus {
 	this := MessageStatus{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_sticker_body.go b/pkg/infobip/models/messagesapi/message_sticker_body.go
new file mode 100644
index 0000000..b957b3a
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/message_sticker_body.go
@@ -0,0 +1,124 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MessageStickerBody type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MessageStickerBody{}
+
+// MessageStickerBody struct for MessageStickerBody
+type MessageStickerBody struct {
+	Type MessageBodyType
+	// Unique reference to the sticker. It can be URL or identifier. If it is URL, resource should be of WebP type.
+	Reference string
+}
+
+type _MessageStickerBody MessageStickerBody
+
+// NewMessageStickerBody instantiates a new MessageStickerBody object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewMessageStickerBody(reference string) *MessageStickerBody {
+	this := MessageStickerBody{}
+	this.Type = "STICKER"
+	this.Reference = reference
+	return &this
+}
+
+// NewMessageStickerBodyWithDefaults instantiates a new MessageStickerBody object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMessageStickerBodyWithDefaults() *MessageStickerBody {
+	this := MessageStickerBody{}
+	this.Type = "STICKER"
+	return &this
+}
+
+// GetReference returns the Reference field value
+func (o *MessageStickerBody) GetReference() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Reference
+}
+
+// GetReferenceOk returns a tuple with the Reference field value
+// and a boolean to check if the value has been set.
+func (o *MessageStickerBody) GetReferenceOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Reference, true
+}
+
+// SetReference sets field value
+func (o *MessageStickerBody) SetReference(v string) {
+	o.Reference = v
+}
+
+func (o MessageStickerBody) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MessageStickerBody) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["reference"] = o.Reference
+	return toSerialize, nil
+}
+
+type NullableMessageStickerBody struct {
+	value *MessageStickerBody
+	isSet bool
+}
+
+func (v NullableMessageStickerBody) Get() *MessageStickerBody {
+	return v.value
+}
+
+func (v *NullableMessageStickerBody) Set(val *MessageStickerBody) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMessageStickerBody) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMessageStickerBody) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMessageStickerBody(val *MessageStickerBody) *NullableMessageStickerBody {
+	return &NullableMessageStickerBody{value: val, isSet: true}
+}
+
+func (v NullableMessageStickerBody) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMessageStickerBody) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/message_text_body.go b/pkg/infobip/models/messagesapi/message_text_body.go
index 33a3d78..1189666 100644
--- a/pkg/infobip/models/messagesapi/message_text_body.go
+++ b/pkg/infobip/models/messagesapi/message_text_body.go
@@ -34,7 +34,7 @@ type _MessageTextBody MessageTextBody
 // will change when the set of required properties is changed
 func NewMessageTextBody(text string) *MessageTextBody {
 	this := MessageTextBody{}
-	this.Type = MESSAGEBODYTYPE_TEXT
+	this.Type = "TEXT"
 	this.Text = text
 	return &this
 }
@@ -44,6 +44,7 @@ func NewMessageTextBody(text string) *MessageTextBody {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageTextBodyWithDefaults() *MessageTextBody {
 	this := MessageTextBody{}
+	this.Type = "TEXT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_text_header.go b/pkg/infobip/models/messagesapi/message_text_header.go
index a8694cc..c8bf8c7 100644
--- a/pkg/infobip/models/messagesapi/message_text_header.go
+++ b/pkg/infobip/models/messagesapi/message_text_header.go
@@ -34,7 +34,7 @@ type _MessageTextHeader MessageTextHeader
 // will change when the set of required properties is changed
 func NewMessageTextHeader(text string) *MessageTextHeader {
 	this := MessageTextHeader{}
-	this.Type = MESSAGEHEADERTYPE_TEXT
+	this.Type = "TEXT"
 	this.Text = text
 	return &this
 }
@@ -44,6 +44,7 @@ func NewMessageTextHeader(text string) *MessageTextHeader {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageTextHeaderWithDefaults() *MessageTextHeader {
 	this := MessageTextHeader{}
+	this.Type = "TEXT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/message_video_body.go b/pkg/infobip/models/messagesapi/message_video_body.go
index b47ff00..38f989a 100644
--- a/pkg/infobip/models/messagesapi/message_video_body.go
+++ b/pkg/infobip/models/messagesapi/message_video_body.go
@@ -38,7 +38,7 @@ type _MessageVideoBody MessageVideoBody
 // will change when the set of required properties is changed
 func NewMessageVideoBody(url string) *MessageVideoBody {
 	this := MessageVideoBody{}
-	this.Type = MESSAGEBODYTYPE_VIDEO
+	this.Type = "VIDEO"
 	this.Url = url
 	return &this
 }
@@ -48,6 +48,7 @@ func NewMessageVideoBody(url string) *MessageVideoBody {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageVideoBodyWithDefaults() *MessageVideoBody {
 	this := MessageVideoBody{}
+	this.Type = "VIDEO"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event.go b/pkg/infobip/models/messagesapi/mo_event.go
index 0a3dba8..1978ef3 100644
--- a/pkg/infobip/models/messagesapi/mo_event.go
+++ b/pkg/infobip/models/messagesapi/mo_event.go
@@ -21,7 +21,7 @@ var _ MappedNullable = &MoEvent{}
 
 // MoEvent struct for MoEvent
 type MoEvent struct {
-	Event InboundEventType
+	Event   InboundEventType
 	Channel InboundMoEventChannel
 	// Identifier (usually number) of the party which sent the message.
 	Sender string
@@ -50,7 +50,7 @@ type _MoEvent MoEvent
 // will change when the set of required properties is changed
 func NewMoEvent(channel InboundMoEventChannel, sender string, destination string, content []MoEventContent, receivedAt Time, messageId string) *MoEvent {
 	this := MoEvent{}
-	this.Event = INBOUNDEVENTTYPE_MO
+	this.Event = "MO"
 	this.Channel = channel
 	this.Sender = sender
 	this.Destination = destination
@@ -65,6 +65,7 @@ func NewMoEvent(channel InboundMoEventChannel, sender string, destination string
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventWithDefaults() *MoEvent {
 	this := MoEvent{}
+	this.Event = "MO"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_audio_content.go b/pkg/infobip/models/messagesapi/mo_event_audio_content.go
index e96ee47..694d231 100644
--- a/pkg/infobip/models/messagesapi/mo_event_audio_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_audio_content.go
@@ -36,7 +36,7 @@ type _MoEventAudioContent MoEventAudioContent
 // will change when the set of required properties is changed
 func NewMoEventAudioContent(url string) *MoEventAudioContent {
 	this := MoEventAudioContent{}
-	this.Type = MOEVENTCONTENTTYPE_AUDIO
+	this.Type = "AUDIO"
 	this.Url = url
 	return &this
 }
@@ -46,6 +46,7 @@ func NewMoEventAudioContent(url string) *MoEventAudioContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventAudioContentWithDefaults() *MoEventAudioContent {
 	this := MoEventAudioContent{}
+	this.Type = "AUDIO"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_authentication_response_content.go b/pkg/infobip/models/messagesapi/mo_event_authentication_response_content.go
index b8e973a..9dc59d3 100644
--- a/pkg/infobip/models/messagesapi/mo_event_authentication_response_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_authentication_response_content.go
@@ -36,7 +36,7 @@ type _MoEventAuthenticationResponseContent MoEventAuthenticationResponseContent
 // will change when the set of required properties is changed
 func NewMoEventAuthenticationResponseContent() *MoEventAuthenticationResponseContent {
 	this := MoEventAuthenticationResponseContent{}
-	this.Type = MOEVENTCONTENTTYPE_AUTHENTICATION_RESPONSE
+	this.Type = "AUTHENTICATION_RESPONSE"
 	return &this
 }
 
@@ -45,6 +45,7 @@ func NewMoEventAuthenticationResponseContent() *MoEventAuthenticationResponseCon
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventAuthenticationResponseContentWithDefaults() *MoEventAuthenticationResponseContent {
 	this := MoEventAuthenticationResponseContent{}
+	this.Type = "AUTHENTICATION_RESPONSE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_button_reply_content.go b/pkg/infobip/models/messagesapi/mo_event_button_reply_content.go
index d704261..2e21632 100644
--- a/pkg/infobip/models/messagesapi/mo_event_button_reply_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_button_reply_content.go
@@ -38,7 +38,7 @@ type _MoEventButtonReplyContent MoEventButtonReplyContent
 // will change when the set of required properties is changed
 func NewMoEventButtonReplyContent(text string) *MoEventButtonReplyContent {
 	this := MoEventButtonReplyContent{}
-	this.Type = MOEVENTCONTENTTYPE_BUTTON_REPLY
+	this.Type = "BUTTON_REPLY"
 	this.Text = text
 	return &this
 }
@@ -48,6 +48,7 @@ func NewMoEventButtonReplyContent(text string) *MoEventButtonReplyContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventButtonReplyContentWithDefaults() *MoEventButtonReplyContent {
 	this := MoEventButtonReplyContent{}
+	this.Type = "BUTTON_REPLY"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_document_content.go b/pkg/infobip/models/messagesapi/mo_event_document_content.go
index 05502f6..525db7b 100644
--- a/pkg/infobip/models/messagesapi/mo_event_document_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_document_content.go
@@ -36,7 +36,7 @@ type _MoEventDocumentContent MoEventDocumentContent
 // will change when the set of required properties is changed
 func NewMoEventDocumentContent(url string) *MoEventDocumentContent {
 	this := MoEventDocumentContent{}
-	this.Type = MOEVENTCONTENTTYPE_DOCUMENT
+	this.Type = "DOCUMENT"
 	this.Url = url
 	return &this
 }
@@ -46,6 +46,7 @@ func NewMoEventDocumentContent(url string) *MoEventDocumentContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventDocumentContentWithDefaults() *MoEventDocumentContent {
 	this := MoEventDocumentContent{}
+	this.Type = "DOCUMENT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_file_content.go b/pkg/infobip/models/messagesapi/mo_event_file_content.go
index 09efc9d..439fb2d 100644
--- a/pkg/infobip/models/messagesapi/mo_event_file_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_file_content.go
@@ -36,7 +36,7 @@ type _MoEventFileContent MoEventFileContent
 // will change when the set of required properties is changed
 func NewMoEventFileContent(url string) *MoEventFileContent {
 	this := MoEventFileContent{}
-	this.Type = MOEVENTCONTENTTYPE_FILE
+	this.Type = "FILE"
 	this.Url = url
 	return &this
 }
@@ -46,6 +46,7 @@ func NewMoEventFileContent(url string) *MoEventFileContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventFileContentWithDefaults() *MoEventFileContent {
 	this := MoEventFileContent{}
+	this.Type = "FILE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_image_content.go b/pkg/infobip/models/messagesapi/mo_event_image_content.go
index e36ea33..44f5c9f 100644
--- a/pkg/infobip/models/messagesapi/mo_event_image_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_image_content.go
@@ -36,7 +36,7 @@ type _MoEventImageContent MoEventImageContent
 // will change when the set of required properties is changed
 func NewMoEventImageContent(url string) *MoEventImageContent {
 	this := MoEventImageContent{}
-	this.Type = MOEVENTCONTENTTYPE_IMAGE
+	this.Type = "IMAGE"
 	this.Url = url
 	return &this
 }
@@ -46,6 +46,7 @@ func NewMoEventImageContent(url string) *MoEventImageContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventImageContentWithDefaults() *MoEventImageContent {
 	this := MoEventImageContent{}
+	this.Type = "IMAGE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_list_reply_content.go b/pkg/infobip/models/messagesapi/mo_event_list_reply_content.go
index 20773b2..9af2651 100644
--- a/pkg/infobip/models/messagesapi/mo_event_list_reply_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_list_reply_content.go
@@ -36,7 +36,7 @@ type _MoEventListReplyContent MoEventListReplyContent
 // will change when the set of required properties is changed
 func NewMoEventListReplyContent(text string, id string) *MoEventListReplyContent {
 	this := MoEventListReplyContent{}
-	this.Type = MOEVENTCONTENTTYPE_LIST_REPLY
+	this.Type = "LIST_REPLY"
 	this.Text = text
 	this.Id = id
 	return &this
@@ -47,6 +47,7 @@ func NewMoEventListReplyContent(text string, id string) *MoEventListReplyContent
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventListReplyContentWithDefaults() *MoEventListReplyContent {
 	this := MoEventListReplyContent{}
+	this.Type = "LIST_REPLY"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_location_content.go b/pkg/infobip/models/messagesapi/mo_event_location_content.go
index dac9bc2..b395e76 100644
--- a/pkg/infobip/models/messagesapi/mo_event_location_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_location_content.go
@@ -38,7 +38,7 @@ type _MoEventLocationContent MoEventLocationContent
 // will change when the set of required properties is changed
 func NewMoEventLocationContent() *MoEventLocationContent {
 	this := MoEventLocationContent{}
-	this.Type = MOEVENTCONTENTTYPE_LOCATION
+	this.Type = "LOCATION"
 	return &this
 }
 
@@ -47,6 +47,7 @@ func NewMoEventLocationContent() *MoEventLocationContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventLocationContentWithDefaults() *MoEventLocationContent {
 	this := MoEventLocationContent{}
+	this.Type = "LOCATION"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_subject_content.go b/pkg/infobip/models/messagesapi/mo_event_subject_content.go
index fcb2ff1..a42ed7c 100644
--- a/pkg/infobip/models/messagesapi/mo_event_subject_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_subject_content.go
@@ -38,7 +38,7 @@ type _MoEventSubjectContent MoEventSubjectContent
 // will change when the set of required properties is changed
 func NewMoEventSubjectContent(text string, cleanText string) *MoEventSubjectContent {
 	this := MoEventSubjectContent{}
-	this.Type = MOEVENTCONTENTTYPE_SUBJECT
+	this.Type = "SUBJECT"
 	this.Text = text
 	this.CleanText = cleanText
 	return &this
@@ -49,6 +49,7 @@ func NewMoEventSubjectContent(text string, cleanText string) *MoEventSubjectCont
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventSubjectContentWithDefaults() *MoEventSubjectContent {
 	this := MoEventSubjectContent{}
+	this.Type = "SUBJECT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_text_content.go b/pkg/infobip/models/messagesapi/mo_event_text_content.go
index b0509d0..b01a6b8 100644
--- a/pkg/infobip/models/messagesapi/mo_event_text_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_text_content.go
@@ -38,7 +38,7 @@ type _MoEventTextContent MoEventTextContent
 // will change when the set of required properties is changed
 func NewMoEventTextContent(text string, cleanText string) *MoEventTextContent {
 	this := MoEventTextContent{}
-	this.Type = MOEVENTCONTENTTYPE_TEXT
+	this.Type = "TEXT"
 	this.Text = text
 	this.CleanText = cleanText
 	return &this
@@ -49,6 +49,7 @@ func NewMoEventTextContent(text string, cleanText string) *MoEventTextContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventTextContentWithDefaults() *MoEventTextContent {
 	this := MoEventTextContent{}
+	this.Type = "TEXT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/mo_event_video_content.go b/pkg/infobip/models/messagesapi/mo_event_video_content.go
index 2d0c7a3..0dd2556 100644
--- a/pkg/infobip/models/messagesapi/mo_event_video_content.go
+++ b/pkg/infobip/models/messagesapi/mo_event_video_content.go
@@ -36,7 +36,7 @@ type _MoEventVideoContent MoEventVideoContent
 // will change when the set of required properties is changed
 func NewMoEventVideoContent(url string) *MoEventVideoContent {
 	this := MoEventVideoContent{}
-	this.Type = MOEVENTCONTENTTYPE_VIDEO
+	this.Type = "VIDEO"
 	this.Url = url
 	return &this
 }
@@ -46,6 +46,7 @@ func NewMoEventVideoContent(url string) *MoEventVideoContent {
 // but it doesn't guarantee that properties required by API are set
 func NewMoEventVideoContentWithDefaults() *MoEventVideoContent {
 	this := MoEventVideoContent{}
+	this.Type = "VIDEO"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/ott_webhooks.go b/pkg/infobip/models/messagesapi/ott_webhooks.go
index eb4e5e1..7b9ac5d 100644
--- a/pkg/infobip/models/messagesapi/ott_webhooks.go
+++ b/pkg/infobip/models/messagesapi/ott_webhooks.go
@@ -33,6 +33,7 @@ type OttWebhooks struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewOttWebhooks() *OttWebhooks {
 	this := OttWebhooks{}
 	return &this
@@ -43,6 +44,7 @@ func NewOttWebhooks() *OttWebhooks {
 // but it doesn't guarantee that properties required by API are set
 func NewOttWebhooksWithDefaults() *OttWebhooks {
 	this := OttWebhooks{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/outbound_typing_started_event.go b/pkg/infobip/models/messagesapi/outbound_typing_started_event.go
index 7c464cc..54e7303 100644
--- a/pkg/infobip/models/messagesapi/outbound_typing_started_event.go
+++ b/pkg/infobip/models/messagesapi/outbound_typing_started_event.go
@@ -38,7 +38,7 @@ type _OutboundTypingStartedEvent OutboundTypingStartedEvent
 // will change when the set of required properties is changed
 func NewOutboundTypingStartedEvent(channel OutboundEventChannel, sender string, destinations []ToDestination) *OutboundTypingStartedEvent {
 	this := OutboundTypingStartedEvent{}
-	this.Event = OUTBOUNDEVENTTYPE_STARTED
+	this.Event = "TYPING_STARTED"
 	this.Channel = channel
 	this.Sender = sender
 	this.Destinations = destinations
@@ -50,6 +50,7 @@ func NewOutboundTypingStartedEvent(channel OutboundEventChannel, sender string,
 // but it doesn't guarantee that properties required by API are set
 func NewOutboundTypingStartedEventWithDefaults() *OutboundTypingStartedEvent {
 	this := OutboundTypingStartedEvent{}
+	this.Event = "TYPING_STARTED"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/outbound_typing_stopped_event.go b/pkg/infobip/models/messagesapi/outbound_typing_stopped_event.go
index 459e1b7..8b70b3a 100644
--- a/pkg/infobip/models/messagesapi/outbound_typing_stopped_event.go
+++ b/pkg/infobip/models/messagesapi/outbound_typing_stopped_event.go
@@ -38,7 +38,7 @@ type _OutboundTypingStoppedEvent OutboundTypingStoppedEvent
 // will change when the set of required properties is changed
 func NewOutboundTypingStoppedEvent(channel OutboundEventChannel, sender string, destinations []ToDestination) *OutboundTypingStoppedEvent {
 	this := OutboundTypingStoppedEvent{}
-	this.Event = OUTBOUNDEVENTTYPE_STOPPED
+	this.Event = "TYPING_STOPPED"
 	this.Channel = channel
 	this.Sender = sender
 	this.Destinations = destinations
@@ -50,6 +50,7 @@ func NewOutboundTypingStoppedEvent(channel OutboundEventChannel, sender string,
 // but it doesn't guarantee that properties required by API are set
 func NewOutboundTypingStoppedEventWithDefaults() *OutboundTypingStoppedEvent {
 	this := OutboundTypingStoppedEvent{}
+	this.Event = "TYPING_STOPPED"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/platform.go b/pkg/infobip/models/messagesapi/platform.go
index 0fe4202..28f9c6f 100644
--- a/pkg/infobip/models/messagesapi/platform.go
+++ b/pkg/infobip/models/messagesapi/platform.go
@@ -31,6 +31,7 @@ type Platform struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewPlatform() *Platform {
 	this := Platform{}
 	return &this
@@ -41,6 +42,7 @@ func NewPlatform() *Platform {
 // but it doesn't guarantee that properties required by API are set
 func NewPlatformWithDefaults() *Platform {
 	this := Platform{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/regional_options.go b/pkg/infobip/models/messagesapi/regional_options.go
index 7abb7b1..a135f5f 100644
--- a/pkg/infobip/models/messagesapi/regional_options.go
+++ b/pkg/infobip/models/messagesapi/regional_options.go
@@ -30,6 +30,7 @@ type RegionalOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewRegionalOptions() *RegionalOptions {
 	this := RegionalOptions{}
 	return &this
@@ -40,6 +41,7 @@ func NewRegionalOptions() *RegionalOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewRegionalOptionsWithDefaults() *RegionalOptions {
 	this := RegionalOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/request.go b/pkg/infobip/models/messagesapi/request.go
index 813a9e8..559597b 100644
--- a/pkg/infobip/models/messagesapi/request.go
+++ b/pkg/infobip/models/messagesapi/request.go
@@ -32,6 +32,7 @@ type _Request Request
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewRequest(messages []RequestMessagesInner) *Request {
 	this := Request{}
 	this.Messages = messages
@@ -43,6 +44,7 @@ func NewRequest(messages []RequestMessagesInner) *Request {
 // but it doesn't guarantee that properties required by API are set
 func NewRequestWithDefaults() *Request {
 	this := Request{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/request_messages_inner.go b/pkg/infobip/models/messagesapi/request_messages_inner.go
index 32a8e85..0973f97 100644
--- a/pkg/infobip/models/messagesapi/request_messages_inner.go
+++ b/pkg/infobip/models/messagesapi/request_messages_inner.go
@@ -14,8 +14,9 @@ import (
 	"encoding/json"
 	"fmt"
 
-	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 	"gopkg.in/validator.v2"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
 // RequestMessagesInner - struct for RequestMessagesInner
diff --git a/pkg/infobip/models/messagesapi/request_scheduling_settings.go b/pkg/infobip/models/messagesapi/request_scheduling_settings.go
index 31b377d..3db7d96 100644
--- a/pkg/infobip/models/messagesapi/request_scheduling_settings.go
+++ b/pkg/infobip/models/messagesapi/request_scheduling_settings.go
@@ -32,6 +32,7 @@ type RequestSchedulingSettings struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewRequestSchedulingSettings() *RequestSchedulingSettings {
 	this := RequestSchedulingSettings{}
 	return &this
@@ -42,6 +43,7 @@ func NewRequestSchedulingSettings() *RequestSchedulingSettings {
 // but it doesn't guarantee that properties required by API are set
 func NewRequestSchedulingSettingsWithDefaults() *RequestSchedulingSettings {
 	this := RequestSchedulingSettings{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/response_envelope_message_response_message_response_details.go b/pkg/infobip/models/messagesapi/response_envelope_message_response_message_response_details.go
deleted file mode 100644
index 47aff24..0000000
--- a/pkg/infobip/models/messagesapi/response_envelope_message_response_message_response_details.go
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-Infobip Client API Libraries OpenAPI Specification
-
-OpenAPI specification containing public endpoints supported in client API libraries.
-
-Contact: support@infobip.com
-*/
-
-// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
-
-package messagesapi
-
-import (
-	"encoding/json"
-
-	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
-)
-
-// checks if the ResponseEnvelopeMessageResponseMessageResponseDetails type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &ResponseEnvelopeMessageResponseMessageResponseDetails{}
-
-// ResponseEnvelopeMessageResponseMessageResponseDetails struct for ResponseEnvelopeMessageResponseMessageResponseDetails
-type ResponseEnvelopeMessageResponseMessageResponseDetails struct {
-	// Unique ID assigned to the request if messaging multiple recipients or sending multiple messages via a single API request. If not provided, it will be auto-generated and returned in the API response. Typically used for fetching delivery reports and message logs.
-	BulkId *string
-	// An array of message objects of a single message or multiple messages sent under one bulk ID.
-	Messages []MessageResponseMessageResponseDetails
-}
-
-type _ResponseEnvelopeMessageResponseMessageResponseDetails ResponseEnvelopeMessageResponseMessageResponseDetails
-
-// NewResponseEnvelopeMessageResponseMessageResponseDetails instantiates a new ResponseEnvelopeMessageResponseMessageResponseDetails object
-// This constructor will assign default values to properties that have it defined,
-// and makes sure properties required by API are set, but the set of arguments
-// will change when the set of required properties is changed
-func NewResponseEnvelopeMessageResponseMessageResponseDetails(messages []MessageResponseMessageResponseDetails) *ResponseEnvelopeMessageResponseMessageResponseDetails {
-	this := ResponseEnvelopeMessageResponseMessageResponseDetails{}
-	this.Messages = messages
-	return &this
-}
-
-// NewResponseEnvelopeMessageResponseMessageResponseDetailsWithDefaults instantiates a new ResponseEnvelopeMessageResponseMessageResponseDetails object
-// This constructor will only assign default values to properties that have it defined,
-// but it doesn't guarantee that properties required by API are set
-func NewResponseEnvelopeMessageResponseMessageResponseDetailsWithDefaults() *ResponseEnvelopeMessageResponseMessageResponseDetails {
-	this := ResponseEnvelopeMessageResponseMessageResponseDetails{}
-	return &this
-}
-
-// GetBulkId returns the BulkId field value if set, zero value otherwise.
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) GetBulkId() string {
-	if o == nil || IsNil(o.BulkId) {
-		var ret string
-		return ret
-	}
-	return *o.BulkId
-}
-
-// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
-// and a boolean to check if the value has been set.
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) GetBulkIdOk() (*string, bool) {
-	if o == nil || IsNil(o.BulkId) {
-		return nil, false
-	}
-	return o.BulkId, true
-}
-
-// HasBulkId returns a boolean if a field has been set.
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) HasBulkId() bool {
-	if o != nil && !IsNil(o.BulkId) {
-		return true
-	}
-
-	return false
-}
-
-// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) SetBulkId(v string) {
-	o.BulkId = &v
-}
-
-// GetMessages returns the Messages field value
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) GetMessages() []MessageResponseMessageResponseDetails {
-	if o == nil {
-		var ret []MessageResponseMessageResponseDetails
-		return ret
-	}
-
-	return o.Messages
-}
-
-// GetMessagesOk returns a tuple with the Messages field value
-// and a boolean to check if the value has been set.
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) GetMessagesOk() ([]MessageResponseMessageResponseDetails, bool) {
-	if o == nil {
-		return nil, false
-	}
-	return o.Messages, true
-}
-
-// SetMessages sets field value
-func (o *ResponseEnvelopeMessageResponseMessageResponseDetails) SetMessages(v []MessageResponseMessageResponseDetails) {
-	o.Messages = v
-}
-
-func (o ResponseEnvelopeMessageResponseMessageResponseDetails) MarshalJSON() ([]byte, error) {
-	toSerialize, err := o.ToMap()
-	if err != nil {
-		return []byte{}, err
-	}
-	return json.Marshal(toSerialize)
-}
-
-func (o ResponseEnvelopeMessageResponseMessageResponseDetails) ToMap() (map[string]interface{}, error) {
-	toSerialize := map[string]interface{}{}
-	if !IsNil(o.BulkId) {
-		toSerialize["bulkId"] = o.BulkId
-	}
-	toSerialize["messages"] = o.Messages
-	return toSerialize, nil
-}
-
-type NullableResponseEnvelopeMessageResponseMessageResponseDetails struct {
-	value *ResponseEnvelopeMessageResponseMessageResponseDetails
-	isSet bool
-}
-
-func (v NullableResponseEnvelopeMessageResponseMessageResponseDetails) Get() *ResponseEnvelopeMessageResponseMessageResponseDetails {
-	return v.value
-}
-
-func (v *NullableResponseEnvelopeMessageResponseMessageResponseDetails) Set(val *ResponseEnvelopeMessageResponseMessageResponseDetails) {
-	v.value = val
-	v.isSet = true
-}
-
-func (v NullableResponseEnvelopeMessageResponseMessageResponseDetails) IsSet() bool {
-	return v.isSet
-}
-
-func (v *NullableResponseEnvelopeMessageResponseMessageResponseDetails) Unset() {
-	v.value = nil
-	v.isSet = false
-}
-
-func NewNullableResponseEnvelopeMessageResponseMessageResponseDetails(val *ResponseEnvelopeMessageResponseMessageResponseDetails) *NullableResponseEnvelopeMessageResponseMessageResponseDetails {
-	return &NullableResponseEnvelopeMessageResponseMessageResponseDetails{value: val, isSet: true}
-}
-
-func (v NullableResponseEnvelopeMessageResponseMessageResponseDetails) MarshalJSON() ([]byte, error) {
-	return json.Marshal(v.value)
-}
-
-func (v *NullableResponseEnvelopeMessageResponseMessageResponseDetails) UnmarshalJSON(src []byte) error {
-	v.isSet = true
-	return json.Unmarshal(src, &v.value)
-}
diff --git a/pkg/infobip/models/messagesapi/seen_report.go b/pkg/infobip/models/messagesapi/seen_report.go
index a55d9fb..0999386 100644
--- a/pkg/infobip/models/messagesapi/seen_report.go
+++ b/pkg/infobip/models/messagesapi/seen_report.go
@@ -31,6 +31,7 @@ type _SeenReport SeenReport
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSeenReport(results []SeenResult) *SeenReport {
 	this := SeenReport{}
 	this.Results = results
@@ -42,6 +43,7 @@ func NewSeenReport(results []SeenResult) *SeenReport {
 // but it doesn't guarantee that properties required by API are set
 func NewSeenReportWithDefaults() *SeenReport {
 	this := SeenReport{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/seen_result.go b/pkg/infobip/models/messagesapi/seen_result.go
index 56121f7..bbc5630 100644
--- a/pkg/infobip/models/messagesapi/seen_result.go
+++ b/pkg/infobip/models/messagesapi/seen_result.go
@@ -49,6 +49,7 @@ type _SeenResult SeenResult
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSeenResult(event string, channel InboundSeenChannel, sender string, destination string, sentAt string, seenAt string, bulkId string, messageId string) *SeenResult {
 	this := SeenResult{}
 	this.Event = event
@@ -67,6 +68,7 @@ func NewSeenResult(event string, channel InboundSeenChannel, sender string, dest
 // but it doesn't guarantee that properties required by API are set
 func NewSeenResultWithDefaults() *SeenResult {
 	this := SeenResult{}
+
 	var event string = "SEEN"
 	this.Event = event
 	return &this
diff --git a/pkg/infobip/models/messagesapi/seen_status_reporting.go b/pkg/infobip/models/messagesapi/seen_status_reporting.go
index 92c3a99..5615e8c 100644
--- a/pkg/infobip/models/messagesapi/seen_status_reporting.go
+++ b/pkg/infobip/models/messagesapi/seen_status_reporting.go
@@ -29,6 +29,7 @@ type SeenStatusReporting struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSeenStatusReporting() *SeenStatusReporting {
 	this := SeenStatusReporting{}
 	return &this
@@ -39,6 +40,7 @@ func NewSeenStatusReporting() *SeenStatusReporting {
 // but it doesn't guarantee that properties required by API are set
 func NewSeenStatusReportingWithDefaults() *SeenStatusReporting {
 	this := SeenStatusReporting{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/sending_speed_limit.go b/pkg/infobip/models/messagesapi/sending_speed_limit.go
index 583bce8..fc605fb 100644
--- a/pkg/infobip/models/messagesapi/sending_speed_limit.go
+++ b/pkg/infobip/models/messagesapi/sending_speed_limit.go
@@ -32,6 +32,7 @@ type _SendingSpeedLimit SendingSpeedLimit
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSendingSpeedLimit(amount int32) *SendingSpeedLimit {
 	this := SendingSpeedLimit{}
 	this.Amount = amount
@@ -45,6 +46,7 @@ func NewSendingSpeedLimit(amount int32) *SendingSpeedLimit {
 // but it doesn't guarantee that properties required by API are set
 func NewSendingSpeedLimitWithDefaults() *SendingSpeedLimit {
 	this := SendingSpeedLimit{}
+
 	var timeUnit SpeedLimitTimeUnit = SPEEDLIMITTIMEUNIT_MINUTE
 	this.TimeUnit = &timeUnit
 	return &this
diff --git a/pkg/infobip/models/messagesapi/south_korea_options.go b/pkg/infobip/models/messagesapi/south_korea_options.go
index f80377e..b6f0f5b 100644
--- a/pkg/infobip/models/messagesapi/south_korea_options.go
+++ b/pkg/infobip/models/messagesapi/south_korea_options.go
@@ -21,6 +21,8 @@ var _ MappedNullable = &SouthKoreaOptions{}
 
 // SouthKoreaOptions Use case dependent parameters for sending SMS to phone numbers registered in South Korea.
 type SouthKoreaOptions struct {
+	// Title of the message.
+	Title *string
 	// Reseller identification code: 9-digit registration number in the business registration certificate for South Korea. Resellers should submit this when sending.
 	ResellerCode *int32
 }
@@ -29,6 +31,7 @@ type SouthKoreaOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSouthKoreaOptions() *SouthKoreaOptions {
 	this := SouthKoreaOptions{}
 	return &this
@@ -39,9 +42,42 @@ func NewSouthKoreaOptions() *SouthKoreaOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewSouthKoreaOptionsWithDefaults() *SouthKoreaOptions {
 	this := SouthKoreaOptions{}
+
 	return &this
 }
 
+// GetTitle returns the Title field value if set, zero value otherwise.
+func (o *SouthKoreaOptions) GetTitle() string {
+	if o == nil || IsNil(o.Title) {
+		var ret string
+		return ret
+	}
+	return *o.Title
+}
+
+// GetTitleOk returns a tuple with the Title field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SouthKoreaOptions) GetTitleOk() (*string, bool) {
+	if o == nil || IsNil(o.Title) {
+		return nil, false
+	}
+	return o.Title, true
+}
+
+// HasTitle returns a boolean if a field has been set.
+func (o *SouthKoreaOptions) HasTitle() bool {
+	if o != nil && !IsNil(o.Title) {
+		return true
+	}
+
+	return false
+}
+
+// SetTitle gets a reference to the given string and assigns it to the Title field.
+func (o *SouthKoreaOptions) SetTitle(v string) {
+	o.Title = &v
+}
+
 // GetResellerCode returns the ResellerCode field value if set, zero value otherwise.
 func (o *SouthKoreaOptions) GetResellerCode() int32 {
 	if o == nil || IsNil(o.ResellerCode) {
@@ -84,6 +120,9 @@ func (o SouthKoreaOptions) MarshalJSON() ([]byte, error) {
 
 func (o SouthKoreaOptions) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Title) {
+		toSerialize["title"] = o.Title
+	}
 	if !IsNil(o.ResellerCode) {
 		toSerialize["resellerCode"] = o.ResellerCode
 	}
diff --git a/pkg/infobip/models/messagesapi/template.go b/pkg/infobip/models/messagesapi/template.go
index f41bbc2..153354f 100644
--- a/pkg/infobip/models/messagesapi/template.go
+++ b/pkg/infobip/models/messagesapi/template.go
@@ -35,6 +35,7 @@ type _Template Template
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTemplate(templateName string) *Template {
 	this := Template{}
 	this.TemplateName = templateName
@@ -46,6 +47,7 @@ func NewTemplate(templateName string) *Template {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateWithDefaults() *Template {
 	this := Template{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_carousel_body.go b/pkg/infobip/models/messagesapi/template_carousel_body.go
index 9a64620..2cb2880 100644
--- a/pkg/infobip/models/messagesapi/template_carousel_body.go
+++ b/pkg/infobip/models/messagesapi/template_carousel_body.go
@@ -34,7 +34,7 @@ type _TemplateCarouselBody TemplateCarouselBody
 // will change when the set of required properties is changed
 func NewTemplateCarouselBody(cards []TemplateCarouselCard) *TemplateCarouselBody {
 	this := TemplateCarouselBody{}
-	this.Type = TEMPLATEBODYTYPE_CAROUSEL
+	this.Type = "CAROUSEL"
 	this.Cards = cards
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateCarouselBody(cards []TemplateCarouselCard) *TemplateCarouselBody
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateCarouselBodyWithDefaults() *TemplateCarouselBody {
 	this := TemplateCarouselBody{}
+	this.Type = "CAROUSEL"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_carousel_card.go b/pkg/infobip/models/messagesapi/template_carousel_card.go
index 5ed7c27..e8b50d5 100644
--- a/pkg/infobip/models/messagesapi/template_carousel_card.go
+++ b/pkg/infobip/models/messagesapi/template_carousel_card.go
@@ -34,6 +34,7 @@ type _TemplateCarouselCard TemplateCarouselCard
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTemplateCarouselCard(header TemplateCarouselCardHeader) *TemplateCarouselCard {
 	this := TemplateCarouselCard{}
 	this.Header = header
@@ -45,6 +46,7 @@ func NewTemplateCarouselCard(header TemplateCarouselCardHeader) *TemplateCarouse
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateCarouselCardWithDefaults() *TemplateCarouselCard {
 	this := TemplateCarouselCard{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_carousel_card_image_header.go b/pkg/infobip/models/messagesapi/template_carousel_card_image_header.go
index 0ab978b..3e3acd6 100644
--- a/pkg/infobip/models/messagesapi/template_carousel_card_image_header.go
+++ b/pkg/infobip/models/messagesapi/template_carousel_card_image_header.go
@@ -34,7 +34,7 @@ type _TemplateCarouselCardImageHeader TemplateCarouselCardImageHeader
 // will change when the set of required properties is changed
 func NewTemplateCarouselCardImageHeader(url string) *TemplateCarouselCardImageHeader {
 	this := TemplateCarouselCardImageHeader{}
-	this.Type = TEMPLATECAROUSELCARDHEADERTYPE_IMAGE
+	this.Type = "IMAGE"
 	this.Url = url
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateCarouselCardImageHeader(url string) *TemplateCarouselCardImageHe
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateCarouselCardImageHeaderWithDefaults() *TemplateCarouselCardImageHeader {
 	this := TemplateCarouselCardImageHeader{}
+	this.Type = "IMAGE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_carousel_card_video_header.go b/pkg/infobip/models/messagesapi/template_carousel_card_video_header.go
index e58fba3..52451fb 100644
--- a/pkg/infobip/models/messagesapi/template_carousel_card_video_header.go
+++ b/pkg/infobip/models/messagesapi/template_carousel_card_video_header.go
@@ -34,7 +34,7 @@ type _TemplateCarouselCardVideoHeader TemplateCarouselCardVideoHeader
 // will change when the set of required properties is changed
 func NewTemplateCarouselCardVideoHeader(url string) *TemplateCarouselCardVideoHeader {
 	this := TemplateCarouselCardVideoHeader{}
-	this.Type = TEMPLATECAROUSELCARDHEADERTYPE_VIDEO
+	this.Type = "VIDEO"
 	this.Url = url
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateCarouselCardVideoHeader(url string) *TemplateCarouselCardVideoHe
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateCarouselCardVideoHeaderWithDefaults() *TemplateCarouselCardVideoHeader {
 	this := TemplateCarouselCardVideoHeader{}
+	this.Type = "VIDEO"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_catalog_button.go b/pkg/infobip/models/messagesapi/template_catalog_button.go
index 05de721..2f5988e 100644
--- a/pkg/infobip/models/messagesapi/template_catalog_button.go
+++ b/pkg/infobip/models/messagesapi/template_catalog_button.go
@@ -34,7 +34,7 @@ type _TemplateCatalogButton TemplateCatalogButton
 // will change when the set of required properties is changed
 func NewTemplateCatalogButton() *TemplateCatalogButton {
 	this := TemplateCatalogButton{}
-	this.Type = TEMPLATEBUTTONTYPE_CATALOG
+	this.Type = "CATALOG"
 	return &this
 }
 
@@ -43,6 +43,7 @@ func NewTemplateCatalogButton() *TemplateCatalogButton {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateCatalogButtonWithDefaults() *TemplateCatalogButton {
 	this := TemplateCatalogButton{}
+	this.Type = "CATALOG"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_copy_code_button.go b/pkg/infobip/models/messagesapi/template_copy_code_button.go
index 2ef5619..670d17f 100644
--- a/pkg/infobip/models/messagesapi/template_copy_code_button.go
+++ b/pkg/infobip/models/messagesapi/template_copy_code_button.go
@@ -34,7 +34,7 @@ type _TemplateCopyCodeButton TemplateCopyCodeButton
 // will change when the set of required properties is changed
 func NewTemplateCopyCodeButton(code string) *TemplateCopyCodeButton {
 	this := TemplateCopyCodeButton{}
-	this.Type = TEMPLATEBUTTONTYPE_COPY_CODE
+	this.Type = "COPY_CODE"
 	this.Code = code
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateCopyCodeButton(code string) *TemplateCopyCodeButton {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateCopyCodeButtonWithDefaults() *TemplateCopyCodeButton {
 	this := TemplateCopyCodeButton{}
+	this.Type = "COPY_CODE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_document_header.go b/pkg/infobip/models/messagesapi/template_document_header.go
index ddfff98..3573288 100644
--- a/pkg/infobip/models/messagesapi/template_document_header.go
+++ b/pkg/infobip/models/messagesapi/template_document_header.go
@@ -36,7 +36,7 @@ type _TemplateDocumentHeader TemplateDocumentHeader
 // will change when the set of required properties is changed
 func NewTemplateDocumentHeader(url string, filename string) *TemplateDocumentHeader {
 	this := TemplateDocumentHeader{}
-	this.Type = TEMPLATEHEADERTYPE_DOCUMENT
+	this.Type = "DOCUMENT"
 	this.Url = url
 	this.Filename = filename
 	return &this
@@ -47,6 +47,7 @@ func NewTemplateDocumentHeader(url string, filename string) *TemplateDocumentHea
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateDocumentHeaderWithDefaults() *TemplateDocumentHeader {
 	this := TemplateDocumentHeader{}
+	this.Type = "DOCUMENT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_failover.go b/pkg/infobip/models/messagesapi/template_failover.go
index e50148b..aacb584 100644
--- a/pkg/infobip/models/messagesapi/template_failover.go
+++ b/pkg/infobip/models/messagesapi/template_failover.go
@@ -35,6 +35,7 @@ type _TemplateFailover TemplateFailover
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTemplateFailover(channel OutboundTemplateChannel, sender string, template Template) *TemplateFailover {
 	this := TemplateFailover{}
 	this.Channel = channel
@@ -48,6 +49,7 @@ func NewTemplateFailover(channel OutboundTemplateChannel, sender string, templat
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateFailoverWithDefaults() *TemplateFailover {
 	this := TemplateFailover{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_flow_button.go b/pkg/infobip/models/messagesapi/template_flow_button.go
index 7cbe2f7..2b2531a 100644
--- a/pkg/infobip/models/messagesapi/template_flow_button.go
+++ b/pkg/infobip/models/messagesapi/template_flow_button.go
@@ -36,7 +36,7 @@ type _TemplateFlowButton TemplateFlowButton
 // will change when the set of required properties is changed
 func NewTemplateFlowButton() *TemplateFlowButton {
 	this := TemplateFlowButton{}
-	this.Type = TEMPLATEBUTTONTYPE_FLOW
+	this.Type = "FLOW"
 	return &this
 }
 
@@ -45,6 +45,7 @@ func NewTemplateFlowButton() *TemplateFlowButton {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateFlowButtonWithDefaults() *TemplateFlowButton {
 	this := TemplateFlowButton{}
+	this.Type = "FLOW"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_image_header.go b/pkg/infobip/models/messagesapi/template_image_header.go
index a03d03a..14eee53 100644
--- a/pkg/infobip/models/messagesapi/template_image_header.go
+++ b/pkg/infobip/models/messagesapi/template_image_header.go
@@ -34,7 +34,7 @@ type _TemplateImageHeader TemplateImageHeader
 // will change when the set of required properties is changed
 func NewTemplateImageHeader(url string) *TemplateImageHeader {
 	this := TemplateImageHeader{}
-	this.Type = TEMPLATEHEADERTYPE_IMAGE
+	this.Type = "IMAGE"
 	this.Url = url
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateImageHeader(url string) *TemplateImageHeader {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateImageHeaderWithDefaults() *TemplateImageHeader {
 	this := TemplateImageHeader{}
+	this.Type = "IMAGE"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_location_header.go b/pkg/infobip/models/messagesapi/template_location_header.go
index 2be8a7d..184ba29 100644
--- a/pkg/infobip/models/messagesapi/template_location_header.go
+++ b/pkg/infobip/models/messagesapi/template_location_header.go
@@ -36,7 +36,7 @@ type _TemplateLocationHeader TemplateLocationHeader
 // will change when the set of required properties is changed
 func NewTemplateLocationHeader(latitude float64, longitude float64) *TemplateLocationHeader {
 	this := TemplateLocationHeader{}
-	this.Type = TEMPLATEHEADERTYPE_LOCATION
+	this.Type = "LOCATION"
 	this.Latitude = latitude
 	this.Longitude = longitude
 	return &this
@@ -47,6 +47,7 @@ func NewTemplateLocationHeader(latitude float64, longitude float64) *TemplateLoc
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateLocationHeaderWithDefaults() *TemplateLocationHeader {
 	this := TemplateLocationHeader{}
+	this.Type = "LOCATION"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_message.go b/pkg/infobip/models/messagesapi/template_message.go
index 076a07f..f927430 100644
--- a/pkg/infobip/models/messagesapi/template_message.go
+++ b/pkg/infobip/models/messagesapi/template_message.go
@@ -40,6 +40,7 @@ type _TemplateMessage TemplateMessage
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTemplateMessage(channel OutboundTemplateChannel, sender string, destinations []MessageDestination, template Template) *TemplateMessage {
 	this := TemplateMessage{}
 	this.Channel = channel
@@ -54,6 +55,7 @@ func NewTemplateMessage(channel OutboundTemplateChannel, sender string, destinat
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateMessageWithDefaults() *TemplateMessage {
 	this := TemplateMessage{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_message_content.go b/pkg/infobip/models/messagesapi/template_message_content.go
index 801889b..ecc68e3 100644
--- a/pkg/infobip/models/messagesapi/template_message_content.go
+++ b/pkg/infobip/models/messagesapi/template_message_content.go
@@ -33,6 +33,7 @@ type TemplateMessageContent struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTemplateMessageContent() *TemplateMessageContent {
 	this := TemplateMessageContent{}
 	return &this
@@ -43,6 +44,7 @@ func NewTemplateMessageContent() *TemplateMessageContent {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateMessageContentWithDefaults() *TemplateMessageContent {
 	this := TemplateMessageContent{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_multi_product_button.go b/pkg/infobip/models/messagesapi/template_multi_product_button.go
index 41dcd38..dd8459f 100644
--- a/pkg/infobip/models/messagesapi/template_multi_product_button.go
+++ b/pkg/infobip/models/messagesapi/template_multi_product_button.go
@@ -36,7 +36,7 @@ type _TemplateMultiProductButton TemplateMultiProductButton
 // will change when the set of required properties is changed
 func NewTemplateMultiProductButton(sections []TemplateMultiProductButtonSection) *TemplateMultiProductButton {
 	this := TemplateMultiProductButton{}
-	this.Type = TEMPLATEBUTTONTYPE_MULTI_PRODUCT
+	this.Type = "MULTI_PRODUCT"
 	this.Sections = sections
 	return &this
 }
@@ -46,6 +46,7 @@ func NewTemplateMultiProductButton(sections []TemplateMultiProductButtonSection)
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateMultiProductButtonWithDefaults() *TemplateMultiProductButton {
 	this := TemplateMultiProductButton{}
+	this.Type = "MULTI_PRODUCT"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_multi_product_button_section.go b/pkg/infobip/models/messagesapi/template_multi_product_button_section.go
index 2528eae..f351358 100644
--- a/pkg/infobip/models/messagesapi/template_multi_product_button_section.go
+++ b/pkg/infobip/models/messagesapi/template_multi_product_button_section.go
@@ -33,6 +33,7 @@ type _TemplateMultiProductButtonSection TemplateMultiProductButtonSection
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTemplateMultiProductButtonSection(title string, productIds []string) *TemplateMultiProductButtonSection {
 	this := TemplateMultiProductButtonSection{}
 	this.Title = title
@@ -45,6 +46,7 @@ func NewTemplateMultiProductButtonSection(title string, productIds []string) *Te
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateMultiProductButtonSectionWithDefaults() *TemplateMultiProductButtonSection {
 	this := TemplateMultiProductButtonSection{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_open_url_button.go b/pkg/infobip/models/messagesapi/template_open_url_button.go
index 2c254e6..d28cc3b 100644
--- a/pkg/infobip/models/messagesapi/template_open_url_button.go
+++ b/pkg/infobip/models/messagesapi/template_open_url_button.go
@@ -34,7 +34,7 @@ type _TemplateOpenUrlButton TemplateOpenUrlButton
 // will change when the set of required properties is changed
 func NewTemplateOpenUrlButton(suffix string) *TemplateOpenUrlButton {
 	this := TemplateOpenUrlButton{}
-	this.Type = TEMPLATEBUTTONTYPE_OPEN_URL
+	this.Type = "OPEN_URL"
 	this.Suffix = suffix
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateOpenUrlButton(suffix string) *TemplateOpenUrlButton {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateOpenUrlButtonWithDefaults() *TemplateOpenUrlButton {
 	this := TemplateOpenUrlButton{}
+	this.Type = "OPEN_URL"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_phone_number_button.go b/pkg/infobip/models/messagesapi/template_phone_number_button.go
index a48be55..5d79830 100644
--- a/pkg/infobip/models/messagesapi/template_phone_number_button.go
+++ b/pkg/infobip/models/messagesapi/template_phone_number_button.go
@@ -32,7 +32,7 @@ type _TemplatePhoneNumberButton TemplatePhoneNumberButton
 // will change when the set of required properties is changed
 func NewTemplatePhoneNumberButton() *TemplatePhoneNumberButton {
 	this := TemplatePhoneNumberButton{}
-	this.Type = TEMPLATEBUTTONTYPE_PHONE_NUMBER
+	this.Type = "PHONE_NUMBER"
 	return &this
 }
 
@@ -41,6 +41,7 @@ func NewTemplatePhoneNumberButton() *TemplatePhoneNumberButton {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplatePhoneNumberButtonWithDefaults() *TemplatePhoneNumberButton {
 	this := TemplatePhoneNumberButton{}
+	this.Type = "PHONE_NUMBER"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_quick_reply_button.go b/pkg/infobip/models/messagesapi/template_quick_reply_button.go
index 1e9cdc1..ca577eb 100644
--- a/pkg/infobip/models/messagesapi/template_quick_reply_button.go
+++ b/pkg/infobip/models/messagesapi/template_quick_reply_button.go
@@ -34,7 +34,7 @@ type _TemplateQuickReplyButton TemplateQuickReplyButton
 // will change when the set of required properties is changed
 func NewTemplateQuickReplyButton(postbackData string) *TemplateQuickReplyButton {
 	this := TemplateQuickReplyButton{}
-	this.Type = TEMPLATEBUTTONTYPE_QUICK_REPLY
+	this.Type = "QUICK_REPLY"
 	this.PostbackData = postbackData
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateQuickReplyButton(postbackData string) *TemplateQuickReplyButton
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateQuickReplyButtonWithDefaults() *TemplateQuickReplyButton {
 	this := TemplateQuickReplyButton{}
+	this.Type = "QUICK_REPLY"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_text_body.go b/pkg/infobip/models/messagesapi/template_text_body.go
index 567bfde..831a41b 100644
--- a/pkg/infobip/models/messagesapi/template_text_body.go
+++ b/pkg/infobip/models/messagesapi/template_text_body.go
@@ -22,7 +22,6 @@ var _ MappedNullable = &TemplateTextBody{}
 // TemplateTextBody Key value pairs that will be replaced during message sending. Valid example `{\"1\": \"John\", \"2\": \"Smith\", \"type\": \"TEXT\"}`.
 type TemplateTextBody struct {
 	Type TemplateBodyType
-	AdditionalProperties map[string]interface{}
 }
 
 type _TemplateTextBody TemplateTextBody
@@ -33,7 +32,7 @@ type _TemplateTextBody TemplateTextBody
 // will change when the set of required properties is changed
 func NewTemplateTextBody() *TemplateTextBody {
 	this := TemplateTextBody{}
-	this.Type = TEMPLATEBODYTYPE_TEXT
+	this.Type = "TEXT"
 	return &this
 }
 
@@ -42,6 +41,7 @@ func NewTemplateTextBody() *TemplateTextBody {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateTextBodyWithDefaults() *TemplateTextBody {
 	this := TemplateTextBody{}
+	this.Type = "TEXT"
 	return &this
 }
 
@@ -56,11 +56,6 @@ func (o TemplateTextBody) MarshalJSON() ([]byte, error) {
 func (o TemplateTextBody) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	toSerialize["type"] = o.Type
-	
-	for key, value := range o.AdditionalProperties {
-		toSerialize[key] = value
-	}
-
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_text_header.go b/pkg/infobip/models/messagesapi/template_text_header.go
index 88e4bdc..39fc14a 100644
--- a/pkg/infobip/models/messagesapi/template_text_header.go
+++ b/pkg/infobip/models/messagesapi/template_text_header.go
@@ -22,7 +22,6 @@ var _ MappedNullable = &TemplateTextHeader{}
 // TemplateTextHeader Key value pairs that will be replaced during message sending in a header. Valid example `{\"1\": \"John\", \"2\": \"Smith\", \"type\": \"TEXT\"}`
 type TemplateTextHeader struct {
 	Type TemplateHeaderType
-	AdditionalProperties map[string]interface{}
 }
 
 type _TemplateTextHeader TemplateTextHeader
@@ -33,7 +32,7 @@ type _TemplateTextHeader TemplateTextHeader
 // will change when the set of required properties is changed
 func NewTemplateTextHeader() *TemplateTextHeader {
 	this := TemplateTextHeader{}
-	this.Type = TEMPLATEHEADERTYPE_TEXT
+	this.Type = "TEXT"
 	return &this
 }
 
@@ -42,6 +41,7 @@ func NewTemplateTextHeader() *TemplateTextHeader {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateTextHeaderWithDefaults() *TemplateTextHeader {
 	this := TemplateTextHeader{}
+	this.Type = "TEXT"
 	return &this
 }
 
@@ -56,11 +56,6 @@ func (o TemplateTextHeader) MarshalJSON() ([]byte, error) {
 func (o TemplateTextHeader) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	toSerialize["type"] = o.Type
-
-	for key, value := range o.AdditionalProperties {
-		toSerialize[key] = value
-	}
-
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/messagesapi/template_video_header.go b/pkg/infobip/models/messagesapi/template_video_header.go
index ee20dd9..decdb8a 100644
--- a/pkg/infobip/models/messagesapi/template_video_header.go
+++ b/pkg/infobip/models/messagesapi/template_video_header.go
@@ -34,7 +34,7 @@ type _TemplateVideoHeader TemplateVideoHeader
 // will change when the set of required properties is changed
 func NewTemplateVideoHeader(url string) *TemplateVideoHeader {
 	this := TemplateVideoHeader{}
-	this.Type = TEMPLATEHEADERTYPE_VIDEO
+	this.Type = "VIDEO"
 	this.Url = url
 	return &this
 }
@@ -44,6 +44,7 @@ func NewTemplateVideoHeader(url string) *TemplateVideoHeader {
 // but it doesn't guarantee that properties required by API are set
 func NewTemplateVideoHeaderWithDefaults() *TemplateVideoHeader {
 	this := TemplateVideoHeader{}
+	this.Type = "VIDEO"
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/to_destination.go b/pkg/infobip/models/messagesapi/to_destination.go
index 9b8ce30..35880e6 100644
--- a/pkg/infobip/models/messagesapi/to_destination.go
+++ b/pkg/infobip/models/messagesapi/to_destination.go
@@ -33,6 +33,7 @@ type _ToDestination ToDestination
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewToDestination(to string) *ToDestination {
 	this := ToDestination{}
 	this.To = to
@@ -44,6 +45,7 @@ func NewToDestination(to string) *ToDestination {
 // but it doesn't guarantee that properties required by API are set
 func NewToDestinationWithDefaults() *ToDestination {
 	this := ToDestination{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/turkey_iys_options.go b/pkg/infobip/models/messagesapi/turkey_iys_options.go
index 0667dfd..8d4327b 100644
--- a/pkg/infobip/models/messagesapi/turkey_iys_options.go
+++ b/pkg/infobip/models/messagesapi/turkey_iys_options.go
@@ -32,6 +32,7 @@ type _TurkeyIysOptions TurkeyIysOptions
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTurkeyIysOptions(recipientType RecipientType) *TurkeyIysOptions {
 	this := TurkeyIysOptions{}
 	this.RecipientType = recipientType
@@ -43,6 +44,7 @@ func NewTurkeyIysOptions(recipientType RecipientType) *TurkeyIysOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewTurkeyIysOptionsWithDefaults() *TurkeyIysOptions {
 	this := TurkeyIysOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/messagesapi/url_options.go b/pkg/infobip/models/messagesapi/url_options.go
index 3236cf9..eff011e 100644
--- a/pkg/infobip/models/messagesapi/url_options.go
+++ b/pkg/infobip/models/messagesapi/url_options.go
@@ -37,6 +37,7 @@ type UrlOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewUrlOptions() *UrlOptions {
 	this := UrlOptions{}
 	var shortenUrl bool = true
@@ -53,6 +54,7 @@ func NewUrlOptions() *UrlOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewUrlOptionsWithDefaults() *UrlOptions {
 	this := UrlOptions{}
+
 	var shortenUrl bool = true
 	this.ShortenUrl = &shortenUrl
 	var trackClicks bool = true
diff --git a/pkg/infobip/models/messagesapi/validation_bad_response.go b/pkg/infobip/models/messagesapi/validation_bad_response.go
new file mode 100644
index 0000000..b8e79af
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/validation_bad_response.go
@@ -0,0 +1,215 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ValidationBadResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ValidationBadResponse{}
+
+// ValidationBadResponse struct for ValidationBadResponse
+type ValidationBadResponse struct {
+	// A detailed description of an error.
+	Description string
+	// An action that should be taken to recover from the error.
+	Action string
+	// List of violations that caused the error.
+	Violations []ApiErrorViolation
+	// List of violations that may be omitted, but is recommended to address.
+	SkippableViolations []ApiErrorViolation
+}
+
+type _ValidationBadResponse ValidationBadResponse
+
+// NewValidationBadResponse instantiates a new ValidationBadResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewValidationBadResponse(description string, action string, violations []ApiErrorViolation) *ValidationBadResponse {
+	this := ValidationBadResponse{}
+	this.Description = description
+	this.Action = action
+	this.Violations = violations
+	return &this
+}
+
+// NewValidationBadResponseWithDefaults instantiates a new ValidationBadResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewValidationBadResponseWithDefaults() *ValidationBadResponse {
+	this := ValidationBadResponse{}
+
+	return &this
+}
+
+// GetDescription returns the Description field value
+func (o *ValidationBadResponse) GetDescription() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value
+// and a boolean to check if the value has been set.
+func (o *ValidationBadResponse) GetDescriptionOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Description, true
+}
+
+// SetDescription sets field value
+func (o *ValidationBadResponse) SetDescription(v string) {
+	o.Description = v
+}
+
+// GetAction returns the Action field value
+func (o *ValidationBadResponse) GetAction() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Action
+}
+
+// GetActionOk returns a tuple with the Action field value
+// and a boolean to check if the value has been set.
+func (o *ValidationBadResponse) GetActionOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Action, true
+}
+
+// SetAction sets field value
+func (o *ValidationBadResponse) SetAction(v string) {
+	o.Action = v
+}
+
+// GetViolations returns the Violations field value
+func (o *ValidationBadResponse) GetViolations() []ApiErrorViolation {
+	if o == nil {
+		var ret []ApiErrorViolation
+		return ret
+	}
+
+	return o.Violations
+}
+
+// GetViolationsOk returns a tuple with the Violations field value
+// and a boolean to check if the value has been set.
+func (o *ValidationBadResponse) GetViolationsOk() ([]ApiErrorViolation, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Violations, true
+}
+
+// SetViolations sets field value
+func (o *ValidationBadResponse) SetViolations(v []ApiErrorViolation) {
+	o.Violations = v
+}
+
+// GetSkippableViolations returns the SkippableViolations field value if set, zero value otherwise.
+func (o *ValidationBadResponse) GetSkippableViolations() []ApiErrorViolation {
+	if o == nil || IsNil(o.SkippableViolations) {
+		var ret []ApiErrorViolation
+		return ret
+	}
+	return o.SkippableViolations
+}
+
+// GetSkippableViolationsOk returns a tuple with the SkippableViolations field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationBadResponse) GetSkippableViolationsOk() ([]ApiErrorViolation, bool) {
+	if o == nil || IsNil(o.SkippableViolations) {
+		return nil, false
+	}
+	return o.SkippableViolations, true
+}
+
+// HasSkippableViolations returns a boolean if a field has been set.
+func (o *ValidationBadResponse) HasSkippableViolations() bool {
+	if o != nil && !IsNil(o.SkippableViolations) {
+		return true
+	}
+
+	return false
+}
+
+// SetSkippableViolations gets a reference to the given []ApiErrorViolation and assigns it to the SkippableViolations field.
+func (o *ValidationBadResponse) SetSkippableViolations(v []ApiErrorViolation) {
+	o.SkippableViolations = v
+}
+
+func (o ValidationBadResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ValidationBadResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["description"] = o.Description
+	toSerialize["action"] = o.Action
+	toSerialize["violations"] = o.Violations
+	if !IsNil(o.SkippableViolations) {
+		toSerialize["skippableViolations"] = o.SkippableViolations
+	}
+	return toSerialize, nil
+}
+
+type NullableValidationBadResponse struct {
+	value *ValidationBadResponse
+	isSet bool
+}
+
+func (v NullableValidationBadResponse) Get() *ValidationBadResponse {
+	return v.value
+}
+
+func (v *NullableValidationBadResponse) Set(val *ValidationBadResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableValidationBadResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableValidationBadResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableValidationBadResponse(val *ValidationBadResponse) *NullableValidationBadResponse {
+	return &NullableValidationBadResponse{value: val, isSet: true}
+}
+
+func (v NullableValidationBadResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableValidationBadResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/validation_ok_response.go b/pkg/infobip/models/messagesapi/validation_ok_response.go
new file mode 100644
index 0000000..85af880
--- /dev/null
+++ b/pkg/infobip/models/messagesapi/validation_ok_response.go
@@ -0,0 +1,187 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package messagesapi
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ValidationOkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ValidationOkResponse{}
+
+// ValidationOkResponse struct for ValidationOkResponse
+type ValidationOkResponse struct {
+	// A detailed description.
+	Description string
+	// An action that should be taken.
+	Action string
+	// List of violations that may be omitted, but is recommended to address.
+	SkippableViolations []ApiErrorViolation
+}
+
+type _ValidationOkResponse ValidationOkResponse
+
+// NewValidationOkResponse instantiates a new ValidationOkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewValidationOkResponse(description string, action string) *ValidationOkResponse {
+	this := ValidationOkResponse{}
+	this.Description = description
+	this.Action = action
+	return &this
+}
+
+// NewValidationOkResponseWithDefaults instantiates a new ValidationOkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewValidationOkResponseWithDefaults() *ValidationOkResponse {
+	this := ValidationOkResponse{}
+
+	return &this
+}
+
+// GetDescription returns the Description field value
+func (o *ValidationOkResponse) GetDescription() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value
+// and a boolean to check if the value has been set.
+func (o *ValidationOkResponse) GetDescriptionOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Description, true
+}
+
+// SetDescription sets field value
+func (o *ValidationOkResponse) SetDescription(v string) {
+	o.Description = v
+}
+
+// GetAction returns the Action field value
+func (o *ValidationOkResponse) GetAction() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Action
+}
+
+// GetActionOk returns a tuple with the Action field value
+// and a boolean to check if the value has been set.
+func (o *ValidationOkResponse) GetActionOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Action, true
+}
+
+// SetAction sets field value
+func (o *ValidationOkResponse) SetAction(v string) {
+	o.Action = v
+}
+
+// GetSkippableViolations returns the SkippableViolations field value if set, zero value otherwise.
+func (o *ValidationOkResponse) GetSkippableViolations() []ApiErrorViolation {
+	if o == nil || IsNil(o.SkippableViolations) {
+		var ret []ApiErrorViolation
+		return ret
+	}
+	return o.SkippableViolations
+}
+
+// GetSkippableViolationsOk returns a tuple with the SkippableViolations field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ValidationOkResponse) GetSkippableViolationsOk() ([]ApiErrorViolation, bool) {
+	if o == nil || IsNil(o.SkippableViolations) {
+		return nil, false
+	}
+	return o.SkippableViolations, true
+}
+
+// HasSkippableViolations returns a boolean if a field has been set.
+func (o *ValidationOkResponse) HasSkippableViolations() bool {
+	if o != nil && !IsNil(o.SkippableViolations) {
+		return true
+	}
+
+	return false
+}
+
+// SetSkippableViolations gets a reference to the given []ApiErrorViolation and assigns it to the SkippableViolations field.
+func (o *ValidationOkResponse) SetSkippableViolations(v []ApiErrorViolation) {
+	o.SkippableViolations = v
+}
+
+func (o ValidationOkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ValidationOkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["description"] = o.Description
+	toSerialize["action"] = o.Action
+	if !IsNil(o.SkippableViolations) {
+		toSerialize["skippableViolations"] = o.SkippableViolations
+	}
+	return toSerialize, nil
+}
+
+type NullableValidationOkResponse struct {
+	value *ValidationOkResponse
+	isSet bool
+}
+
+func (v NullableValidationOkResponse) Get() *ValidationOkResponse {
+	return v.value
+}
+
+func (v *NullableValidationOkResponse) Set(val *ValidationOkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableValidationOkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableValidationOkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableValidationOkResponse(val *ValidationOkResponse) *NullableValidationOkResponse {
+	return &NullableValidationOkResponse{value: val, isSet: true}
+}
+
+func (v NullableValidationOkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableValidationOkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/messagesapi/validity_period.go b/pkg/infobip/models/messagesapi/validity_period.go
index 8072b0d..287ff90 100644
--- a/pkg/infobip/models/messagesapi/validity_period.go
+++ b/pkg/infobip/models/messagesapi/validity_period.go
@@ -32,6 +32,7 @@ type _ValidityPeriod ValidityPeriod
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewValidityPeriod(amount int32) *ValidityPeriod {
 	this := ValidityPeriod{}
 	this.Amount = amount
@@ -45,6 +46,7 @@ func NewValidityPeriod(amount int32) *ValidityPeriod {
 // but it doesn't guarantee that properties required by API are set
 func NewValidityPeriodWithDefaults() *ValidityPeriod {
 	this := ValidityPeriod{}
+
 	var timeUnit ValidityPeriodTimeUnit = VALIDITYPERIODTIMEUNIT_MINUTES
 	this.TimeUnit = &timeUnit
 	return &this
diff --git a/pkg/infobip/models/moments/api_exception.go b/pkg/infobip/models/moments/api_exception.go
new file mode 100644
index 0000000..db1ff3b
--- /dev/null
+++ b/pkg/infobip/models/moments/api_exception.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiException type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiException{}
+
+// ApiException struct for ApiException
+type ApiException struct {
+	RequestError *ApiRequestError
+}
+
+// NewApiException instantiates a new ApiException object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiException() *ApiException {
+	this := ApiException{}
+	return &this
+}
+
+// NewApiExceptionWithDefaults instantiates a new ApiException object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiExceptionWithDefaults() *ApiException {
+	this := ApiException{}
+
+	return &this
+}
+
+// GetRequestError returns the RequestError field value if set, zero value otherwise.
+func (o *ApiException) GetRequestError() ApiRequestError {
+	if o == nil || IsNil(o.RequestError) {
+		var ret ApiRequestError
+		return ret
+	}
+	return *o.RequestError
+}
+
+// GetRequestErrorOk returns a tuple with the RequestError field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiException) GetRequestErrorOk() (*ApiRequestError, bool) {
+	if o == nil || IsNil(o.RequestError) {
+		return nil, false
+	}
+	return o.RequestError, true
+}
+
+// HasRequestError returns a boolean if a field has been set.
+func (o *ApiException) HasRequestError() bool {
+	if o != nil && !IsNil(o.RequestError) {
+		return true
+	}
+
+	return false
+}
+
+// SetRequestError gets a reference to the given ApiRequestError and assigns it to the RequestError field.
+func (o *ApiException) SetRequestError(v ApiRequestError) {
+	o.RequestError = &v
+}
+
+func (o ApiException) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiException) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.RequestError) {
+		toSerialize["requestError"] = o.RequestError
+	}
+	return toSerialize, nil
+}
+
+type NullableApiException struct {
+	value *ApiException
+	isSet bool
+}
+
+func (v NullableApiException) Get() *ApiException {
+	return v.value
+}
+
+func (v *NullableApiException) Set(val *ApiException) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiException) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiException) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiException(val *ApiException) *NullableApiException {
+	return &NullableApiException{value: val, isSet: true}
+}
+
+func (v NullableApiException) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiException) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/api_request_error.go b/pkg/infobip/models/moments/api_request_error.go
new file mode 100644
index 0000000..7b4de64
--- /dev/null
+++ b/pkg/infobip/models/moments/api_request_error.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiRequestError type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiRequestError{}
+
+// ApiRequestError struct for ApiRequestError
+type ApiRequestError struct {
+	ServiceException *ApiRequestErrorDetails
+}
+
+// NewApiRequestError instantiates a new ApiRequestError object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiRequestError() *ApiRequestError {
+	this := ApiRequestError{}
+	return &this
+}
+
+// NewApiRequestErrorWithDefaults instantiates a new ApiRequestError object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiRequestErrorWithDefaults() *ApiRequestError {
+	this := ApiRequestError{}
+
+	return &this
+}
+
+// GetServiceException returns the ServiceException field value if set, zero value otherwise.
+func (o *ApiRequestError) GetServiceException() ApiRequestErrorDetails {
+	if o == nil || IsNil(o.ServiceException) {
+		var ret ApiRequestErrorDetails
+		return ret
+	}
+	return *o.ServiceException
+}
+
+// GetServiceExceptionOk returns a tuple with the ServiceException field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestError) GetServiceExceptionOk() (*ApiRequestErrorDetails, bool) {
+	if o == nil || IsNil(o.ServiceException) {
+		return nil, false
+	}
+	return o.ServiceException, true
+}
+
+// HasServiceException returns a boolean if a field has been set.
+func (o *ApiRequestError) HasServiceException() bool {
+	if o != nil && !IsNil(o.ServiceException) {
+		return true
+	}
+
+	return false
+}
+
+// SetServiceException gets a reference to the given ApiRequestErrorDetails and assigns it to the ServiceException field.
+func (o *ApiRequestError) SetServiceException(v ApiRequestErrorDetails) {
+	o.ServiceException = &v
+}
+
+func (o ApiRequestError) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiRequestError) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ServiceException) {
+		toSerialize["serviceException"] = o.ServiceException
+	}
+	return toSerialize, nil
+}
+
+type NullableApiRequestError struct {
+	value *ApiRequestError
+	isSet bool
+}
+
+func (v NullableApiRequestError) Get() *ApiRequestError {
+	return v.value
+}
+
+func (v *NullableApiRequestError) Set(val *ApiRequestError) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiRequestError) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiRequestError) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiRequestError(val *ApiRequestError) *NullableApiRequestError {
+	return &NullableApiRequestError{value: val, isSet: true}
+}
+
+func (v NullableApiRequestError) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiRequestError) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/api_request_error_details.go b/pkg/infobip/models/moments/api_request_error_details.go
new file mode 100644
index 0000000..80d636c
--- /dev/null
+++ b/pkg/infobip/models/moments/api_request_error_details.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiRequestErrorDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiRequestErrorDetails{}
+
+// ApiRequestErrorDetails struct for ApiRequestErrorDetails
+type ApiRequestErrorDetails struct {
+	// Identifier of the error.
+	MessageId *string
+	// Detailed error description.
+	Text *string
+	// Validation errors.
+	ValidationErrors *map[string][]string
+}
+
+// NewApiRequestErrorDetails instantiates a new ApiRequestErrorDetails object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiRequestErrorDetails() *ApiRequestErrorDetails {
+	this := ApiRequestErrorDetails{}
+	return &this
+}
+
+// NewApiRequestErrorDetailsWithDefaults instantiates a new ApiRequestErrorDetails object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiRequestErrorDetailsWithDefaults() *ApiRequestErrorDetails {
+	this := ApiRequestErrorDetails{}
+
+	return &this
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *ApiRequestErrorDetails) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *ApiRequestErrorDetails) SetText(v string) {
+	o.Text = &v
+}
+
+// GetValidationErrors returns the ValidationErrors field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetValidationErrors() map[string][]string {
+	if o == nil || IsNil(o.ValidationErrors) {
+		var ret map[string][]string
+		return ret
+	}
+	return *o.ValidationErrors
+}
+
+// GetValidationErrorsOk returns a tuple with the ValidationErrors field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetValidationErrorsOk() (*map[string][]string, bool) {
+	if o == nil || IsNil(o.ValidationErrors) {
+		return nil, false
+	}
+	return o.ValidationErrors, true
+}
+
+// HasValidationErrors returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasValidationErrors() bool {
+	if o != nil && !IsNil(o.ValidationErrors) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidationErrors gets a reference to the given map[string][]string and assigns it to the ValidationErrors field.
+func (o *ApiRequestErrorDetails) SetValidationErrors(v map[string][]string) {
+	o.ValidationErrors = &v
+}
+
+func (o ApiRequestErrorDetails) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiRequestErrorDetails) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.ValidationErrors) {
+		toSerialize["validationErrors"] = o.ValidationErrors
+	}
+	return toSerialize, nil
+}
+
+type NullableApiRequestErrorDetails struct {
+	value *ApiRequestErrorDetails
+	isSet bool
+}
+
+func (v NullableApiRequestErrorDetails) Get() *ApiRequestErrorDetails {
+	return v.value
+}
+
+func (v *NullableApiRequestErrorDetails) Set(val *ApiRequestErrorDetails) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiRequestErrorDetails) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiRequestErrorDetails) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiRequestErrorDetails(val *ApiRequestErrorDetails) *NullableApiRequestErrorDetails {
+	return &NullableApiRequestErrorDetails{value: val, isSet: true}
+}
+
+func (v NullableApiRequestErrorDetails) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiRequestErrorDetails) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_add_flow_participant_result.go b/pkg/infobip/models/moments/flow_add_flow_participant_result.go
new file mode 100644
index 0000000..32faaaf
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_add_flow_participant_result.go
@@ -0,0 +1,184 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowAddFlowParticipantResult type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowAddFlowParticipantResult{}
+
+// FlowAddFlowParticipantResult Result of operation for the given participant.
+type FlowAddFlowParticipantResult struct {
+	IdentifyBy  FlowPersonUniqueField
+	Status      FlowAddFlowParticipantStatus
+	ErrorReason *FlowErrorStatusReason
+}
+
+type _FlowAddFlowParticipantResult FlowAddFlowParticipantResult
+
+// NewFlowAddFlowParticipantResult instantiates a new FlowAddFlowParticipantResult object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowAddFlowParticipantResult(identifyBy FlowPersonUniqueField, status FlowAddFlowParticipantStatus) *FlowAddFlowParticipantResult {
+	this := FlowAddFlowParticipantResult{}
+	this.IdentifyBy = identifyBy
+	this.Status = status
+	return &this
+}
+
+// NewFlowAddFlowParticipantResultWithDefaults instantiates a new FlowAddFlowParticipantResult object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowAddFlowParticipantResultWithDefaults() *FlowAddFlowParticipantResult {
+	this := FlowAddFlowParticipantResult{}
+
+	return &this
+}
+
+// GetIdentifyBy returns the IdentifyBy field value
+func (o *FlowAddFlowParticipantResult) GetIdentifyBy() FlowPersonUniqueField {
+	if o == nil {
+		var ret FlowPersonUniqueField
+		return ret
+	}
+
+	return o.IdentifyBy
+}
+
+// GetIdentifyByOk returns a tuple with the IdentifyBy field value
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantResult) GetIdentifyByOk() (*FlowPersonUniqueField, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.IdentifyBy, true
+}
+
+// SetIdentifyBy sets field value
+func (o *FlowAddFlowParticipantResult) SetIdentifyBy(v FlowPersonUniqueField) {
+	o.IdentifyBy = v
+}
+
+// GetStatus returns the Status field value
+func (o *FlowAddFlowParticipantResult) GetStatus() FlowAddFlowParticipantStatus {
+	if o == nil {
+		var ret FlowAddFlowParticipantStatus
+		return ret
+	}
+
+	return o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantResult) GetStatusOk() (*FlowAddFlowParticipantStatus, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Status, true
+}
+
+// SetStatus sets field value
+func (o *FlowAddFlowParticipantResult) SetStatus(v FlowAddFlowParticipantStatus) {
+	o.Status = v
+}
+
+// GetErrorReason returns the ErrorReason field value if set, zero value otherwise.
+func (o *FlowAddFlowParticipantResult) GetErrorReason() FlowErrorStatusReason {
+	if o == nil || IsNil(o.ErrorReason) {
+		var ret FlowErrorStatusReason
+		return ret
+	}
+	return *o.ErrorReason
+}
+
+// GetErrorReasonOk returns a tuple with the ErrorReason field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantResult) GetErrorReasonOk() (*FlowErrorStatusReason, bool) {
+	if o == nil || IsNil(o.ErrorReason) {
+		return nil, false
+	}
+	return o.ErrorReason, true
+}
+
+// HasErrorReason returns a boolean if a field has been set.
+func (o *FlowAddFlowParticipantResult) HasErrorReason() bool {
+	if o != nil && !IsNil(o.ErrorReason) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorReason gets a reference to the given FlowErrorStatusReason and assigns it to the ErrorReason field.
+func (o *FlowAddFlowParticipantResult) SetErrorReason(v FlowErrorStatusReason) {
+	o.ErrorReason = &v
+}
+
+func (o FlowAddFlowParticipantResult) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowAddFlowParticipantResult) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["identifyBy"] = o.IdentifyBy
+	toSerialize["status"] = o.Status
+	if !IsNil(o.ErrorReason) {
+		toSerialize["errorReason"] = o.ErrorReason
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowAddFlowParticipantResult struct {
+	value *FlowAddFlowParticipantResult
+	isSet bool
+}
+
+func (v NullableFlowAddFlowParticipantResult) Get() *FlowAddFlowParticipantResult {
+	return v.value
+}
+
+func (v *NullableFlowAddFlowParticipantResult) Set(val *FlowAddFlowParticipantResult) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowAddFlowParticipantResult) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowAddFlowParticipantResult) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowAddFlowParticipantResult(val *FlowAddFlowParticipantResult) *NullableFlowAddFlowParticipantResult {
+	return &NullableFlowAddFlowParticipantResult{value: val, isSet: true}
+}
+
+func (v NullableFlowAddFlowParticipantResult) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowAddFlowParticipantResult) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_add_flow_participant_status.go b/pkg/infobip/models/moments/flow_add_flow_participant_status.go
new file mode 100644
index 0000000..7073743
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_add_flow_participant_status.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FlowAddFlowParticipantStatus Processing status of the participant.
+type FlowAddFlowParticipantStatus string
+
+// List of FlowAddFlowParticipantStatus
+const (
+	FLOWADDFLOWPARTICIPANTSTATUS_PENDING  FlowAddFlowParticipantStatus = "PENDING"
+	FLOWADDFLOWPARTICIPANTSTATUS_REJECTED FlowAddFlowParticipantStatus = "REJECTED"
+	FLOWADDFLOWPARTICIPANTSTATUS_ACCEPTED FlowAddFlowParticipantStatus = "ACCEPTED"
+)
+
+// All allowed values of FlowAddFlowParticipantStatus enum
+var AllowedFlowAddFlowParticipantStatusEnumValues = []FlowAddFlowParticipantStatus{
+	"PENDING",
+	"REJECTED",
+	"ACCEPTED",
+}
+
+func (v *FlowAddFlowParticipantStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FlowAddFlowParticipantStatus(value)
+	for _, existing := range AllowedFlowAddFlowParticipantStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FlowAddFlowParticipantStatus", value)
+}
+
+// NewFlowAddFlowParticipantStatusFromValue returns a pointer to a valid FlowAddFlowParticipantStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFlowAddFlowParticipantStatusFromValue(v string) (*FlowAddFlowParticipantStatus, error) {
+	ev := FlowAddFlowParticipantStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FlowAddFlowParticipantStatus: valid values are %v", v, AllowedFlowAddFlowParticipantStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FlowAddFlowParticipantStatus) IsValid() bool {
+	for _, existing := range AllowedFlowAddFlowParticipantStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FlowAddFlowParticipantStatus value
+func (v FlowAddFlowParticipantStatus) Ptr() *FlowAddFlowParticipantStatus {
+	return &v
+}
+
+type NullableFlowAddFlowParticipantStatus struct {
+	value *FlowAddFlowParticipantStatus
+	isSet bool
+}
+
+func (v NullableFlowAddFlowParticipantStatus) Get() *FlowAddFlowParticipantStatus {
+	return v.value
+}
+
+func (v *NullableFlowAddFlowParticipantStatus) Set(val *FlowAddFlowParticipantStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowAddFlowParticipantStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowAddFlowParticipantStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowAddFlowParticipantStatus(val *FlowAddFlowParticipantStatus) *NullableFlowAddFlowParticipantStatus {
+	return &NullableFlowAddFlowParticipantStatus{value: val, isSet: true}
+}
+
+func (v NullableFlowAddFlowParticipantStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowAddFlowParticipantStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_add_flow_participants_request.go b/pkg/infobip/models/moments/flow_add_flow_participants_request.go
new file mode 100644
index 0000000..b87cbd8
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_add_flow_participants_request.go
@@ -0,0 +1,196 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowAddFlowParticipantsRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowAddFlowParticipantsRequest{}
+
+// FlowAddFlowParticipantsRequest Request to add given participants to the Flow campaign.
+type FlowAddFlowParticipantsRequest struct {
+	// Array of participants to add.
+	Participants []FlowParticipant
+	// The URL on your callback server on which a report of operation results will be sent.
+	NotifyUrl *string
+	// Additional data will be passed in the request to your callback server along with the operation results report.
+	CallbackData *string
+}
+
+type _FlowAddFlowParticipantsRequest FlowAddFlowParticipantsRequest
+
+// NewFlowAddFlowParticipantsRequest instantiates a new FlowAddFlowParticipantsRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowAddFlowParticipantsRequest(participants []FlowParticipant) *FlowAddFlowParticipantsRequest {
+	this := FlowAddFlowParticipantsRequest{}
+	this.Participants = participants
+	return &this
+}
+
+// NewFlowAddFlowParticipantsRequestWithDefaults instantiates a new FlowAddFlowParticipantsRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowAddFlowParticipantsRequestWithDefaults() *FlowAddFlowParticipantsRequest {
+	this := FlowAddFlowParticipantsRequest{}
+
+	return &this
+}
+
+// GetParticipants returns the Participants field value
+func (o *FlowAddFlowParticipantsRequest) GetParticipants() []FlowParticipant {
+	if o == nil {
+		var ret []FlowParticipant
+		return ret
+	}
+
+	return o.Participants
+}
+
+// GetParticipantsOk returns a tuple with the Participants field value
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantsRequest) GetParticipantsOk() ([]FlowParticipant, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Participants, true
+}
+
+// SetParticipants sets field value
+func (o *FlowAddFlowParticipantsRequest) SetParticipants(v []FlowParticipant) {
+	o.Participants = v
+}
+
+// GetNotifyUrl returns the NotifyUrl field value if set, zero value otherwise.
+func (o *FlowAddFlowParticipantsRequest) GetNotifyUrl() string {
+	if o == nil || IsNil(o.NotifyUrl) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyUrl
+}
+
+// GetNotifyUrlOk returns a tuple with the NotifyUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantsRequest) GetNotifyUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyUrl) {
+		return nil, false
+	}
+	return o.NotifyUrl, true
+}
+
+// HasNotifyUrl returns a boolean if a field has been set.
+func (o *FlowAddFlowParticipantsRequest) HasNotifyUrl() bool {
+	if o != nil && !IsNil(o.NotifyUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyUrl gets a reference to the given string and assigns it to the NotifyUrl field.
+func (o *FlowAddFlowParticipantsRequest) SetNotifyUrl(v string) {
+	o.NotifyUrl = &v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *FlowAddFlowParticipantsRequest) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantsRequest) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *FlowAddFlowParticipantsRequest) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *FlowAddFlowParticipantsRequest) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+func (o FlowAddFlowParticipantsRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowAddFlowParticipantsRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["participants"] = o.Participants
+	if !IsNil(o.NotifyUrl) {
+		toSerialize["notifyUrl"] = o.NotifyUrl
+	}
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowAddFlowParticipantsRequest struct {
+	value *FlowAddFlowParticipantsRequest
+	isSet bool
+}
+
+func (v NullableFlowAddFlowParticipantsRequest) Get() *FlowAddFlowParticipantsRequest {
+	return v.value
+}
+
+func (v *NullableFlowAddFlowParticipantsRequest) Set(val *FlowAddFlowParticipantsRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowAddFlowParticipantsRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowAddFlowParticipantsRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowAddFlowParticipantsRequest(val *FlowAddFlowParticipantsRequest) *NullableFlowAddFlowParticipantsRequest {
+	return &NullableFlowAddFlowParticipantsRequest{value: val, isSet: true}
+}
+
+func (v NullableFlowAddFlowParticipantsRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowAddFlowParticipantsRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_add_flow_participants_response.go b/pkg/infobip/models/moments/flow_add_flow_participants_response.go
new file mode 100644
index 0000000..29cc4a0
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_add_flow_participants_response.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowAddFlowParticipantsResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowAddFlowParticipantsResponse{}
+
+// FlowAddFlowParticipantsResponse struct for FlowAddFlowParticipantsResponse
+type FlowAddFlowParticipantsResponse struct {
+	// Unique identifier of the operation.
+	OperationId string
+}
+
+type _FlowAddFlowParticipantsResponse FlowAddFlowParticipantsResponse
+
+// NewFlowAddFlowParticipantsResponse instantiates a new FlowAddFlowParticipantsResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowAddFlowParticipantsResponse(operationId string) *FlowAddFlowParticipantsResponse {
+	this := FlowAddFlowParticipantsResponse{}
+	this.OperationId = operationId
+	return &this
+}
+
+// NewFlowAddFlowParticipantsResponseWithDefaults instantiates a new FlowAddFlowParticipantsResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowAddFlowParticipantsResponseWithDefaults() *FlowAddFlowParticipantsResponse {
+	this := FlowAddFlowParticipantsResponse{}
+
+	return &this
+}
+
+// GetOperationId returns the OperationId field value
+func (o *FlowAddFlowParticipantsResponse) GetOperationId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.OperationId
+}
+
+// GetOperationIdOk returns a tuple with the OperationId field value
+// and a boolean to check if the value has been set.
+func (o *FlowAddFlowParticipantsResponse) GetOperationIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.OperationId, true
+}
+
+// SetOperationId sets field value
+func (o *FlowAddFlowParticipantsResponse) SetOperationId(v string) {
+	o.OperationId = v
+}
+
+func (o FlowAddFlowParticipantsResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowAddFlowParticipantsResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["operationId"] = o.OperationId
+	return toSerialize, nil
+}
+
+type NullableFlowAddFlowParticipantsResponse struct {
+	value *FlowAddFlowParticipantsResponse
+	isSet bool
+}
+
+func (v NullableFlowAddFlowParticipantsResponse) Get() *FlowAddFlowParticipantsResponse {
+	return v.value
+}
+
+func (v *NullableFlowAddFlowParticipantsResponse) Set(val *FlowAddFlowParticipantsResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowAddFlowParticipantsResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowAddFlowParticipantsResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowAddFlowParticipantsResponse(val *FlowAddFlowParticipantsResponse) *NullableFlowAddFlowParticipantsResponse {
+	return &NullableFlowAddFlowParticipantsResponse{value: val, isSet: true}
+}
+
+func (v NullableFlowAddFlowParticipantsResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowAddFlowParticipantsResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_common_ott_contact.go b/pkg/infobip/models/moments/flow_common_ott_contact.go
new file mode 100644
index 0000000..a7df03b
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_common_ott_contact.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowCommonOttContact type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowCommonOttContact{}
+
+// FlowCommonOttContact A list of person's Kakao Sangdam destinations.
+type FlowCommonOttContact struct {
+	// Application Id on which the user is subscribed.
+	ApplicationId *string
+	// Unique user ID for a person.
+	UserId *string
+	// System data collected from the user's profile.
+	SystemData map[string]interface{}
+}
+
+// NewFlowCommonOttContact instantiates a new FlowCommonOttContact object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowCommonOttContact() *FlowCommonOttContact {
+	this := FlowCommonOttContact{}
+	return &this
+}
+
+// NewFlowCommonOttContactWithDefaults instantiates a new FlowCommonOttContact object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowCommonOttContactWithDefaults() *FlowCommonOttContact {
+	this := FlowCommonOttContact{}
+
+	return &this
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *FlowCommonOttContact) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonOttContact) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *FlowCommonOttContact) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *FlowCommonOttContact) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetUserId returns the UserId field value if set, zero value otherwise.
+func (o *FlowCommonOttContact) GetUserId() string {
+	if o == nil || IsNil(o.UserId) {
+		var ret string
+		return ret
+	}
+	return *o.UserId
+}
+
+// GetUserIdOk returns a tuple with the UserId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonOttContact) GetUserIdOk() (*string, bool) {
+	if o == nil || IsNil(o.UserId) {
+		return nil, false
+	}
+	return o.UserId, true
+}
+
+// HasUserId returns a boolean if a field has been set.
+func (o *FlowCommonOttContact) HasUserId() bool {
+	if o != nil && !IsNil(o.UserId) {
+		return true
+	}
+
+	return false
+}
+
+// SetUserId gets a reference to the given string and assigns it to the UserId field.
+func (o *FlowCommonOttContact) SetUserId(v string) {
+	o.UserId = &v
+}
+
+// GetSystemData returns the SystemData field value if set, zero value otherwise.
+func (o *FlowCommonOttContact) GetSystemData() map[string]interface{} {
+	if o == nil || IsNil(o.SystemData) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.SystemData
+}
+
+// GetSystemDataOk returns a tuple with the SystemData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonOttContact) GetSystemDataOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.SystemData) {
+		return map[string]interface{}{}, false
+	}
+	return o.SystemData, true
+}
+
+// HasSystemData returns a boolean if a field has been set.
+func (o *FlowCommonOttContact) HasSystemData() bool {
+	if o != nil && !IsNil(o.SystemData) {
+		return true
+	}
+
+	return false
+}
+
+// SetSystemData gets a reference to the given map[string]interface{} and assigns it to the SystemData field.
+func (o *FlowCommonOttContact) SetSystemData(v map[string]interface{}) {
+	o.SystemData = v
+}
+
+func (o FlowCommonOttContact) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowCommonOttContact) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.UserId) {
+		toSerialize["userId"] = o.UserId
+	}
+	if !IsNil(o.SystemData) {
+		toSerialize["systemData"] = o.SystemData
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowCommonOttContact struct {
+	value *FlowCommonOttContact
+	isSet bool
+}
+
+func (v NullableFlowCommonOttContact) Get() *FlowCommonOttContact {
+	return v.value
+}
+
+func (v *NullableFlowCommonOttContact) Set(val *FlowCommonOttContact) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowCommonOttContact) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowCommonOttContact) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowCommonOttContact(val *FlowCommonOttContact) *NullableFlowCommonOttContact {
+	return &NullableFlowCommonOttContact{value: val, isSet: true}
+}
+
+func (v NullableFlowCommonOttContact) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowCommonOttContact) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_common_push_contact.go b/pkg/infobip/models/moments/flow_common_push_contact.go
new file mode 100644
index 0000000..03892a2
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_common_push_contact.go
@@ -0,0 +1,240 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowCommonPushContact type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowCommonPushContact{}
+
+// FlowCommonPushContact A list of person's web push destinations.
+type FlowCommonPushContact struct {
+	// Application Id on which the user is subscribed.
+	ApplicationId *string
+	// Push registration ID.
+	RegistrationId *string
+	// Unique user ID for a person.
+	AdditionalData map[string]interface{}
+	// System data collected from the user's profile.
+	SystemData map[string]interface{}
+}
+
+// NewFlowCommonPushContact instantiates a new FlowCommonPushContact object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowCommonPushContact() *FlowCommonPushContact {
+	this := FlowCommonPushContact{}
+	return &this
+}
+
+// NewFlowCommonPushContactWithDefaults instantiates a new FlowCommonPushContact object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowCommonPushContactWithDefaults() *FlowCommonPushContact {
+	this := FlowCommonPushContact{}
+
+	return &this
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *FlowCommonPushContact) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonPushContact) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *FlowCommonPushContact) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *FlowCommonPushContact) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetRegistrationId returns the RegistrationId field value if set, zero value otherwise.
+func (o *FlowCommonPushContact) GetRegistrationId() string {
+	if o == nil || IsNil(o.RegistrationId) {
+		var ret string
+		return ret
+	}
+	return *o.RegistrationId
+}
+
+// GetRegistrationIdOk returns a tuple with the RegistrationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonPushContact) GetRegistrationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.RegistrationId) {
+		return nil, false
+	}
+	return o.RegistrationId, true
+}
+
+// HasRegistrationId returns a boolean if a field has been set.
+func (o *FlowCommonPushContact) HasRegistrationId() bool {
+	if o != nil && !IsNil(o.RegistrationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetRegistrationId gets a reference to the given string and assigns it to the RegistrationId field.
+func (o *FlowCommonPushContact) SetRegistrationId(v string) {
+	o.RegistrationId = &v
+}
+
+// GetAdditionalData returns the AdditionalData field value if set, zero value otherwise.
+func (o *FlowCommonPushContact) GetAdditionalData() map[string]interface{} {
+	if o == nil || IsNil(o.AdditionalData) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.AdditionalData
+}
+
+// GetAdditionalDataOk returns a tuple with the AdditionalData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonPushContact) GetAdditionalDataOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.AdditionalData) {
+		return map[string]interface{}{}, false
+	}
+	return o.AdditionalData, true
+}
+
+// HasAdditionalData returns a boolean if a field has been set.
+func (o *FlowCommonPushContact) HasAdditionalData() bool {
+	if o != nil && !IsNil(o.AdditionalData) {
+		return true
+	}
+
+	return false
+}
+
+// SetAdditionalData gets a reference to the given map[string]interface{} and assigns it to the AdditionalData field.
+func (o *FlowCommonPushContact) SetAdditionalData(v map[string]interface{}) {
+	o.AdditionalData = v
+}
+
+// GetSystemData returns the SystemData field value if set, zero value otherwise.
+func (o *FlowCommonPushContact) GetSystemData() map[string]interface{} {
+	if o == nil || IsNil(o.SystemData) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.SystemData
+}
+
+// GetSystemDataOk returns a tuple with the SystemData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowCommonPushContact) GetSystemDataOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.SystemData) {
+		return map[string]interface{}{}, false
+	}
+	return o.SystemData, true
+}
+
+// HasSystemData returns a boolean if a field has been set.
+func (o *FlowCommonPushContact) HasSystemData() bool {
+	if o != nil && !IsNil(o.SystemData) {
+		return true
+	}
+
+	return false
+}
+
+// SetSystemData gets a reference to the given map[string]interface{} and assigns it to the SystemData field.
+func (o *FlowCommonPushContact) SetSystemData(v map[string]interface{}) {
+	o.SystemData = v
+}
+
+func (o FlowCommonPushContact) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowCommonPushContact) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.RegistrationId) {
+		toSerialize["registrationId"] = o.RegistrationId
+	}
+	if !IsNil(o.AdditionalData) {
+		toSerialize["additionalData"] = o.AdditionalData
+	}
+	if !IsNil(o.SystemData) {
+		toSerialize["systemData"] = o.SystemData
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowCommonPushContact struct {
+	value *FlowCommonPushContact
+	isSet bool
+}
+
+func (v NullableFlowCommonPushContact) Get() *FlowCommonPushContact {
+	return v.value
+}
+
+func (v *NullableFlowCommonPushContact) Set(val *FlowCommonPushContact) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowCommonPushContact) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowCommonPushContact) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowCommonPushContact(val *FlowCommonPushContact) *NullableFlowCommonPushContact {
+	return &NullableFlowCommonPushContact{value: val, isSet: true}
+}
+
+func (v NullableFlowCommonPushContact) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowCommonPushContact) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_email_contact.go b/pkg/infobip/models/moments/flow_email_contact.go
new file mode 100644
index 0000000..aedba75
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_email_contact.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowEmailContact type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowEmailContact{}
+
+// FlowEmailContact A list of person's email addresses. Max 100 emails per person.
+type FlowEmailContact struct {
+	// Person's email address. Must comply with the [email format](https://tools.ietf.org/html/rfc2822) and cannot exceed 255 characters. One person can have up to 100 email addresses.
+	Address *string
+}
+
+// NewFlowEmailContact instantiates a new FlowEmailContact object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowEmailContact() *FlowEmailContact {
+	this := FlowEmailContact{}
+	return &this
+}
+
+// NewFlowEmailContactWithDefaults instantiates a new FlowEmailContact object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowEmailContactWithDefaults() *FlowEmailContact {
+	this := FlowEmailContact{}
+
+	return &this
+}
+
+// GetAddress returns the Address field value if set, zero value otherwise.
+func (o *FlowEmailContact) GetAddress() string {
+	if o == nil || IsNil(o.Address) {
+		var ret string
+		return ret
+	}
+	return *o.Address
+}
+
+// GetAddressOk returns a tuple with the Address field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowEmailContact) GetAddressOk() (*string, bool) {
+	if o == nil || IsNil(o.Address) {
+		return nil, false
+	}
+	return o.Address, true
+}
+
+// HasAddress returns a boolean if a field has been set.
+func (o *FlowEmailContact) HasAddress() bool {
+	if o != nil && !IsNil(o.Address) {
+		return true
+	}
+
+	return false
+}
+
+// SetAddress gets a reference to the given string and assigns it to the Address field.
+func (o *FlowEmailContact) SetAddress(v string) {
+	o.Address = &v
+}
+
+func (o FlowEmailContact) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowEmailContact) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Address) {
+		toSerialize["address"] = o.Address
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowEmailContact struct {
+	value *FlowEmailContact
+	isSet bool
+}
+
+func (v NullableFlowEmailContact) Get() *FlowEmailContact {
+	return v.value
+}
+
+func (v *NullableFlowEmailContact) Set(val *FlowEmailContact) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowEmailContact) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowEmailContact) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowEmailContact(val *FlowEmailContact) *NullableFlowEmailContact {
+	return &NullableFlowEmailContact{value: val, isSet: true}
+}
+
+func (v NullableFlowEmailContact) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowEmailContact) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_error_status_reason.go b/pkg/infobip/models/moments/flow_error_status_reason.go
new file mode 100644
index 0000000..02f0ac0
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_error_status_reason.go
@@ -0,0 +1,120 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FlowErrorStatusReason  Detailed reason for the REJECTED status: * `REJECTED_INVALID_CONTACT` - Person started to be processed but has been rejected as the contact is not recognized. * `REJECTED_ATTRIBUTE_MISSED` - One of the person's attributes specified in the request does not exist or has spelling error. * `REJECTED_PERSON_ALREADY_IN_FLOW` - Person is already in flow. * `REJECTED_PERSON_NOT_ALLOWED_TO_REENTER` - Person is not allowed to re-enter flow now. * `REJECTED_FLOW_ERROR_UNKNOWN` - Generic flow error. * `REJECTED_NOT_ENOUGH_CREDITS` - Your account is out of credits for further submission. Top up your account. For further assistance in topping up or applying for an online account top-up service, you may contact your Account Manager.
+type FlowErrorStatusReason string
+
+// List of FlowErrorStatusReason
+const (
+	FLOWERRORSTATUSREASON_INVALID_CONTACT               FlowErrorStatusReason = "REJECTED_INVALID_CONTACT"
+	FLOWERRORSTATUSREASON_ATTRIBUTE_MISSED              FlowErrorStatusReason = "REJECTED_ATTRIBUTE_MISSED"
+	FLOWERRORSTATUSREASON_PERSON_IN_FLOW                FlowErrorStatusReason = "REJECTED_PERSON_IN_FLOW"
+	FLOWERRORSTATUSREASON_PERSON_NOT_ALLOWED_TO_REENTER FlowErrorStatusReason = "REJECTED_PERSON_NOT_ALLOWED_TO_REENTER"
+	FLOWERRORSTATUSREASON_FLOW_ERROR_UNKNOWN            FlowErrorStatusReason = "REJECTED_FLOW_ERROR_UNKNOWN"
+	FLOWERRORSTATUSREASON_NOT_ENOUGH_CREDITS            FlowErrorStatusReason = "REJECTED_NOT_ENOUGH_CREDITS"
+	FLOWERRORSTATUSREASON_CDP_ERROR_UNKNOWN             FlowErrorStatusReason = "REJECTED_CDP_ERROR_UNKNOWN"
+)
+
+// All allowed values of FlowErrorStatusReason enum
+var AllowedFlowErrorStatusReasonEnumValues = []FlowErrorStatusReason{
+	"REJECTED_INVALID_CONTACT",
+	"REJECTED_ATTRIBUTE_MISSED",
+	"REJECTED_PERSON_IN_FLOW",
+	"REJECTED_PERSON_NOT_ALLOWED_TO_REENTER",
+	"REJECTED_FLOW_ERROR_UNKNOWN",
+	"REJECTED_NOT_ENOUGH_CREDITS",
+	"REJECTED_CDP_ERROR_UNKNOWN",
+}
+
+func (v *FlowErrorStatusReason) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FlowErrorStatusReason(value)
+	for _, existing := range AllowedFlowErrorStatusReasonEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FlowErrorStatusReason", value)
+}
+
+// NewFlowErrorStatusReasonFromValue returns a pointer to a valid FlowErrorStatusReason
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFlowErrorStatusReasonFromValue(v string) (*FlowErrorStatusReason, error) {
+	ev := FlowErrorStatusReason(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FlowErrorStatusReason: valid values are %v", v, AllowedFlowErrorStatusReasonEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FlowErrorStatusReason) IsValid() bool {
+	for _, existing := range AllowedFlowErrorStatusReasonEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FlowErrorStatusReason value
+func (v FlowErrorStatusReason) Ptr() *FlowErrorStatusReason {
+	return &v
+}
+
+type NullableFlowErrorStatusReason struct {
+	value *FlowErrorStatusReason
+	isSet bool
+}
+
+func (v NullableFlowErrorStatusReason) Get() *FlowErrorStatusReason {
+	return v.value
+}
+
+func (v *NullableFlowErrorStatusReason) Set(val *FlowErrorStatusReason) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowErrorStatusReason) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowErrorStatusReason) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowErrorStatusReason(val *FlowErrorStatusReason) *NullableFlowErrorStatusReason {
+	return &NullableFlowErrorStatusReason{value: val, isSet: true}
+}
+
+func (v NullableFlowErrorStatusReason) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowErrorStatusReason) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_exception_response.go b/pkg/infobip/models/moments/flow_exception_response.go
new file mode 100644
index 0000000..aacd9c8
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_exception_response.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowExceptionResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowExceptionResponse{}
+
+// FlowExceptionResponse Response error codes  <table> <tr><th>Error</th><th>ErrorCode</th><th>HTTP status</th></tr> <tr><td>Bad request</td><td>40001</td><td>400</td></tr> <tr><td>Duplicate person</td><td>40002</td><td>400</td></tr> <tr><td>Person manipulation failed</td><td>40003</td><td>400</td></tr> <tr><td>Person already in flow</td><td>40004</td><td>400</td></tr> <tr><td>Flow inactive</td><td>40005</td><td>400</td></tr> <tr><td>Person is not in the flow</td><td>40006</td><td>400</td></tr> <tr><td>Flow not found</td><td>40401</td><td>404</td></tr> <tr><td>Person not found</td><td>40402</td><td>404</td></tr> <tr><td>Action not found</td><td>40403</td><td>404</td></tr> <tr><td>Internal server error</td><td>50001</td><td>500</td></tr> </table>
+type FlowExceptionResponse struct {
+	ErrorCode    *int32
+	ErrorMessage *string
+}
+
+// NewFlowExceptionResponse instantiates a new FlowExceptionResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowExceptionResponse() *FlowExceptionResponse {
+	this := FlowExceptionResponse{}
+	return &this
+}
+
+// NewFlowExceptionResponseWithDefaults instantiates a new FlowExceptionResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowExceptionResponseWithDefaults() *FlowExceptionResponse {
+	this := FlowExceptionResponse{}
+
+	return &this
+}
+
+// GetErrorCode returns the ErrorCode field value if set, zero value otherwise.
+func (o *FlowExceptionResponse) GetErrorCode() int32 {
+	if o == nil || IsNil(o.ErrorCode) {
+		var ret int32
+		return ret
+	}
+	return *o.ErrorCode
+}
+
+// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowExceptionResponse) GetErrorCodeOk() (*int32, bool) {
+	if o == nil || IsNil(o.ErrorCode) {
+		return nil, false
+	}
+	return o.ErrorCode, true
+}
+
+// HasErrorCode returns a boolean if a field has been set.
+func (o *FlowExceptionResponse) HasErrorCode() bool {
+	if o != nil && !IsNil(o.ErrorCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorCode gets a reference to the given int32 and assigns it to the ErrorCode field.
+func (o *FlowExceptionResponse) SetErrorCode(v int32) {
+	o.ErrorCode = &v
+}
+
+// GetErrorMessage returns the ErrorMessage field value if set, zero value otherwise.
+func (o *FlowExceptionResponse) GetErrorMessage() string {
+	if o == nil || IsNil(o.ErrorMessage) {
+		var ret string
+		return ret
+	}
+	return *o.ErrorMessage
+}
+
+// GetErrorMessageOk returns a tuple with the ErrorMessage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowExceptionResponse) GetErrorMessageOk() (*string, bool) {
+	if o == nil || IsNil(o.ErrorMessage) {
+		return nil, false
+	}
+	return o.ErrorMessage, true
+}
+
+// HasErrorMessage returns a boolean if a field has been set.
+func (o *FlowExceptionResponse) HasErrorMessage() bool {
+	if o != nil && !IsNil(o.ErrorMessage) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorMessage gets a reference to the given string and assigns it to the ErrorMessage field.
+func (o *FlowExceptionResponse) SetErrorMessage(v string) {
+	o.ErrorMessage = &v
+}
+
+func (o FlowExceptionResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowExceptionResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ErrorCode) {
+		toSerialize["errorCode"] = o.ErrorCode
+	}
+	if !IsNil(o.ErrorMessage) {
+		toSerialize["errorMessage"] = o.ErrorMessage
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowExceptionResponse struct {
+	value *FlowExceptionResponse
+	isSet bool
+}
+
+func (v NullableFlowExceptionResponse) Get() *FlowExceptionResponse {
+	return v.value
+}
+
+func (v *NullableFlowExceptionResponse) Set(val *FlowExceptionResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowExceptionResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowExceptionResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowExceptionResponse(val *FlowExceptionResponse) *NullableFlowExceptionResponse {
+	return &NullableFlowExceptionResponse{value: val, isSet: true}
+}
+
+func (v NullableFlowExceptionResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowExceptionResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_gender.go b/pkg/infobip/models/moments/flow_gender.go
new file mode 100644
index 0000000..7480b42
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_gender.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FlowGender Person's gender.
+type FlowGender string
+
+// List of FlowGender
+const (
+	FLOWGENDER_MALE   FlowGender = "MALE"
+	FLOWGENDER_FEMALE FlowGender = "FEMALE"
+)
+
+// All allowed values of FlowGender enum
+var AllowedFlowGenderEnumValues = []FlowGender{
+	"MALE",
+	"FEMALE",
+}
+
+func (v *FlowGender) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FlowGender(value)
+	for _, existing := range AllowedFlowGenderEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FlowGender", value)
+}
+
+// NewFlowGenderFromValue returns a pointer to a valid FlowGender
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFlowGenderFromValue(v string) (*FlowGender, error) {
+	ev := FlowGender(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FlowGender: valid values are %v", v, AllowedFlowGenderEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FlowGender) IsValid() bool {
+	for _, existing := range AllowedFlowGenderEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FlowGender value
+func (v FlowGender) Ptr() *FlowGender {
+	return &v
+}
+
+type NullableFlowGender struct {
+	value *FlowGender
+	isSet bool
+}
+
+func (v NullableFlowGender) Get() *FlowGender {
+	return v.value
+}
+
+func (v *NullableFlowGender) Set(val *FlowGender) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowGender) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowGender) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowGender(val *FlowGender) *NullableFlowGender {
+	return &NullableFlowGender{value: val, isSet: true}
+}
+
+func (v NullableFlowGender) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowGender) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_integrations.go b/pkg/infobip/models/moments/flow_integrations.go
new file mode 100644
index 0000000..e9fecb4
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_integrations.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowIntegrations type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowIntegrations{}
+
+// FlowIntegrations Integrations.
+type FlowIntegrations struct {
+	Salesforce *FlowSalesforce
+}
+
+// NewFlowIntegrations instantiates a new FlowIntegrations object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowIntegrations() *FlowIntegrations {
+	this := FlowIntegrations{}
+	return &this
+}
+
+// NewFlowIntegrationsWithDefaults instantiates a new FlowIntegrations object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowIntegrationsWithDefaults() *FlowIntegrations {
+	this := FlowIntegrations{}
+
+	return &this
+}
+
+// GetSalesforce returns the Salesforce field value if set, zero value otherwise.
+func (o *FlowIntegrations) GetSalesforce() FlowSalesforce {
+	if o == nil || IsNil(o.Salesforce) {
+		var ret FlowSalesforce
+		return ret
+	}
+	return *o.Salesforce
+}
+
+// GetSalesforceOk returns a tuple with the Salesforce field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowIntegrations) GetSalesforceOk() (*FlowSalesforce, bool) {
+	if o == nil || IsNil(o.Salesforce) {
+		return nil, false
+	}
+	return o.Salesforce, true
+}
+
+// HasSalesforce returns a boolean if a field has been set.
+func (o *FlowIntegrations) HasSalesforce() bool {
+	if o != nil && !IsNil(o.Salesforce) {
+		return true
+	}
+
+	return false
+}
+
+// SetSalesforce gets a reference to the given FlowSalesforce and assigns it to the Salesforce field.
+func (o *FlowIntegrations) SetSalesforce(v FlowSalesforce) {
+	o.Salesforce = &v
+}
+
+func (o FlowIntegrations) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowIntegrations) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Salesforce) {
+		toSerialize["salesforce"] = o.Salesforce
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowIntegrations struct {
+	value *FlowIntegrations
+	isSet bool
+}
+
+func (v NullableFlowIntegrations) Get() *FlowIntegrations {
+	return v.value
+}
+
+func (v *NullableFlowIntegrations) Set(val *FlowIntegrations) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowIntegrations) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowIntegrations) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowIntegrations(val *FlowIntegrations) *NullableFlowIntegrations {
+	return &NullableFlowIntegrations{value: val, isSet: true}
+}
+
+func (v NullableFlowIntegrations) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowIntegrations) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_origin.go b/pkg/infobip/models/moments/flow_origin.go
new file mode 100644
index 0000000..e936fb8
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_origin.go
@@ -0,0 +1,136 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FlowOrigin The information which describes the source of the last modification of record.
+type FlowOrigin string
+
+// List of FlowOrigin
+const (
+	FLOWORIGIN_API           FlowOrigin = "API"
+	FLOWORIGIN_PORTAL        FlowOrigin = "PORTAL"
+	FLOWORIGIN_WEB_SDK       FlowOrigin = "WEB_SDK"
+	FLOWORIGIN_INTEGRATION   FlowOrigin = "INTEGRATION"
+	FLOWORIGIN_PUSH          FlowOrigin = "PUSH"
+	FLOWORIGIN_FACEBOOK      FlowOrigin = "FACEBOOK"
+	FLOWORIGIN_LINE          FlowOrigin = "LINE"
+	FLOWORIGIN_TELEGRAM      FlowOrigin = "TELEGRAM"
+	FLOWORIGIN_SALESFORCE    FlowOrigin = "SALESFORCE"
+	FLOWORIGIN_DYNAMICS      FlowOrigin = "DYNAMICS"
+	FLOWORIGIN_ZAPIER        FlowOrigin = "ZAPIER"
+	FLOWORIGIN_FORMS         FlowOrigin = "FORMS"
+	FLOWORIGIN_COMPUTED      FlowOrigin = "COMPUTED"
+	FLOWORIGIN_ANSWERS       FlowOrigin = "ANSWERS"
+	FLOWORIGIN_CONVERSATIONS FlowOrigin = "CONVERSATIONS"
+)
+
+// All allowed values of FlowOrigin enum
+var AllowedFlowOriginEnumValues = []FlowOrigin{
+	"API",
+	"PORTAL",
+	"WEB_SDK",
+	"INTEGRATION",
+	"PUSH",
+	"FACEBOOK",
+	"LINE",
+	"TELEGRAM",
+	"SALESFORCE",
+	"DYNAMICS",
+	"ZAPIER",
+	"FORMS",
+	"COMPUTED",
+	"ANSWERS",
+	"CONVERSATIONS",
+}
+
+func (v *FlowOrigin) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FlowOrigin(value)
+	for _, existing := range AllowedFlowOriginEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FlowOrigin", value)
+}
+
+// NewFlowOriginFromValue returns a pointer to a valid FlowOrigin
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFlowOriginFromValue(v string) (*FlowOrigin, error) {
+	ev := FlowOrigin(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FlowOrigin: valid values are %v", v, AllowedFlowOriginEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FlowOrigin) IsValid() bool {
+	for _, existing := range AllowedFlowOriginEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FlowOrigin value
+func (v FlowOrigin) Ptr() *FlowOrigin {
+	return &v
+}
+
+type NullableFlowOrigin struct {
+	value *FlowOrigin
+	isSet bool
+}
+
+func (v NullableFlowOrigin) Get() *FlowOrigin {
+	return v.value
+}
+
+func (v *NullableFlowOrigin) Set(val *FlowOrigin) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowOrigin) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowOrigin) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowOrigin(val *FlowOrigin) *NullableFlowOrigin {
+	return &NullableFlowOrigin{value: val, isSet: true}
+}
+
+func (v NullableFlowOrigin) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowOrigin) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_participant.go b/pkg/infobip/models/moments/flow_participant.go
new file mode 100644
index 0000000..bcf129c
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_participant.go
@@ -0,0 +1,194 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowParticipant type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowParticipant{}
+
+// FlowParticipant Participant to be added to Flow campaign.
+type FlowParticipant struct {
+	IdentifyBy FlowPersonUniqueField
+	// Flow variables to assign to the participant when it is added to the flow.
+	Variables map[string]interface{}
+	Person    *FlowPerson
+}
+
+type _FlowParticipant FlowParticipant
+
+// NewFlowParticipant instantiates a new FlowParticipant object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowParticipant(identifyBy FlowPersonUniqueField) *FlowParticipant {
+	this := FlowParticipant{}
+	this.IdentifyBy = identifyBy
+	return &this
+}
+
+// NewFlowParticipantWithDefaults instantiates a new FlowParticipant object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowParticipantWithDefaults() *FlowParticipant {
+	this := FlowParticipant{}
+
+	return &this
+}
+
+// GetIdentifyBy returns the IdentifyBy field value
+func (o *FlowParticipant) GetIdentifyBy() FlowPersonUniqueField {
+	if o == nil {
+		var ret FlowPersonUniqueField
+		return ret
+	}
+
+	return o.IdentifyBy
+}
+
+// GetIdentifyByOk returns a tuple with the IdentifyBy field value
+// and a boolean to check if the value has been set.
+func (o *FlowParticipant) GetIdentifyByOk() (*FlowPersonUniqueField, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.IdentifyBy, true
+}
+
+// SetIdentifyBy sets field value
+func (o *FlowParticipant) SetIdentifyBy(v FlowPersonUniqueField) {
+	o.IdentifyBy = v
+}
+
+// GetVariables returns the Variables field value if set, zero value otherwise.
+func (o *FlowParticipant) GetVariables() map[string]interface{} {
+	if o == nil || IsNil(o.Variables) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.Variables
+}
+
+// GetVariablesOk returns a tuple with the Variables field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowParticipant) GetVariablesOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.Variables) {
+		return map[string]interface{}{}, false
+	}
+	return o.Variables, true
+}
+
+// HasVariables returns a boolean if a field has been set.
+func (o *FlowParticipant) HasVariables() bool {
+	if o != nil && !IsNil(o.Variables) {
+		return true
+	}
+
+	return false
+}
+
+// SetVariables gets a reference to the given map[string]interface{} and assigns it to the Variables field.
+func (o *FlowParticipant) SetVariables(v map[string]interface{}) {
+	o.Variables = v
+}
+
+// GetPerson returns the Person field value if set, zero value otherwise.
+func (o *FlowParticipant) GetPerson() FlowPerson {
+	if o == nil || IsNil(o.Person) {
+		var ret FlowPerson
+		return ret
+	}
+	return *o.Person
+}
+
+// GetPersonOk returns a tuple with the Person field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowParticipant) GetPersonOk() (*FlowPerson, bool) {
+	if o == nil || IsNil(o.Person) {
+		return nil, false
+	}
+	return o.Person, true
+}
+
+// HasPerson returns a boolean if a field has been set.
+func (o *FlowParticipant) HasPerson() bool {
+	if o != nil && !IsNil(o.Person) {
+		return true
+	}
+
+	return false
+}
+
+// SetPerson gets a reference to the given FlowPerson and assigns it to the Person field.
+func (o *FlowParticipant) SetPerson(v FlowPerson) {
+	o.Person = &v
+}
+
+func (o FlowParticipant) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowParticipant) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["identifyBy"] = o.IdentifyBy
+	if !IsNil(o.Variables) {
+		toSerialize["variables"] = o.Variables
+	}
+	if !IsNil(o.Person) {
+		toSerialize["person"] = o.Person
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowParticipant struct {
+	value *FlowParticipant
+	isSet bool
+}
+
+func (v NullableFlowParticipant) Get() *FlowParticipant {
+	return v.value
+}
+
+func (v *NullableFlowParticipant) Set(val *FlowParticipant) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowParticipant) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowParticipant) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowParticipant(val *FlowParticipant) *NullableFlowParticipant {
+	return &NullableFlowParticipant{value: val, isSet: true}
+}
+
+func (v NullableFlowParticipant) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowParticipant) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_participants_report_response.go b/pkg/infobip/models/moments/flow_participants_report_response.go
new file mode 100644
index 0000000..51d79b7
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_participants_report_response.go
@@ -0,0 +1,215 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowParticipantsReportResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowParticipantsReportResponse{}
+
+// FlowParticipantsReportResponse Summary of processing status for participants in a given operation.
+type FlowParticipantsReportResponse struct {
+	// Unique identifier of the operation.
+	OperationId string
+	// Unique identifier of the flow campaign.
+	CampaignId int64
+	// Additional data will be passed in the request to your callback server along with the operation results report.
+	CallbackData *string
+	// Array with information about each participant submitted for the operation.
+	Participants []FlowAddFlowParticipantResult
+}
+
+type _FlowParticipantsReportResponse FlowParticipantsReportResponse
+
+// NewFlowParticipantsReportResponse instantiates a new FlowParticipantsReportResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowParticipantsReportResponse(operationId string, campaignId int64, participants []FlowAddFlowParticipantResult) *FlowParticipantsReportResponse {
+	this := FlowParticipantsReportResponse{}
+	this.OperationId = operationId
+	this.CampaignId = campaignId
+	this.Participants = participants
+	return &this
+}
+
+// NewFlowParticipantsReportResponseWithDefaults instantiates a new FlowParticipantsReportResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowParticipantsReportResponseWithDefaults() *FlowParticipantsReportResponse {
+	this := FlowParticipantsReportResponse{}
+
+	return &this
+}
+
+// GetOperationId returns the OperationId field value
+func (o *FlowParticipantsReportResponse) GetOperationId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.OperationId
+}
+
+// GetOperationIdOk returns a tuple with the OperationId field value
+// and a boolean to check if the value has been set.
+func (o *FlowParticipantsReportResponse) GetOperationIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.OperationId, true
+}
+
+// SetOperationId sets field value
+func (o *FlowParticipantsReportResponse) SetOperationId(v string) {
+	o.OperationId = v
+}
+
+// GetCampaignId returns the CampaignId field value
+func (o *FlowParticipantsReportResponse) GetCampaignId() int64 {
+	if o == nil {
+		var ret int64
+		return ret
+	}
+
+	return o.CampaignId
+}
+
+// GetCampaignIdOk returns a tuple with the CampaignId field value
+// and a boolean to check if the value has been set.
+func (o *FlowParticipantsReportResponse) GetCampaignIdOk() (*int64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CampaignId, true
+}
+
+// SetCampaignId sets field value
+func (o *FlowParticipantsReportResponse) SetCampaignId(v int64) {
+	o.CampaignId = v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *FlowParticipantsReportResponse) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowParticipantsReportResponse) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *FlowParticipantsReportResponse) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *FlowParticipantsReportResponse) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+// GetParticipants returns the Participants field value
+func (o *FlowParticipantsReportResponse) GetParticipants() []FlowAddFlowParticipantResult {
+	if o == nil {
+		var ret []FlowAddFlowParticipantResult
+		return ret
+	}
+
+	return o.Participants
+}
+
+// GetParticipantsOk returns a tuple with the Participants field value
+// and a boolean to check if the value has been set.
+func (o *FlowParticipantsReportResponse) GetParticipantsOk() ([]FlowAddFlowParticipantResult, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Participants, true
+}
+
+// SetParticipants sets field value
+func (o *FlowParticipantsReportResponse) SetParticipants(v []FlowAddFlowParticipantResult) {
+	o.Participants = v
+}
+
+func (o FlowParticipantsReportResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowParticipantsReportResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["operationId"] = o.OperationId
+	toSerialize["campaignId"] = o.CampaignId
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	toSerialize["participants"] = o.Participants
+	return toSerialize, nil
+}
+
+type NullableFlowParticipantsReportResponse struct {
+	value *FlowParticipantsReportResponse
+	isSet bool
+}
+
+func (v NullableFlowParticipantsReportResponse) Get() *FlowParticipantsReportResponse {
+	return v.value
+}
+
+func (v *NullableFlowParticipantsReportResponse) Set(val *FlowParticipantsReportResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowParticipantsReportResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowParticipantsReportResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowParticipantsReportResponse(val *FlowParticipantsReportResponse) *NullableFlowParticipantsReportResponse {
+	return &NullableFlowParticipantsReportResponse{value: val, isSet: true}
+}
+
+func (v NullableFlowParticipantsReportResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowParticipantsReportResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_person.go b/pkg/infobip/models/moments/flow_person.go
new file mode 100644
index 0000000..dda7d52
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_person.go
@@ -0,0 +1,900 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowPerson type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowPerson{}
+
+// FlowPerson Person attributes. In case a person with either the specified <code>externalId</code> or <code>contactInformation</code> already exists in the People, the persons will be automatically merged. See <a href=\"https://www.infobip.com/docs/api/customer-engagement/moments/add-flow-participants\" target=\"_blank\">endpoint description</a> for more info.
+type FlowPerson struct {
+	// Date and time of creation. Has the following format: yyyy-MM-dd'T'HH:mm:ss.
+	CreatedAt *string
+	// Date and time of last modification. Has the following format: yyyy-MM-dd'T'HH:mm:ss.
+	ModifiedAt *string
+	// Unique id of the entity.
+	Id *int64
+	// Unique ID for a person from your or another external system, 256 characters max.
+	ExternalId *string
+	// Person's first name, 255 characters max.
+	FirstName *string
+	// Person's last name, 255 characters max.
+	LastName *string
+	Type     *FlowType
+	// Person's title, 50 characters max.
+	Address *string
+	// Person's city, 50 characters max.
+	City *string
+	// Person's country, 50 characters max.
+	Country *string
+	Gender  *FlowGender
+	// Person's date of birth, format `YYYY-MM-DD`.
+	BirthDate *string
+	// Person's middle name, 50 characters max.
+	MiddleName *string
+	// Person's preferred language. Must be in two letter ISO (xx) or language-region BCP-47 (xx-YY) format.
+	PreferredLanguage *string
+	// URL for the person's profile picture, 2083 characters max.
+	ProfilePicture *string
+	Origin         *FlowOrigin
+	ModifiedFrom   *FlowOrigin
+	// List of tags that this person has.
+	Tags []string
+	// List of custom attributes for the person, 4096 characters max per value.
+	CustomAttributes   map[string]interface{}
+	ContactInformation *FlowPersonContacts
+	Integrations       *FlowIntegrations
+	// Person's computed attributes grouped by type.
+	ComputedAttributes map[string]interface{}
+}
+
+// NewFlowPerson instantiates a new FlowPerson object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowPerson() *FlowPerson {
+	this := FlowPerson{}
+	return &this
+}
+
+// NewFlowPersonWithDefaults instantiates a new FlowPerson object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowPersonWithDefaults() *FlowPerson {
+	this := FlowPerson{}
+
+	return &this
+}
+
+// GetCreatedAt returns the CreatedAt field value if set, zero value otherwise.
+func (o *FlowPerson) GetCreatedAt() string {
+	if o == nil || IsNil(o.CreatedAt) {
+		var ret string
+		return ret
+	}
+	return *o.CreatedAt
+}
+
+// GetCreatedAtOk returns a tuple with the CreatedAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetCreatedAtOk() (*string, bool) {
+	if o == nil || IsNil(o.CreatedAt) {
+		return nil, false
+	}
+	return o.CreatedAt, true
+}
+
+// HasCreatedAt returns a boolean if a field has been set.
+func (o *FlowPerson) HasCreatedAt() bool {
+	if o != nil && !IsNil(o.CreatedAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreatedAt gets a reference to the given string and assigns it to the CreatedAt field.
+func (o *FlowPerson) SetCreatedAt(v string) {
+	o.CreatedAt = &v
+}
+
+// GetModifiedAt returns the ModifiedAt field value if set, zero value otherwise.
+func (o *FlowPerson) GetModifiedAt() string {
+	if o == nil || IsNil(o.ModifiedAt) {
+		var ret string
+		return ret
+	}
+	return *o.ModifiedAt
+}
+
+// GetModifiedAtOk returns a tuple with the ModifiedAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetModifiedAtOk() (*string, bool) {
+	if o == nil || IsNil(o.ModifiedAt) {
+		return nil, false
+	}
+	return o.ModifiedAt, true
+}
+
+// HasModifiedAt returns a boolean if a field has been set.
+func (o *FlowPerson) HasModifiedAt() bool {
+	if o != nil && !IsNil(o.ModifiedAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetModifiedAt gets a reference to the given string and assigns it to the ModifiedAt field.
+func (o *FlowPerson) SetModifiedAt(v string) {
+	o.ModifiedAt = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *FlowPerson) GetId() int64 {
+	if o == nil || IsNil(o.Id) {
+		var ret int64
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetIdOk() (*int64, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *FlowPerson) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given int64 and assigns it to the Id field.
+func (o *FlowPerson) SetId(v int64) {
+	o.Id = &v
+}
+
+// GetExternalId returns the ExternalId field value if set, zero value otherwise.
+func (o *FlowPerson) GetExternalId() string {
+	if o == nil || IsNil(o.ExternalId) {
+		var ret string
+		return ret
+	}
+	return *o.ExternalId
+}
+
+// GetExternalIdOk returns a tuple with the ExternalId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetExternalIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ExternalId) {
+		return nil, false
+	}
+	return o.ExternalId, true
+}
+
+// HasExternalId returns a boolean if a field has been set.
+func (o *FlowPerson) HasExternalId() bool {
+	if o != nil && !IsNil(o.ExternalId) {
+		return true
+	}
+
+	return false
+}
+
+// SetExternalId gets a reference to the given string and assigns it to the ExternalId field.
+func (o *FlowPerson) SetExternalId(v string) {
+	o.ExternalId = &v
+}
+
+// GetFirstName returns the FirstName field value if set, zero value otherwise.
+func (o *FlowPerson) GetFirstName() string {
+	if o == nil || IsNil(o.FirstName) {
+		var ret string
+		return ret
+	}
+	return *o.FirstName
+}
+
+// GetFirstNameOk returns a tuple with the FirstName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetFirstNameOk() (*string, bool) {
+	if o == nil || IsNil(o.FirstName) {
+		return nil, false
+	}
+	return o.FirstName, true
+}
+
+// HasFirstName returns a boolean if a field has been set.
+func (o *FlowPerson) HasFirstName() bool {
+	if o != nil && !IsNil(o.FirstName) {
+		return true
+	}
+
+	return false
+}
+
+// SetFirstName gets a reference to the given string and assigns it to the FirstName field.
+func (o *FlowPerson) SetFirstName(v string) {
+	o.FirstName = &v
+}
+
+// GetLastName returns the LastName field value if set, zero value otherwise.
+func (o *FlowPerson) GetLastName() string {
+	if o == nil || IsNil(o.LastName) {
+		var ret string
+		return ret
+	}
+	return *o.LastName
+}
+
+// GetLastNameOk returns a tuple with the LastName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetLastNameOk() (*string, bool) {
+	if o == nil || IsNil(o.LastName) {
+		return nil, false
+	}
+	return o.LastName, true
+}
+
+// HasLastName returns a boolean if a field has been set.
+func (o *FlowPerson) HasLastName() bool {
+	if o != nil && !IsNil(o.LastName) {
+		return true
+	}
+
+	return false
+}
+
+// SetLastName gets a reference to the given string and assigns it to the LastName field.
+func (o *FlowPerson) SetLastName(v string) {
+	o.LastName = &v
+}
+
+// GetType returns the Type field value if set, zero value otherwise.
+func (o *FlowPerson) GetType() FlowType {
+	if o == nil || IsNil(o.Type) {
+		var ret FlowType
+		return ret
+	}
+	return *o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetTypeOk() (*FlowType, bool) {
+	if o == nil || IsNil(o.Type) {
+		return nil, false
+	}
+	return o.Type, true
+}
+
+// HasType returns a boolean if a field has been set.
+func (o *FlowPerson) HasType() bool {
+	if o != nil && !IsNil(o.Type) {
+		return true
+	}
+
+	return false
+}
+
+// SetType gets a reference to the given FlowType and assigns it to the Type field.
+func (o *FlowPerson) SetType(v FlowType) {
+	o.Type = &v
+}
+
+// GetAddress returns the Address field value if set, zero value otherwise.
+func (o *FlowPerson) GetAddress() string {
+	if o == nil || IsNil(o.Address) {
+		var ret string
+		return ret
+	}
+	return *o.Address
+}
+
+// GetAddressOk returns a tuple with the Address field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetAddressOk() (*string, bool) {
+	if o == nil || IsNil(o.Address) {
+		return nil, false
+	}
+	return o.Address, true
+}
+
+// HasAddress returns a boolean if a field has been set.
+func (o *FlowPerson) HasAddress() bool {
+	if o != nil && !IsNil(o.Address) {
+		return true
+	}
+
+	return false
+}
+
+// SetAddress gets a reference to the given string and assigns it to the Address field.
+func (o *FlowPerson) SetAddress(v string) {
+	o.Address = &v
+}
+
+// GetCity returns the City field value if set, zero value otherwise.
+func (o *FlowPerson) GetCity() string {
+	if o == nil || IsNil(o.City) {
+		var ret string
+		return ret
+	}
+	return *o.City
+}
+
+// GetCityOk returns a tuple with the City field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetCityOk() (*string, bool) {
+	if o == nil || IsNil(o.City) {
+		return nil, false
+	}
+	return o.City, true
+}
+
+// HasCity returns a boolean if a field has been set.
+func (o *FlowPerson) HasCity() bool {
+	if o != nil && !IsNil(o.City) {
+		return true
+	}
+
+	return false
+}
+
+// SetCity gets a reference to the given string and assigns it to the City field.
+func (o *FlowPerson) SetCity(v string) {
+	o.City = &v
+}
+
+// GetCountry returns the Country field value if set, zero value otherwise.
+func (o *FlowPerson) GetCountry() string {
+	if o == nil || IsNil(o.Country) {
+		var ret string
+		return ret
+	}
+	return *o.Country
+}
+
+// GetCountryOk returns a tuple with the Country field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetCountryOk() (*string, bool) {
+	if o == nil || IsNil(o.Country) {
+		return nil, false
+	}
+	return o.Country, true
+}
+
+// HasCountry returns a boolean if a field has been set.
+func (o *FlowPerson) HasCountry() bool {
+	if o != nil && !IsNil(o.Country) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountry gets a reference to the given string and assigns it to the Country field.
+func (o *FlowPerson) SetCountry(v string) {
+	o.Country = &v
+}
+
+// GetGender returns the Gender field value if set, zero value otherwise.
+func (o *FlowPerson) GetGender() FlowGender {
+	if o == nil || IsNil(o.Gender) {
+		var ret FlowGender
+		return ret
+	}
+	return *o.Gender
+}
+
+// GetGenderOk returns a tuple with the Gender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetGenderOk() (*FlowGender, bool) {
+	if o == nil || IsNil(o.Gender) {
+		return nil, false
+	}
+	return o.Gender, true
+}
+
+// HasGender returns a boolean if a field has been set.
+func (o *FlowPerson) HasGender() bool {
+	if o != nil && !IsNil(o.Gender) {
+		return true
+	}
+
+	return false
+}
+
+// SetGender gets a reference to the given FlowGender and assigns it to the Gender field.
+func (o *FlowPerson) SetGender(v FlowGender) {
+	o.Gender = &v
+}
+
+// GetBirthDate returns the BirthDate field value if set, zero value otherwise.
+func (o *FlowPerson) GetBirthDate() string {
+	if o == nil || IsNil(o.BirthDate) {
+		var ret string
+		return ret
+	}
+	return *o.BirthDate
+}
+
+// GetBirthDateOk returns a tuple with the BirthDate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetBirthDateOk() (*string, bool) {
+	if o == nil || IsNil(o.BirthDate) {
+		return nil, false
+	}
+	return o.BirthDate, true
+}
+
+// HasBirthDate returns a boolean if a field has been set.
+func (o *FlowPerson) HasBirthDate() bool {
+	if o != nil && !IsNil(o.BirthDate) {
+		return true
+	}
+
+	return false
+}
+
+// SetBirthDate gets a reference to the given string and assigns it to the BirthDate field.
+func (o *FlowPerson) SetBirthDate(v string) {
+	o.BirthDate = &v
+}
+
+// GetMiddleName returns the MiddleName field value if set, zero value otherwise.
+func (o *FlowPerson) GetMiddleName() string {
+	if o == nil || IsNil(o.MiddleName) {
+		var ret string
+		return ret
+	}
+	return *o.MiddleName
+}
+
+// GetMiddleNameOk returns a tuple with the MiddleName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetMiddleNameOk() (*string, bool) {
+	if o == nil || IsNil(o.MiddleName) {
+		return nil, false
+	}
+	return o.MiddleName, true
+}
+
+// HasMiddleName returns a boolean if a field has been set.
+func (o *FlowPerson) HasMiddleName() bool {
+	if o != nil && !IsNil(o.MiddleName) {
+		return true
+	}
+
+	return false
+}
+
+// SetMiddleName gets a reference to the given string and assigns it to the MiddleName field.
+func (o *FlowPerson) SetMiddleName(v string) {
+	o.MiddleName = &v
+}
+
+// GetPreferredLanguage returns the PreferredLanguage field value if set, zero value otherwise.
+func (o *FlowPerson) GetPreferredLanguage() string {
+	if o == nil || IsNil(o.PreferredLanguage) {
+		var ret string
+		return ret
+	}
+	return *o.PreferredLanguage
+}
+
+// GetPreferredLanguageOk returns a tuple with the PreferredLanguage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetPreferredLanguageOk() (*string, bool) {
+	if o == nil || IsNil(o.PreferredLanguage) {
+		return nil, false
+	}
+	return o.PreferredLanguage, true
+}
+
+// HasPreferredLanguage returns a boolean if a field has been set.
+func (o *FlowPerson) HasPreferredLanguage() bool {
+	if o != nil && !IsNil(o.PreferredLanguage) {
+		return true
+	}
+
+	return false
+}
+
+// SetPreferredLanguage gets a reference to the given string and assigns it to the PreferredLanguage field.
+func (o *FlowPerson) SetPreferredLanguage(v string) {
+	o.PreferredLanguage = &v
+}
+
+// GetProfilePicture returns the ProfilePicture field value if set, zero value otherwise.
+func (o *FlowPerson) GetProfilePicture() string {
+	if o == nil || IsNil(o.ProfilePicture) {
+		var ret string
+		return ret
+	}
+	return *o.ProfilePicture
+}
+
+// GetProfilePictureOk returns a tuple with the ProfilePicture field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetProfilePictureOk() (*string, bool) {
+	if o == nil || IsNil(o.ProfilePicture) {
+		return nil, false
+	}
+	return o.ProfilePicture, true
+}
+
+// HasProfilePicture returns a boolean if a field has been set.
+func (o *FlowPerson) HasProfilePicture() bool {
+	if o != nil && !IsNil(o.ProfilePicture) {
+		return true
+	}
+
+	return false
+}
+
+// SetProfilePicture gets a reference to the given string and assigns it to the ProfilePicture field.
+func (o *FlowPerson) SetProfilePicture(v string) {
+	o.ProfilePicture = &v
+}
+
+// GetOrigin returns the Origin field value if set, zero value otherwise.
+func (o *FlowPerson) GetOrigin() FlowOrigin {
+	if o == nil || IsNil(o.Origin) {
+		var ret FlowOrigin
+		return ret
+	}
+	return *o.Origin
+}
+
+// GetOriginOk returns a tuple with the Origin field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetOriginOk() (*FlowOrigin, bool) {
+	if o == nil || IsNil(o.Origin) {
+		return nil, false
+	}
+	return o.Origin, true
+}
+
+// HasOrigin returns a boolean if a field has been set.
+func (o *FlowPerson) HasOrigin() bool {
+	if o != nil && !IsNil(o.Origin) {
+		return true
+	}
+
+	return false
+}
+
+// SetOrigin gets a reference to the given FlowOrigin and assigns it to the Origin field.
+func (o *FlowPerson) SetOrigin(v FlowOrigin) {
+	o.Origin = &v
+}
+
+// GetModifiedFrom returns the ModifiedFrom field value if set, zero value otherwise.
+func (o *FlowPerson) GetModifiedFrom() FlowOrigin {
+	if o == nil || IsNil(o.ModifiedFrom) {
+		var ret FlowOrigin
+		return ret
+	}
+	return *o.ModifiedFrom
+}
+
+// GetModifiedFromOk returns a tuple with the ModifiedFrom field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetModifiedFromOk() (*FlowOrigin, bool) {
+	if o == nil || IsNil(o.ModifiedFrom) {
+		return nil, false
+	}
+	return o.ModifiedFrom, true
+}
+
+// HasModifiedFrom returns a boolean if a field has been set.
+func (o *FlowPerson) HasModifiedFrom() bool {
+	if o != nil && !IsNil(o.ModifiedFrom) {
+		return true
+	}
+
+	return false
+}
+
+// SetModifiedFrom gets a reference to the given FlowOrigin and assigns it to the ModifiedFrom field.
+func (o *FlowPerson) SetModifiedFrom(v FlowOrigin) {
+	o.ModifiedFrom = &v
+}
+
+// GetTags returns the Tags field value if set, zero value otherwise.
+func (o *FlowPerson) GetTags() []string {
+	if o == nil || IsNil(o.Tags) {
+		var ret []string
+		return ret
+	}
+	return o.Tags
+}
+
+// GetTagsOk returns a tuple with the Tags field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetTagsOk() ([]string, bool) {
+	if o == nil || IsNil(o.Tags) {
+		return nil, false
+	}
+	return o.Tags, true
+}
+
+// HasTags returns a boolean if a field has been set.
+func (o *FlowPerson) HasTags() bool {
+	if o != nil && !IsNil(o.Tags) {
+		return true
+	}
+
+	return false
+}
+
+// SetTags gets a reference to the given []string and assigns it to the Tags field.
+func (o *FlowPerson) SetTags(v []string) {
+	o.Tags = v
+}
+
+// GetCustomAttributes returns the CustomAttributes field value if set, zero value otherwise.
+func (o *FlowPerson) GetCustomAttributes() map[string]interface{} {
+	if o == nil || IsNil(o.CustomAttributes) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.CustomAttributes
+}
+
+// GetCustomAttributesOk returns a tuple with the CustomAttributes field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetCustomAttributesOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.CustomAttributes) {
+		return map[string]interface{}{}, false
+	}
+	return o.CustomAttributes, true
+}
+
+// HasCustomAttributes returns a boolean if a field has been set.
+func (o *FlowPerson) HasCustomAttributes() bool {
+	if o != nil && !IsNil(o.CustomAttributes) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomAttributes gets a reference to the given map[string]interface{} and assigns it to the CustomAttributes field.
+func (o *FlowPerson) SetCustomAttributes(v map[string]interface{}) {
+	o.CustomAttributes = v
+}
+
+// GetContactInformation returns the ContactInformation field value if set, zero value otherwise.
+func (o *FlowPerson) GetContactInformation() FlowPersonContacts {
+	if o == nil || IsNil(o.ContactInformation) {
+		var ret FlowPersonContacts
+		return ret
+	}
+	return *o.ContactInformation
+}
+
+// GetContactInformationOk returns a tuple with the ContactInformation field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetContactInformationOk() (*FlowPersonContacts, bool) {
+	if o == nil || IsNil(o.ContactInformation) {
+		return nil, false
+	}
+	return o.ContactInformation, true
+}
+
+// HasContactInformation returns a boolean if a field has been set.
+func (o *FlowPerson) HasContactInformation() bool {
+	if o != nil && !IsNil(o.ContactInformation) {
+		return true
+	}
+
+	return false
+}
+
+// SetContactInformation gets a reference to the given FlowPersonContacts and assigns it to the ContactInformation field.
+func (o *FlowPerson) SetContactInformation(v FlowPersonContacts) {
+	o.ContactInformation = &v
+}
+
+// GetIntegrations returns the Integrations field value if set, zero value otherwise.
+func (o *FlowPerson) GetIntegrations() FlowIntegrations {
+	if o == nil || IsNil(o.Integrations) {
+		var ret FlowIntegrations
+		return ret
+	}
+	return *o.Integrations
+}
+
+// GetIntegrationsOk returns a tuple with the Integrations field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetIntegrationsOk() (*FlowIntegrations, bool) {
+	if o == nil || IsNil(o.Integrations) {
+		return nil, false
+	}
+	return o.Integrations, true
+}
+
+// HasIntegrations returns a boolean if a field has been set.
+func (o *FlowPerson) HasIntegrations() bool {
+	if o != nil && !IsNil(o.Integrations) {
+		return true
+	}
+
+	return false
+}
+
+// SetIntegrations gets a reference to the given FlowIntegrations and assigns it to the Integrations field.
+func (o *FlowPerson) SetIntegrations(v FlowIntegrations) {
+	o.Integrations = &v
+}
+
+// GetComputedAttributes returns the ComputedAttributes field value if set, zero value otherwise.
+func (o *FlowPerson) GetComputedAttributes() map[string]interface{} {
+	if o == nil || IsNil(o.ComputedAttributes) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.ComputedAttributes
+}
+
+// GetComputedAttributesOk returns a tuple with the ComputedAttributes field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPerson) GetComputedAttributesOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.ComputedAttributes) {
+		return map[string]interface{}{}, false
+	}
+	return o.ComputedAttributes, true
+}
+
+// HasComputedAttributes returns a boolean if a field has been set.
+func (o *FlowPerson) HasComputedAttributes() bool {
+	if o != nil && !IsNil(o.ComputedAttributes) {
+		return true
+	}
+
+	return false
+}
+
+// SetComputedAttributes gets a reference to the given map[string]interface{} and assigns it to the ComputedAttributes field.
+func (o *FlowPerson) SetComputedAttributes(v map[string]interface{}) {
+	o.ComputedAttributes = v
+}
+
+func (o FlowPerson) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowPerson) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CreatedAt) {
+		toSerialize["createdAt"] = o.CreatedAt
+	}
+	if !IsNil(o.ModifiedAt) {
+		toSerialize["modifiedAt"] = o.ModifiedAt
+	}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.ExternalId) {
+		toSerialize["externalId"] = o.ExternalId
+	}
+	if !IsNil(o.FirstName) {
+		toSerialize["firstName"] = o.FirstName
+	}
+	if !IsNil(o.LastName) {
+		toSerialize["lastName"] = o.LastName
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Address) {
+		toSerialize["address"] = o.Address
+	}
+	if !IsNil(o.City) {
+		toSerialize["city"] = o.City
+	}
+	if !IsNil(o.Country) {
+		toSerialize["country"] = o.Country
+	}
+	if !IsNil(o.Gender) {
+		toSerialize["gender"] = o.Gender
+	}
+	if !IsNil(o.BirthDate) {
+		toSerialize["birthDate"] = o.BirthDate
+	}
+	if !IsNil(o.MiddleName) {
+		toSerialize["middleName"] = o.MiddleName
+	}
+	if !IsNil(o.PreferredLanguage) {
+		toSerialize["preferredLanguage"] = o.PreferredLanguage
+	}
+	if !IsNil(o.ProfilePicture) {
+		toSerialize["profilePicture"] = o.ProfilePicture
+	}
+	if !IsNil(o.Origin) {
+		toSerialize["origin"] = o.Origin
+	}
+	if !IsNil(o.ModifiedFrom) {
+		toSerialize["modifiedFrom"] = o.ModifiedFrom
+	}
+	if !IsNil(o.Tags) {
+		toSerialize["tags"] = o.Tags
+	}
+	if !IsNil(o.CustomAttributes) {
+		toSerialize["customAttributes"] = o.CustomAttributes
+	}
+	if !IsNil(o.ContactInformation) {
+		toSerialize["contactInformation"] = o.ContactInformation
+	}
+	if !IsNil(o.Integrations) {
+		toSerialize["integrations"] = o.Integrations
+	}
+	if !IsNil(o.ComputedAttributes) {
+		toSerialize["computedAttributes"] = o.ComputedAttributes
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowPerson struct {
+	value *FlowPerson
+	isSet bool
+}
+
+func (v NullableFlowPerson) Get() *FlowPerson {
+	return v.value
+}
+
+func (v *NullableFlowPerson) Set(val *FlowPerson) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowPerson) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowPerson) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowPerson(val *FlowPerson) *NullableFlowPerson {
+	return &NullableFlowPerson{value: val, isSet: true}
+}
+
+func (v NullableFlowPerson) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowPerson) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_person_contacts.go b/pkg/infobip/models/moments/flow_person_contacts.go
new file mode 100644
index 0000000..479f474
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_person_contacts.go
@@ -0,0 +1,573 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowPersonContacts type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowPersonContacts{}
+
+// FlowPersonContacts List of phones, emails and other information how a person can be contacted.
+type FlowPersonContacts struct {
+	// A list of person's phone numbers. Max 100 numbers per person.
+	Phone []FlowPhoneContact
+	// A list of person's email addresses. Max 100 emails per person.
+	Email []FlowEmailContact
+	// List of person's push registrations.
+	Push []FlowPushContact
+	// A list of person's Messenger destinations.
+	Facebook []FlowCommonOttContact
+	// A list of person's Line destinations.
+	Line []FlowCommonOttContact
+	// A list of person's Viber Bots destinations.
+	ViberBots []FlowCommonOttContact
+	// A list of person's Live Chat destinations.
+	LiveChat []FlowCommonOttContact
+	// A list of person's Instagram destinations.
+	Instagram []FlowCommonOttContact
+	// A list of person's Telegram destinations.
+	Telegram []FlowCommonOttContact
+	// A list of person's Apple Business Chat destinations.
+	AppleBusinessChat []FlowCommonOttContact
+	// A list of person's web push destinations.
+	Webpush []FlowCommonPushContact
+	// A list of person's Instagram DM destinations.
+	InstagramDm []FlowCommonOttContact
+	// A list of person's Kakao Sangdam destinations.
+	KakaoSangdam []FlowCommonOttContact
+}
+
+// NewFlowPersonContacts instantiates a new FlowPersonContacts object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowPersonContacts() *FlowPersonContacts {
+	this := FlowPersonContacts{}
+	return &this
+}
+
+// NewFlowPersonContactsWithDefaults instantiates a new FlowPersonContacts object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowPersonContactsWithDefaults() *FlowPersonContacts {
+	this := FlowPersonContacts{}
+
+	return &this
+}
+
+// GetPhone returns the Phone field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetPhone() []FlowPhoneContact {
+	if o == nil || IsNil(o.Phone) {
+		var ret []FlowPhoneContact
+		return ret
+	}
+	return o.Phone
+}
+
+// GetPhoneOk returns a tuple with the Phone field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetPhoneOk() ([]FlowPhoneContact, bool) {
+	if o == nil || IsNil(o.Phone) {
+		return nil, false
+	}
+	return o.Phone, true
+}
+
+// HasPhone returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasPhone() bool {
+	if o != nil && !IsNil(o.Phone) {
+		return true
+	}
+
+	return false
+}
+
+// SetPhone gets a reference to the given []FlowPhoneContact and assigns it to the Phone field.
+func (o *FlowPersonContacts) SetPhone(v []FlowPhoneContact) {
+	o.Phone = v
+}
+
+// GetEmail returns the Email field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetEmail() []FlowEmailContact {
+	if o == nil || IsNil(o.Email) {
+		var ret []FlowEmailContact
+		return ret
+	}
+	return o.Email
+}
+
+// GetEmailOk returns a tuple with the Email field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetEmailOk() ([]FlowEmailContact, bool) {
+	if o == nil || IsNil(o.Email) {
+		return nil, false
+	}
+	return o.Email, true
+}
+
+// HasEmail returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasEmail() bool {
+	if o != nil && !IsNil(o.Email) {
+		return true
+	}
+
+	return false
+}
+
+// SetEmail gets a reference to the given []FlowEmailContact and assigns it to the Email field.
+func (o *FlowPersonContacts) SetEmail(v []FlowEmailContact) {
+	o.Email = v
+}
+
+// GetPush returns the Push field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetPush() []FlowPushContact {
+	if o == nil || IsNil(o.Push) {
+		var ret []FlowPushContact
+		return ret
+	}
+	return o.Push
+}
+
+// GetPushOk returns a tuple with the Push field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetPushOk() ([]FlowPushContact, bool) {
+	if o == nil || IsNil(o.Push) {
+		return nil, false
+	}
+	return o.Push, true
+}
+
+// HasPush returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasPush() bool {
+	if o != nil && !IsNil(o.Push) {
+		return true
+	}
+
+	return false
+}
+
+// SetPush gets a reference to the given []FlowPushContact and assigns it to the Push field.
+func (o *FlowPersonContacts) SetPush(v []FlowPushContact) {
+	o.Push = v
+}
+
+// GetFacebook returns the Facebook field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetFacebook() []FlowCommonOttContact {
+	if o == nil || IsNil(o.Facebook) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.Facebook
+}
+
+// GetFacebookOk returns a tuple with the Facebook field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetFacebookOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.Facebook) {
+		return nil, false
+	}
+	return o.Facebook, true
+}
+
+// HasFacebook returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasFacebook() bool {
+	if o != nil && !IsNil(o.Facebook) {
+		return true
+	}
+
+	return false
+}
+
+// SetFacebook gets a reference to the given []FlowCommonOttContact and assigns it to the Facebook field.
+func (o *FlowPersonContacts) SetFacebook(v []FlowCommonOttContact) {
+	o.Facebook = v
+}
+
+// GetLine returns the Line field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetLine() []FlowCommonOttContact {
+	if o == nil || IsNil(o.Line) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.Line
+}
+
+// GetLineOk returns a tuple with the Line field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetLineOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.Line) {
+		return nil, false
+	}
+	return o.Line, true
+}
+
+// HasLine returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasLine() bool {
+	if o != nil && !IsNil(o.Line) {
+		return true
+	}
+
+	return false
+}
+
+// SetLine gets a reference to the given []FlowCommonOttContact and assigns it to the Line field.
+func (o *FlowPersonContacts) SetLine(v []FlowCommonOttContact) {
+	o.Line = v
+}
+
+// GetViberBots returns the ViberBots field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetViberBots() []FlowCommonOttContact {
+	if o == nil || IsNil(o.ViberBots) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.ViberBots
+}
+
+// GetViberBotsOk returns a tuple with the ViberBots field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetViberBotsOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.ViberBots) {
+		return nil, false
+	}
+	return o.ViberBots, true
+}
+
+// HasViberBots returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasViberBots() bool {
+	if o != nil && !IsNil(o.ViberBots) {
+		return true
+	}
+
+	return false
+}
+
+// SetViberBots gets a reference to the given []FlowCommonOttContact and assigns it to the ViberBots field.
+func (o *FlowPersonContacts) SetViberBots(v []FlowCommonOttContact) {
+	o.ViberBots = v
+}
+
+// GetLiveChat returns the LiveChat field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetLiveChat() []FlowCommonOttContact {
+	if o == nil || IsNil(o.LiveChat) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.LiveChat
+}
+
+// GetLiveChatOk returns a tuple with the LiveChat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetLiveChatOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.LiveChat) {
+		return nil, false
+	}
+	return o.LiveChat, true
+}
+
+// HasLiveChat returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasLiveChat() bool {
+	if o != nil && !IsNil(o.LiveChat) {
+		return true
+	}
+
+	return false
+}
+
+// SetLiveChat gets a reference to the given []FlowCommonOttContact and assigns it to the LiveChat field.
+func (o *FlowPersonContacts) SetLiveChat(v []FlowCommonOttContact) {
+	o.LiveChat = v
+}
+
+// GetInstagram returns the Instagram field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetInstagram() []FlowCommonOttContact {
+	if o == nil || IsNil(o.Instagram) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.Instagram
+}
+
+// GetInstagramOk returns a tuple with the Instagram field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetInstagramOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.Instagram) {
+		return nil, false
+	}
+	return o.Instagram, true
+}
+
+// HasInstagram returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasInstagram() bool {
+	if o != nil && !IsNil(o.Instagram) {
+		return true
+	}
+
+	return false
+}
+
+// SetInstagram gets a reference to the given []FlowCommonOttContact and assigns it to the Instagram field.
+func (o *FlowPersonContacts) SetInstagram(v []FlowCommonOttContact) {
+	o.Instagram = v
+}
+
+// GetTelegram returns the Telegram field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetTelegram() []FlowCommonOttContact {
+	if o == nil || IsNil(o.Telegram) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.Telegram
+}
+
+// GetTelegramOk returns a tuple with the Telegram field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetTelegramOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.Telegram) {
+		return nil, false
+	}
+	return o.Telegram, true
+}
+
+// HasTelegram returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasTelegram() bool {
+	if o != nil && !IsNil(o.Telegram) {
+		return true
+	}
+
+	return false
+}
+
+// SetTelegram gets a reference to the given []FlowCommonOttContact and assigns it to the Telegram field.
+func (o *FlowPersonContacts) SetTelegram(v []FlowCommonOttContact) {
+	o.Telegram = v
+}
+
+// GetAppleBusinessChat returns the AppleBusinessChat field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetAppleBusinessChat() []FlowCommonOttContact {
+	if o == nil || IsNil(o.AppleBusinessChat) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.AppleBusinessChat
+}
+
+// GetAppleBusinessChatOk returns a tuple with the AppleBusinessChat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetAppleBusinessChatOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.AppleBusinessChat) {
+		return nil, false
+	}
+	return o.AppleBusinessChat, true
+}
+
+// HasAppleBusinessChat returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasAppleBusinessChat() bool {
+	if o != nil && !IsNil(o.AppleBusinessChat) {
+		return true
+	}
+
+	return false
+}
+
+// SetAppleBusinessChat gets a reference to the given []FlowCommonOttContact and assigns it to the AppleBusinessChat field.
+func (o *FlowPersonContacts) SetAppleBusinessChat(v []FlowCommonOttContact) {
+	o.AppleBusinessChat = v
+}
+
+// GetWebpush returns the Webpush field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetWebpush() []FlowCommonPushContact {
+	if o == nil || IsNil(o.Webpush) {
+		var ret []FlowCommonPushContact
+		return ret
+	}
+	return o.Webpush
+}
+
+// GetWebpushOk returns a tuple with the Webpush field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetWebpushOk() ([]FlowCommonPushContact, bool) {
+	if o == nil || IsNil(o.Webpush) {
+		return nil, false
+	}
+	return o.Webpush, true
+}
+
+// HasWebpush returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasWebpush() bool {
+	if o != nil && !IsNil(o.Webpush) {
+		return true
+	}
+
+	return false
+}
+
+// SetWebpush gets a reference to the given []FlowCommonPushContact and assigns it to the Webpush field.
+func (o *FlowPersonContacts) SetWebpush(v []FlowCommonPushContact) {
+	o.Webpush = v
+}
+
+// GetInstagramDm returns the InstagramDm field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetInstagramDm() []FlowCommonOttContact {
+	if o == nil || IsNil(o.InstagramDm) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.InstagramDm
+}
+
+// GetInstagramDmOk returns a tuple with the InstagramDm field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetInstagramDmOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.InstagramDm) {
+		return nil, false
+	}
+	return o.InstagramDm, true
+}
+
+// HasInstagramDm returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasInstagramDm() bool {
+	if o != nil && !IsNil(o.InstagramDm) {
+		return true
+	}
+
+	return false
+}
+
+// SetInstagramDm gets a reference to the given []FlowCommonOttContact and assigns it to the InstagramDm field.
+func (o *FlowPersonContacts) SetInstagramDm(v []FlowCommonOttContact) {
+	o.InstagramDm = v
+}
+
+// GetKakaoSangdam returns the KakaoSangdam field value if set, zero value otherwise.
+func (o *FlowPersonContacts) GetKakaoSangdam() []FlowCommonOttContact {
+	if o == nil || IsNil(o.KakaoSangdam) {
+		var ret []FlowCommonOttContact
+		return ret
+	}
+	return o.KakaoSangdam
+}
+
+// GetKakaoSangdamOk returns a tuple with the KakaoSangdam field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonContacts) GetKakaoSangdamOk() ([]FlowCommonOttContact, bool) {
+	if o == nil || IsNil(o.KakaoSangdam) {
+		return nil, false
+	}
+	return o.KakaoSangdam, true
+}
+
+// HasKakaoSangdam returns a boolean if a field has been set.
+func (o *FlowPersonContacts) HasKakaoSangdam() bool {
+	if o != nil && !IsNil(o.KakaoSangdam) {
+		return true
+	}
+
+	return false
+}
+
+// SetKakaoSangdam gets a reference to the given []FlowCommonOttContact and assigns it to the KakaoSangdam field.
+func (o *FlowPersonContacts) SetKakaoSangdam(v []FlowCommonOttContact) {
+	o.KakaoSangdam = v
+}
+
+func (o FlowPersonContacts) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowPersonContacts) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Phone) {
+		toSerialize["phone"] = o.Phone
+	}
+	if !IsNil(o.Email) {
+		toSerialize["email"] = o.Email
+	}
+	if !IsNil(o.Push) {
+		toSerialize["push"] = o.Push
+	}
+	if !IsNil(o.Facebook) {
+		toSerialize["facebook"] = o.Facebook
+	}
+	if !IsNil(o.Line) {
+		toSerialize["line"] = o.Line
+	}
+	if !IsNil(o.ViberBots) {
+		toSerialize["viberBots"] = o.ViberBots
+	}
+	if !IsNil(o.LiveChat) {
+		toSerialize["liveChat"] = o.LiveChat
+	}
+	if !IsNil(o.Instagram) {
+		toSerialize["instagram"] = o.Instagram
+	}
+	if !IsNil(o.Telegram) {
+		toSerialize["telegram"] = o.Telegram
+	}
+	if !IsNil(o.AppleBusinessChat) {
+		toSerialize["appleBusinessChat"] = o.AppleBusinessChat
+	}
+	if !IsNil(o.Webpush) {
+		toSerialize["webpush"] = o.Webpush
+	}
+	if !IsNil(o.InstagramDm) {
+		toSerialize["instagramDm"] = o.InstagramDm
+	}
+	if !IsNil(o.KakaoSangdam) {
+		toSerialize["kakaoSangdam"] = o.KakaoSangdam
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowPersonContacts struct {
+	value *FlowPersonContacts
+	isSet bool
+}
+
+func (v NullableFlowPersonContacts) Get() *FlowPersonContacts {
+	return v.value
+}
+
+func (v *NullableFlowPersonContacts) Set(val *FlowPersonContacts) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowPersonContacts) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowPersonContacts) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowPersonContacts(val *FlowPersonContacts) *NullableFlowPersonContacts {
+	return &NullableFlowPersonContacts{value: val, isSet: true}
+}
+
+func (v NullableFlowPersonContacts) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowPersonContacts) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_person_unique_field.go b/pkg/infobip/models/moments/flow_person_unique_field.go
new file mode 100644
index 0000000..388e7e5
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_person_unique_field.go
@@ -0,0 +1,186 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowPersonUniqueField type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowPersonUniqueField{}
+
+// FlowPersonUniqueField Unique identifier of the participant.
+type FlowPersonUniqueField struct {
+	// Unique ID for a person
+	Identifier string
+	Type       FlowPersonUniqueFieldType
+	// Sender or application ID.`sender` is required for all identifier types except `PHONE`, `EMAIL`
+	Sender *string
+}
+
+type _FlowPersonUniqueField FlowPersonUniqueField
+
+// NewFlowPersonUniqueField instantiates a new FlowPersonUniqueField object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowPersonUniqueField(identifier string, type_ FlowPersonUniqueFieldType) *FlowPersonUniqueField {
+	this := FlowPersonUniqueField{}
+	this.Identifier = identifier
+	this.Type = type_
+	return &this
+}
+
+// NewFlowPersonUniqueFieldWithDefaults instantiates a new FlowPersonUniqueField object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowPersonUniqueFieldWithDefaults() *FlowPersonUniqueField {
+	this := FlowPersonUniqueField{}
+
+	return &this
+}
+
+// GetIdentifier returns the Identifier field value
+func (o *FlowPersonUniqueField) GetIdentifier() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Identifier
+}
+
+// GetIdentifierOk returns a tuple with the Identifier field value
+// and a boolean to check if the value has been set.
+func (o *FlowPersonUniqueField) GetIdentifierOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Identifier, true
+}
+
+// SetIdentifier sets field value
+func (o *FlowPersonUniqueField) SetIdentifier(v string) {
+	o.Identifier = v
+}
+
+// GetType returns the Type field value
+func (o *FlowPersonUniqueField) GetType() FlowPersonUniqueFieldType {
+	if o == nil {
+		var ret FlowPersonUniqueFieldType
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *FlowPersonUniqueField) GetTypeOk() (*FlowPersonUniqueFieldType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *FlowPersonUniqueField) SetType(v FlowPersonUniqueFieldType) {
+	o.Type = v
+}
+
+// GetSender returns the Sender field value if set, zero value otherwise.
+func (o *FlowPersonUniqueField) GetSender() string {
+	if o == nil || IsNil(o.Sender) {
+		var ret string
+		return ret
+	}
+	return *o.Sender
+}
+
+// GetSenderOk returns a tuple with the Sender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPersonUniqueField) GetSenderOk() (*string, bool) {
+	if o == nil || IsNil(o.Sender) {
+		return nil, false
+	}
+	return o.Sender, true
+}
+
+// HasSender returns a boolean if a field has been set.
+func (o *FlowPersonUniqueField) HasSender() bool {
+	if o != nil && !IsNil(o.Sender) {
+		return true
+	}
+
+	return false
+}
+
+// SetSender gets a reference to the given string and assigns it to the Sender field.
+func (o *FlowPersonUniqueField) SetSender(v string) {
+	o.Sender = &v
+}
+
+func (o FlowPersonUniqueField) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowPersonUniqueField) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["identifier"] = o.Identifier
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Sender) {
+		toSerialize["sender"] = o.Sender
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowPersonUniqueField struct {
+	value *FlowPersonUniqueField
+	isSet bool
+}
+
+func (v NullableFlowPersonUniqueField) Get() *FlowPersonUniqueField {
+	return v.value
+}
+
+func (v *NullableFlowPersonUniqueField) Set(val *FlowPersonUniqueField) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowPersonUniqueField) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowPersonUniqueField) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowPersonUniqueField(val *FlowPersonUniqueField) *NullableFlowPersonUniqueField {
+	return &NullableFlowPersonUniqueField{value: val, isSet: true}
+}
+
+func (v NullableFlowPersonUniqueField) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowPersonUniqueField) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_person_unique_field_type.go b/pkg/infobip/models/moments/flow_person_unique_field_type.go
new file mode 100644
index 0000000..6b840cb
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_person_unique_field_type.go
@@ -0,0 +1,116 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FlowPersonUniqueFieldType Type of unique ID
+type FlowPersonUniqueFieldType string
+
+// List of FlowPersonUniqueFieldType
+const (
+	FLOWPERSONUNIQUEFIELDTYPE_EMAIL               FlowPersonUniqueFieldType = "EMAIL"
+	FLOWPERSONUNIQUEFIELDTYPE_PHONE               FlowPersonUniqueFieldType = "PHONE"
+	FLOWPERSONUNIQUEFIELDTYPE_FACEBOOK            FlowPersonUniqueFieldType = "FACEBOOK"
+	FLOWPERSONUNIQUEFIELDTYPE_LINE                FlowPersonUniqueFieldType = "LINE"
+	FLOWPERSONUNIQUEFIELDTYPE_APPLE_BUSINESS_CHAT FlowPersonUniqueFieldType = "APPLE_BUSINESS_CHAT"
+)
+
+// All allowed values of FlowPersonUniqueFieldType enum
+var AllowedFlowPersonUniqueFieldTypeEnumValues = []FlowPersonUniqueFieldType{
+	"EMAIL",
+	"PHONE",
+	"FACEBOOK",
+	"LINE",
+	"APPLE_BUSINESS_CHAT",
+}
+
+func (v *FlowPersonUniqueFieldType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FlowPersonUniqueFieldType(value)
+	for _, existing := range AllowedFlowPersonUniqueFieldTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FlowPersonUniqueFieldType", value)
+}
+
+// NewFlowPersonUniqueFieldTypeFromValue returns a pointer to a valid FlowPersonUniqueFieldType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFlowPersonUniqueFieldTypeFromValue(v string) (*FlowPersonUniqueFieldType, error) {
+	ev := FlowPersonUniqueFieldType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FlowPersonUniqueFieldType: valid values are %v", v, AllowedFlowPersonUniqueFieldTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FlowPersonUniqueFieldType) IsValid() bool {
+	for _, existing := range AllowedFlowPersonUniqueFieldTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FlowPersonUniqueFieldType value
+func (v FlowPersonUniqueFieldType) Ptr() *FlowPersonUniqueFieldType {
+	return &v
+}
+
+type NullableFlowPersonUniqueFieldType struct {
+	value *FlowPersonUniqueFieldType
+	isSet bool
+}
+
+func (v NullableFlowPersonUniqueFieldType) Get() *FlowPersonUniqueFieldType {
+	return v.value
+}
+
+func (v *NullableFlowPersonUniqueFieldType) Set(val *FlowPersonUniqueFieldType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowPersonUniqueFieldType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowPersonUniqueFieldType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowPersonUniqueFieldType(val *FlowPersonUniqueFieldType) *NullableFlowPersonUniqueFieldType {
+	return &NullableFlowPersonUniqueFieldType{value: val, isSet: true}
+}
+
+func (v NullableFlowPersonUniqueFieldType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowPersonUniqueFieldType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_phone_contact.go b/pkg/infobip/models/moments/flow_phone_contact.go
new file mode 100644
index 0000000..cafe9b9
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_phone_contact.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowPhoneContact type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowPhoneContact{}
+
+// FlowPhoneContact A list of person's phone numbers. Max 100 numbers per person.
+type FlowPhoneContact struct {
+	// Person's phone number. Must be in [international format](https://en.wikipedia.org/wiki/E.164) and cannot exceed 50 characters. One person can have up to 100 phone numbers.
+	Number *string
+}
+
+// NewFlowPhoneContact instantiates a new FlowPhoneContact object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowPhoneContact() *FlowPhoneContact {
+	this := FlowPhoneContact{}
+	return &this
+}
+
+// NewFlowPhoneContactWithDefaults instantiates a new FlowPhoneContact object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowPhoneContactWithDefaults() *FlowPhoneContact {
+	this := FlowPhoneContact{}
+
+	return &this
+}
+
+// GetNumber returns the Number field value if set, zero value otherwise.
+func (o *FlowPhoneContact) GetNumber() string {
+	if o == nil || IsNil(o.Number) {
+		var ret string
+		return ret
+	}
+	return *o.Number
+}
+
+// GetNumberOk returns a tuple with the Number field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPhoneContact) GetNumberOk() (*string, bool) {
+	if o == nil || IsNil(o.Number) {
+		return nil, false
+	}
+	return o.Number, true
+}
+
+// HasNumber returns a boolean if a field has been set.
+func (o *FlowPhoneContact) HasNumber() bool {
+	if o != nil && !IsNil(o.Number) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumber gets a reference to the given string and assigns it to the Number field.
+func (o *FlowPhoneContact) SetNumber(v string) {
+	o.Number = &v
+}
+
+func (o FlowPhoneContact) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowPhoneContact) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Number) {
+		toSerialize["number"] = o.Number
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowPhoneContact struct {
+	value *FlowPhoneContact
+	isSet bool
+}
+
+func (v NullableFlowPhoneContact) Get() *FlowPhoneContact {
+	return v.value
+}
+
+func (v *NullableFlowPhoneContact) Set(val *FlowPhoneContact) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowPhoneContact) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowPhoneContact) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowPhoneContact(val *FlowPhoneContact) *NullableFlowPhoneContact {
+	return &NullableFlowPhoneContact{value: val, isSet: true}
+}
+
+func (v NullableFlowPhoneContact) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowPhoneContact) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_push_contact.go b/pkg/infobip/models/moments/flow_push_contact.go
new file mode 100644
index 0000000..2393593
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_push_contact.go
@@ -0,0 +1,277 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowPushContact type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowPushContact{}
+
+// FlowPushContact List of person's push registrations.
+type FlowPushContact struct {
+	// Application Id on which the user is subscribed.
+	ApplicationId *string
+	// Push registration ID.
+	RegistrationId *string
+	// Unique user ID for a person.
+	AdditionalData map[string]interface{}
+	// System data collected from the user's profile.
+	SystemData map[string]interface{}
+	// Set to true if this device is a primary device of a user among other devices.
+	IsPrimary *bool
+}
+
+// NewFlowPushContact instantiates a new FlowPushContact object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowPushContact() *FlowPushContact {
+	this := FlowPushContact{}
+	return &this
+}
+
+// NewFlowPushContactWithDefaults instantiates a new FlowPushContact object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowPushContactWithDefaults() *FlowPushContact {
+	this := FlowPushContact{}
+
+	return &this
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *FlowPushContact) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPushContact) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *FlowPushContact) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *FlowPushContact) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetRegistrationId returns the RegistrationId field value if set, zero value otherwise.
+func (o *FlowPushContact) GetRegistrationId() string {
+	if o == nil || IsNil(o.RegistrationId) {
+		var ret string
+		return ret
+	}
+	return *o.RegistrationId
+}
+
+// GetRegistrationIdOk returns a tuple with the RegistrationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPushContact) GetRegistrationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.RegistrationId) {
+		return nil, false
+	}
+	return o.RegistrationId, true
+}
+
+// HasRegistrationId returns a boolean if a field has been set.
+func (o *FlowPushContact) HasRegistrationId() bool {
+	if o != nil && !IsNil(o.RegistrationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetRegistrationId gets a reference to the given string and assigns it to the RegistrationId field.
+func (o *FlowPushContact) SetRegistrationId(v string) {
+	o.RegistrationId = &v
+}
+
+// GetAdditionalData returns the AdditionalData field value if set, zero value otherwise.
+func (o *FlowPushContact) GetAdditionalData() map[string]interface{} {
+	if o == nil || IsNil(o.AdditionalData) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.AdditionalData
+}
+
+// GetAdditionalDataOk returns a tuple with the AdditionalData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPushContact) GetAdditionalDataOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.AdditionalData) {
+		return map[string]interface{}{}, false
+	}
+	return o.AdditionalData, true
+}
+
+// HasAdditionalData returns a boolean if a field has been set.
+func (o *FlowPushContact) HasAdditionalData() bool {
+	if o != nil && !IsNil(o.AdditionalData) {
+		return true
+	}
+
+	return false
+}
+
+// SetAdditionalData gets a reference to the given map[string]interface{} and assigns it to the AdditionalData field.
+func (o *FlowPushContact) SetAdditionalData(v map[string]interface{}) {
+	o.AdditionalData = v
+}
+
+// GetSystemData returns the SystemData field value if set, zero value otherwise.
+func (o *FlowPushContact) GetSystemData() map[string]interface{} {
+	if o == nil || IsNil(o.SystemData) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.SystemData
+}
+
+// GetSystemDataOk returns a tuple with the SystemData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPushContact) GetSystemDataOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.SystemData) {
+		return map[string]interface{}{}, false
+	}
+	return o.SystemData, true
+}
+
+// HasSystemData returns a boolean if a field has been set.
+func (o *FlowPushContact) HasSystemData() bool {
+	if o != nil && !IsNil(o.SystemData) {
+		return true
+	}
+
+	return false
+}
+
+// SetSystemData gets a reference to the given map[string]interface{} and assigns it to the SystemData field.
+func (o *FlowPushContact) SetSystemData(v map[string]interface{}) {
+	o.SystemData = v
+}
+
+// GetIsPrimary returns the IsPrimary field value if set, zero value otherwise.
+func (o *FlowPushContact) GetIsPrimary() bool {
+	if o == nil || IsNil(o.IsPrimary) {
+		var ret bool
+		return ret
+	}
+	return *o.IsPrimary
+}
+
+// GetIsPrimaryOk returns a tuple with the IsPrimary field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowPushContact) GetIsPrimaryOk() (*bool, bool) {
+	if o == nil || IsNil(o.IsPrimary) {
+		return nil, false
+	}
+	return o.IsPrimary, true
+}
+
+// HasIsPrimary returns a boolean if a field has been set.
+func (o *FlowPushContact) HasIsPrimary() bool {
+	if o != nil && !IsNil(o.IsPrimary) {
+		return true
+	}
+
+	return false
+}
+
+// SetIsPrimary gets a reference to the given bool and assigns it to the IsPrimary field.
+func (o *FlowPushContact) SetIsPrimary(v bool) {
+	o.IsPrimary = &v
+}
+
+func (o FlowPushContact) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowPushContact) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.RegistrationId) {
+		toSerialize["registrationId"] = o.RegistrationId
+	}
+	if !IsNil(o.AdditionalData) {
+		toSerialize["additionalData"] = o.AdditionalData
+	}
+	if !IsNil(o.SystemData) {
+		toSerialize["systemData"] = o.SystemData
+	}
+	if !IsNil(o.IsPrimary) {
+		toSerialize["isPrimary"] = o.IsPrimary
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowPushContact struct {
+	value *FlowPushContact
+	isSet bool
+}
+
+func (v NullableFlowPushContact) Get() *FlowPushContact {
+	return v.value
+}
+
+func (v *NullableFlowPushContact) Set(val *FlowPushContact) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowPushContact) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowPushContact) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowPushContact(val *FlowPushContact) *NullableFlowPushContact {
+	return &NullableFlowPushContact{value: val, isSet: true}
+}
+
+func (v NullableFlowPushContact) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowPushContact) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_salesforce.go b/pkg/infobip/models/moments/flow_salesforce.go
new file mode 100644
index 0000000..572c98a
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_salesforce.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FlowSalesforce type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FlowSalesforce{}
+
+// FlowSalesforce Salesforce integration.
+type FlowSalesforce struct {
+	// Salesforce lead id.
+	LeadId *string
+	// Salesforce contact id.
+	ContactId *string
+}
+
+// NewFlowSalesforce instantiates a new FlowSalesforce object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFlowSalesforce() *FlowSalesforce {
+	this := FlowSalesforce{}
+	return &this
+}
+
+// NewFlowSalesforceWithDefaults instantiates a new FlowSalesforce object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFlowSalesforceWithDefaults() *FlowSalesforce {
+	this := FlowSalesforce{}
+
+	return &this
+}
+
+// GetLeadId returns the LeadId field value if set, zero value otherwise.
+func (o *FlowSalesforce) GetLeadId() string {
+	if o == nil || IsNil(o.LeadId) {
+		var ret string
+		return ret
+	}
+	return *o.LeadId
+}
+
+// GetLeadIdOk returns a tuple with the LeadId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowSalesforce) GetLeadIdOk() (*string, bool) {
+	if o == nil || IsNil(o.LeadId) {
+		return nil, false
+	}
+	return o.LeadId, true
+}
+
+// HasLeadId returns a boolean if a field has been set.
+func (o *FlowSalesforce) HasLeadId() bool {
+	if o != nil && !IsNil(o.LeadId) {
+		return true
+	}
+
+	return false
+}
+
+// SetLeadId gets a reference to the given string and assigns it to the LeadId field.
+func (o *FlowSalesforce) SetLeadId(v string) {
+	o.LeadId = &v
+}
+
+// GetContactId returns the ContactId field value if set, zero value otherwise.
+func (o *FlowSalesforce) GetContactId() string {
+	if o == nil || IsNil(o.ContactId) {
+		var ret string
+		return ret
+	}
+	return *o.ContactId
+}
+
+// GetContactIdOk returns a tuple with the ContactId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FlowSalesforce) GetContactIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ContactId) {
+		return nil, false
+	}
+	return o.ContactId, true
+}
+
+// HasContactId returns a boolean if a field has been set.
+func (o *FlowSalesforce) HasContactId() bool {
+	if o != nil && !IsNil(o.ContactId) {
+		return true
+	}
+
+	return false
+}
+
+// SetContactId gets a reference to the given string and assigns it to the ContactId field.
+func (o *FlowSalesforce) SetContactId(v string) {
+	o.ContactId = &v
+}
+
+func (o FlowSalesforce) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FlowSalesforce) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.LeadId) {
+		toSerialize["leadId"] = o.LeadId
+	}
+	if !IsNil(o.ContactId) {
+		toSerialize["contactId"] = o.ContactId
+	}
+	return toSerialize, nil
+}
+
+type NullableFlowSalesforce struct {
+	value *FlowSalesforce
+	isSet bool
+}
+
+func (v NullableFlowSalesforce) Get() *FlowSalesforce {
+	return v.value
+}
+
+func (v *NullableFlowSalesforce) Set(val *FlowSalesforce) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowSalesforce) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowSalesforce) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowSalesforce(val *FlowSalesforce) *NullableFlowSalesforce {
+	return &NullableFlowSalesforce{value: val, isSet: true}
+}
+
+func (v NullableFlowSalesforce) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowSalesforce) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/flow_type.go b/pkg/infobip/models/moments/flow_type.go
new file mode 100644
index 0000000..8aedf1c
--- /dev/null
+++ b/pkg/infobip/models/moments/flow_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FlowType Person's type, default type is CUSTOMER.
+type FlowType string
+
+// List of FlowType
+const (
+	FLOWTYPE_CUSTOMER FlowType = "CUSTOMER"
+	FLOWTYPE_LEAD     FlowType = "LEAD"
+)
+
+// All allowed values of FlowType enum
+var AllowedFlowTypeEnumValues = []FlowType{
+	"CUSTOMER",
+	"LEAD",
+}
+
+func (v *FlowType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FlowType(value)
+	for _, existing := range AllowedFlowTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FlowType", value)
+}
+
+// NewFlowTypeFromValue returns a pointer to a valid FlowType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFlowTypeFromValue(v string) (*FlowType, error) {
+	ev := FlowType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FlowType: valid values are %v", v, AllowedFlowTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FlowType) IsValid() bool {
+	for _, existing := range AllowedFlowTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FlowType value
+func (v FlowType) Ptr() *FlowType {
+	return &v
+}
+
+type NullableFlowType struct {
+	value *FlowType
+	isSet bool
+}
+
+func (v NullableFlowType) Get() *FlowType {
+	return v.value
+}
+
+func (v *NullableFlowType) Set(val *FlowType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFlowType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFlowType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFlowType(val *FlowType) *NullableFlowType {
+	return &NullableFlowType{value: val, isSet: true}
+}
+
+func (v NullableFlowType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFlowType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_action_after_submission.go b/pkg/infobip/models/moments/forms_action_after_submission.go
new file mode 100644
index 0000000..1744b64
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_action_after_submission.go
@@ -0,0 +1,148 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsActionAfterSubmission type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsActionAfterSubmission{}
+
+// FormsActionAfterSubmission Action after the submission
+type FormsActionAfterSubmission struct {
+	Type  FormsActionAfterSubmissionType
+	Value string
+}
+
+type _FormsActionAfterSubmission FormsActionAfterSubmission
+
+// NewFormsActionAfterSubmission instantiates a new FormsActionAfterSubmission object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsActionAfterSubmission(type_ FormsActionAfterSubmissionType, value string) *FormsActionAfterSubmission {
+	this := FormsActionAfterSubmission{}
+	this.Type = type_
+	this.Value = value
+	return &this
+}
+
+// NewFormsActionAfterSubmissionWithDefaults instantiates a new FormsActionAfterSubmission object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsActionAfterSubmissionWithDefaults() *FormsActionAfterSubmission {
+	this := FormsActionAfterSubmission{}
+
+	return &this
+}
+
+// GetType returns the Type field value
+func (o *FormsActionAfterSubmission) GetType() FormsActionAfterSubmissionType {
+	if o == nil {
+		var ret FormsActionAfterSubmissionType
+		return ret
+	}
+
+	return o.Type
+}
+
+// GetTypeOk returns a tuple with the Type field value
+// and a boolean to check if the value has been set.
+func (o *FormsActionAfterSubmission) GetTypeOk() (*FormsActionAfterSubmissionType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Type, true
+}
+
+// SetType sets field value
+func (o *FormsActionAfterSubmission) SetType(v FormsActionAfterSubmissionType) {
+	o.Type = v
+}
+
+// GetValue returns the Value field value
+func (o *FormsActionAfterSubmission) GetValue() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value
+// and a boolean to check if the value has been set.
+func (o *FormsActionAfterSubmission) GetValueOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Value, true
+}
+
+// SetValue sets field value
+func (o *FormsActionAfterSubmission) SetValue(v string) {
+	o.Value = v
+}
+
+func (o FormsActionAfterSubmission) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsActionAfterSubmission) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["value"] = o.Value
+	return toSerialize, nil
+}
+
+type NullableFormsActionAfterSubmission struct {
+	value *FormsActionAfterSubmission
+	isSet bool
+}
+
+func (v NullableFormsActionAfterSubmission) Get() *FormsActionAfterSubmission {
+	return v.value
+}
+
+func (v *NullableFormsActionAfterSubmission) Set(val *FormsActionAfterSubmission) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsActionAfterSubmission) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsActionAfterSubmission) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsActionAfterSubmission(val *FormsActionAfterSubmission) *NullableFormsActionAfterSubmission {
+	return &NullableFormsActionAfterSubmission{value: val, isSet: true}
+}
+
+func (v NullableFormsActionAfterSubmission) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsActionAfterSubmission) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_action_after_submission_type.go b/pkg/infobip/models/moments/forms_action_after_submission_type.go
new file mode 100644
index 0000000..a4d3b88
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_action_after_submission_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FormsActionAfterSubmissionType the model 'FormsActionAfterSubmissionType'
+type FormsActionAfterSubmissionType string
+
+// List of FormsActionAfterSubmissionType
+const (
+	FORMSACTIONAFTERSUBMISSIONTYPE_REDIRECT FormsActionAfterSubmissionType = "REDIRECT"
+	FORMSACTIONAFTERSUBMISSIONTYPE_MESSAGE  FormsActionAfterSubmissionType = "MESSAGE"
+)
+
+// All allowed values of FormsActionAfterSubmissionType enum
+var AllowedFormsActionAfterSubmissionTypeEnumValues = []FormsActionAfterSubmissionType{
+	"REDIRECT",
+	"MESSAGE",
+}
+
+func (v *FormsActionAfterSubmissionType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FormsActionAfterSubmissionType(value)
+	for _, existing := range AllowedFormsActionAfterSubmissionTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FormsActionAfterSubmissionType", value)
+}
+
+// NewFormsActionAfterSubmissionTypeFromValue returns a pointer to a valid FormsActionAfterSubmissionType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFormsActionAfterSubmissionTypeFromValue(v string) (*FormsActionAfterSubmissionType, error) {
+	ev := FormsActionAfterSubmissionType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FormsActionAfterSubmissionType: valid values are %v", v, AllowedFormsActionAfterSubmissionTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FormsActionAfterSubmissionType) IsValid() bool {
+	for _, existing := range AllowedFormsActionAfterSubmissionTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FormsActionAfterSubmissionType value
+func (v FormsActionAfterSubmissionType) Ptr() *FormsActionAfterSubmissionType {
+	return &v
+}
+
+type NullableFormsActionAfterSubmissionType struct {
+	value *FormsActionAfterSubmissionType
+	isSet bool
+}
+
+func (v NullableFormsActionAfterSubmissionType) Get() *FormsActionAfterSubmissionType {
+	return v.value
+}
+
+func (v *NullableFormsActionAfterSubmissionType) Set(val *FormsActionAfterSubmissionType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsActionAfterSubmissionType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsActionAfterSubmissionType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsActionAfterSubmissionType(val *FormsActionAfterSubmissionType) *NullableFormsActionAfterSubmissionType {
+	return &NullableFormsActionAfterSubmissionType{value: val, isSet: true}
+}
+
+func (v NullableFormsActionAfterSubmissionType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsActionAfterSubmissionType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_component_type.go b/pkg/infobip/models/moments/forms_component_type.go
new file mode 100644
index 0000000..d0e6e2d
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_component_type.go
@@ -0,0 +1,146 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FormsComponentType the model 'FormsComponentType'
+type FormsComponentType string
+
+// List of FormsComponentType
+const (
+	FORMSCOMPONENTTYPE_TEXT                FormsComponentType = "TEXT"
+	FORMSCOMPONENTTYPE_TEXTAREA            FormsComponentType = "TEXTAREA"
+	FORMSCOMPONENTTYPE_NUMBER              FormsComponentType = "NUMBER"
+	FORMSCOMPONENTTYPE_DROPDOWN            FormsComponentType = "DROPDOWN"
+	FORMSCOMPONENTTYPE_CHECKBOX            FormsComponentType = "CHECKBOX"
+	FORMSCOMPONENTTYPE_CHECKBOX_GROUP      FormsComponentType = "CHECKBOX_GROUP"
+	FORMSCOMPONENTTYPE_RADIOBUTTON         FormsComponentType = "RADIOBUTTON"
+	FORMSCOMPONENTTYPE_DATE                FormsComponentType = "DATE"
+	FORMSCOMPONENTTYPE_DATETIME            FormsComponentType = "DATETIME"
+	FORMSCOMPONENTTYPE_EMAIL               FormsComponentType = "EMAIL"
+	FORMSCOMPONENTTYPE_MSISDN              FormsComponentType = "MSISDN"
+	FORMSCOMPONENTTYPE_SUBMIT_BUTTON       FormsComponentType = "SUBMIT_BUTTON"
+	FORMSCOMPONENTTYPE_TITLE               FormsComponentType = "TITLE"
+	FORMSCOMPONENTTYPE_DESCRIPTION         FormsComponentType = "DESCRIPTION"
+	FORMSCOMPONENTTYPE_APPLE_SPLASH        FormsComponentType = "APPLE_SPLASH"
+	FORMSCOMPONENTTYPE_APPLE_BOOLEAN       FormsComponentType = "APPLE_BOOLEAN"
+	FORMSCOMPONENTTYPE_WHATSAPP_SCREEN     FormsComponentType = "WHATSAPP_SCREEN"
+	FORMSCOMPONENTTYPE_WHATSAPP_HEADING    FormsComponentType = "WHATSAPP_HEADING"
+	FORMSCOMPONENTTYPE_WHATSAPP_SUBHEADING FormsComponentType = "WHATSAPP_SUBHEADING"
+	FORMSCOMPONENTTYPE_WHATSAPP_BODY       FormsComponentType = "WHATSAPP_BODY"
+)
+
+// All allowed values of FormsComponentType enum
+var AllowedFormsComponentTypeEnumValues = []FormsComponentType{
+	"TEXT",
+	"TEXTAREA",
+	"NUMBER",
+	"DROPDOWN",
+	"CHECKBOX",
+	"CHECKBOX_GROUP",
+	"RADIOBUTTON",
+	"DATE",
+	"DATETIME",
+	"EMAIL",
+	"MSISDN",
+	"SUBMIT_BUTTON",
+	"TITLE",
+	"DESCRIPTION",
+	"APPLE_SPLASH",
+	"APPLE_BOOLEAN",
+	"WHATSAPP_SCREEN",
+	"WHATSAPP_HEADING",
+	"WHATSAPP_SUBHEADING",
+	"WHATSAPP_BODY",
+}
+
+func (v *FormsComponentType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FormsComponentType(value)
+	for _, existing := range AllowedFormsComponentTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FormsComponentType", value)
+}
+
+// NewFormsComponentTypeFromValue returns a pointer to a valid FormsComponentType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFormsComponentTypeFromValue(v string) (*FormsComponentType, error) {
+	ev := FormsComponentType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FormsComponentType: valid values are %v", v, AllowedFormsComponentTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FormsComponentType) IsValid() bool {
+	for _, existing := range AllowedFormsComponentTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FormsComponentType value
+func (v FormsComponentType) Ptr() *FormsComponentType {
+	return &v
+}
+
+type NullableFormsComponentType struct {
+	value *FormsComponentType
+	isSet bool
+}
+
+func (v NullableFormsComponentType) Get() *FormsComponentType {
+	return v.value
+}
+
+func (v *NullableFormsComponentType) Set(val *FormsComponentType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsComponentType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsComponentType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsComponentType(val *FormsComponentType) *NullableFormsComponentType {
+	return &NullableFormsComponentType{value: val, isSet: true}
+}
+
+func (v NullableFormsComponentType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsComponentType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_element.go b/pkg/infobip/models/moments/forms_element.go
new file mode 100644
index 0000000..01930e2
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_element.go
@@ -0,0 +1,553 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsElement type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsElement{}
+
+// FormsElement List of form fields
+type FormsElement struct {
+	Component               FormsComponentType
+	FieldId                 *string
+	PersonField             *string
+	Label                   *string
+	IsRequired              *bool
+	IsHidden                *bool
+	AdditionalConfiguration *map[string]string
+	TextContent             *string
+	Options                 []FormsElementOption
+	ValidationRules         *FormsValidationRules
+	Placeholder             *string
+	CheckboxText            *string
+	ValidationMessages      *map[string]string
+}
+
+type _FormsElement FormsElement
+
+// NewFormsElement instantiates a new FormsElement object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsElement(component FormsComponentType) *FormsElement {
+	this := FormsElement{}
+	this.Component = component
+	return &this
+}
+
+// NewFormsElementWithDefaults instantiates a new FormsElement object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsElementWithDefaults() *FormsElement {
+	this := FormsElement{}
+
+	return &this
+}
+
+// GetComponent returns the Component field value
+func (o *FormsElement) GetComponent() FormsComponentType {
+	if o == nil {
+		var ret FormsComponentType
+		return ret
+	}
+
+	return o.Component
+}
+
+// GetComponentOk returns a tuple with the Component field value
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetComponentOk() (*FormsComponentType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Component, true
+}
+
+// SetComponent sets field value
+func (o *FormsElement) SetComponent(v FormsComponentType) {
+	o.Component = v
+}
+
+// GetFieldId returns the FieldId field value if set, zero value otherwise.
+func (o *FormsElement) GetFieldId() string {
+	if o == nil || IsNil(o.FieldId) {
+		var ret string
+		return ret
+	}
+	return *o.FieldId
+}
+
+// GetFieldIdOk returns a tuple with the FieldId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetFieldIdOk() (*string, bool) {
+	if o == nil || IsNil(o.FieldId) {
+		return nil, false
+	}
+	return o.FieldId, true
+}
+
+// HasFieldId returns a boolean if a field has been set.
+func (o *FormsElement) HasFieldId() bool {
+	if o != nil && !IsNil(o.FieldId) {
+		return true
+	}
+
+	return false
+}
+
+// SetFieldId gets a reference to the given string and assigns it to the FieldId field.
+func (o *FormsElement) SetFieldId(v string) {
+	o.FieldId = &v
+}
+
+// GetPersonField returns the PersonField field value if set, zero value otherwise.
+func (o *FormsElement) GetPersonField() string {
+	if o == nil || IsNil(o.PersonField) {
+		var ret string
+		return ret
+	}
+	return *o.PersonField
+}
+
+// GetPersonFieldOk returns a tuple with the PersonField field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetPersonFieldOk() (*string, bool) {
+	if o == nil || IsNil(o.PersonField) {
+		return nil, false
+	}
+	return o.PersonField, true
+}
+
+// HasPersonField returns a boolean if a field has been set.
+func (o *FormsElement) HasPersonField() bool {
+	if o != nil && !IsNil(o.PersonField) {
+		return true
+	}
+
+	return false
+}
+
+// SetPersonField gets a reference to the given string and assigns it to the PersonField field.
+func (o *FormsElement) SetPersonField(v string) {
+	o.PersonField = &v
+}
+
+// GetLabel returns the Label field value if set, zero value otherwise.
+func (o *FormsElement) GetLabel() string {
+	if o == nil || IsNil(o.Label) {
+		var ret string
+		return ret
+	}
+	return *o.Label
+}
+
+// GetLabelOk returns a tuple with the Label field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetLabelOk() (*string, bool) {
+	if o == nil || IsNil(o.Label) {
+		return nil, false
+	}
+	return o.Label, true
+}
+
+// HasLabel returns a boolean if a field has been set.
+func (o *FormsElement) HasLabel() bool {
+	if o != nil && !IsNil(o.Label) {
+		return true
+	}
+
+	return false
+}
+
+// SetLabel gets a reference to the given string and assigns it to the Label field.
+func (o *FormsElement) SetLabel(v string) {
+	o.Label = &v
+}
+
+// GetIsRequired returns the IsRequired field value if set, zero value otherwise.
+func (o *FormsElement) GetIsRequired() bool {
+	if o == nil || IsNil(o.IsRequired) {
+		var ret bool
+		return ret
+	}
+	return *o.IsRequired
+}
+
+// GetIsRequiredOk returns a tuple with the IsRequired field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetIsRequiredOk() (*bool, bool) {
+	if o == nil || IsNil(o.IsRequired) {
+		return nil, false
+	}
+	return o.IsRequired, true
+}
+
+// HasIsRequired returns a boolean if a field has been set.
+func (o *FormsElement) HasIsRequired() bool {
+	if o != nil && !IsNil(o.IsRequired) {
+		return true
+	}
+
+	return false
+}
+
+// SetIsRequired gets a reference to the given bool and assigns it to the IsRequired field.
+func (o *FormsElement) SetIsRequired(v bool) {
+	o.IsRequired = &v
+}
+
+// GetIsHidden returns the IsHidden field value if set, zero value otherwise.
+func (o *FormsElement) GetIsHidden() bool {
+	if o == nil || IsNil(o.IsHidden) {
+		var ret bool
+		return ret
+	}
+	return *o.IsHidden
+}
+
+// GetIsHiddenOk returns a tuple with the IsHidden field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetIsHiddenOk() (*bool, bool) {
+	if o == nil || IsNil(o.IsHidden) {
+		return nil, false
+	}
+	return o.IsHidden, true
+}
+
+// HasIsHidden returns a boolean if a field has been set.
+func (o *FormsElement) HasIsHidden() bool {
+	if o != nil && !IsNil(o.IsHidden) {
+		return true
+	}
+
+	return false
+}
+
+// SetIsHidden gets a reference to the given bool and assigns it to the IsHidden field.
+func (o *FormsElement) SetIsHidden(v bool) {
+	o.IsHidden = &v
+}
+
+// GetAdditionalConfiguration returns the AdditionalConfiguration field value if set, zero value otherwise.
+func (o *FormsElement) GetAdditionalConfiguration() map[string]string {
+	if o == nil || IsNil(o.AdditionalConfiguration) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.AdditionalConfiguration
+}
+
+// GetAdditionalConfigurationOk returns a tuple with the AdditionalConfiguration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetAdditionalConfigurationOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.AdditionalConfiguration) {
+		return nil, false
+	}
+	return o.AdditionalConfiguration, true
+}
+
+// HasAdditionalConfiguration returns a boolean if a field has been set.
+func (o *FormsElement) HasAdditionalConfiguration() bool {
+	if o != nil && !IsNil(o.AdditionalConfiguration) {
+		return true
+	}
+
+	return false
+}
+
+// SetAdditionalConfiguration gets a reference to the given map[string]string and assigns it to the AdditionalConfiguration field.
+func (o *FormsElement) SetAdditionalConfiguration(v map[string]string) {
+	o.AdditionalConfiguration = &v
+}
+
+// GetTextContent returns the TextContent field value if set, zero value otherwise.
+func (o *FormsElement) GetTextContent() string {
+	if o == nil || IsNil(o.TextContent) {
+		var ret string
+		return ret
+	}
+	return *o.TextContent
+}
+
+// GetTextContentOk returns a tuple with the TextContent field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetTextContentOk() (*string, bool) {
+	if o == nil || IsNil(o.TextContent) {
+		return nil, false
+	}
+	return o.TextContent, true
+}
+
+// HasTextContent returns a boolean if a field has been set.
+func (o *FormsElement) HasTextContent() bool {
+	if o != nil && !IsNil(o.TextContent) {
+		return true
+	}
+
+	return false
+}
+
+// SetTextContent gets a reference to the given string and assigns it to the TextContent field.
+func (o *FormsElement) SetTextContent(v string) {
+	o.TextContent = &v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *FormsElement) GetOptions() []FormsElementOption {
+	if o == nil || IsNil(o.Options) {
+		var ret []FormsElementOption
+		return ret
+	}
+	return o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetOptionsOk() ([]FormsElementOption, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *FormsElement) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given []FormsElementOption and assigns it to the Options field.
+func (o *FormsElement) SetOptions(v []FormsElementOption) {
+	o.Options = v
+}
+
+// GetValidationRules returns the ValidationRules field value if set, zero value otherwise.
+func (o *FormsElement) GetValidationRules() FormsValidationRules {
+	if o == nil || IsNil(o.ValidationRules) {
+		var ret FormsValidationRules
+		return ret
+	}
+	return *o.ValidationRules
+}
+
+// GetValidationRulesOk returns a tuple with the ValidationRules field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetValidationRulesOk() (*FormsValidationRules, bool) {
+	if o == nil || IsNil(o.ValidationRules) {
+		return nil, false
+	}
+	return o.ValidationRules, true
+}
+
+// HasValidationRules returns a boolean if a field has been set.
+func (o *FormsElement) HasValidationRules() bool {
+	if o != nil && !IsNil(o.ValidationRules) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidationRules gets a reference to the given FormsValidationRules and assigns it to the ValidationRules field.
+func (o *FormsElement) SetValidationRules(v FormsValidationRules) {
+	o.ValidationRules = &v
+}
+
+// GetPlaceholder returns the Placeholder field value if set, zero value otherwise.
+func (o *FormsElement) GetPlaceholder() string {
+	if o == nil || IsNil(o.Placeholder) {
+		var ret string
+		return ret
+	}
+	return *o.Placeholder
+}
+
+// GetPlaceholderOk returns a tuple with the Placeholder field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetPlaceholderOk() (*string, bool) {
+	if o == nil || IsNil(o.Placeholder) {
+		return nil, false
+	}
+	return o.Placeholder, true
+}
+
+// HasPlaceholder returns a boolean if a field has been set.
+func (o *FormsElement) HasPlaceholder() bool {
+	if o != nil && !IsNil(o.Placeholder) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlaceholder gets a reference to the given string and assigns it to the Placeholder field.
+func (o *FormsElement) SetPlaceholder(v string) {
+	o.Placeholder = &v
+}
+
+// GetCheckboxText returns the CheckboxText field value if set, zero value otherwise.
+func (o *FormsElement) GetCheckboxText() string {
+	if o == nil || IsNil(o.CheckboxText) {
+		var ret string
+		return ret
+	}
+	return *o.CheckboxText
+}
+
+// GetCheckboxTextOk returns a tuple with the CheckboxText field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetCheckboxTextOk() (*string, bool) {
+	if o == nil || IsNil(o.CheckboxText) {
+		return nil, false
+	}
+	return o.CheckboxText, true
+}
+
+// HasCheckboxText returns a boolean if a field has been set.
+func (o *FormsElement) HasCheckboxText() bool {
+	if o != nil && !IsNil(o.CheckboxText) {
+		return true
+	}
+
+	return false
+}
+
+// SetCheckboxText gets a reference to the given string and assigns it to the CheckboxText field.
+func (o *FormsElement) SetCheckboxText(v string) {
+	o.CheckboxText = &v
+}
+
+// GetValidationMessages returns the ValidationMessages field value if set, zero value otherwise.
+func (o *FormsElement) GetValidationMessages() map[string]string {
+	if o == nil || IsNil(o.ValidationMessages) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.ValidationMessages
+}
+
+// GetValidationMessagesOk returns a tuple with the ValidationMessages field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElement) GetValidationMessagesOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.ValidationMessages) {
+		return nil, false
+	}
+	return o.ValidationMessages, true
+}
+
+// HasValidationMessages returns a boolean if a field has been set.
+func (o *FormsElement) HasValidationMessages() bool {
+	if o != nil && !IsNil(o.ValidationMessages) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidationMessages gets a reference to the given map[string]string and assigns it to the ValidationMessages field.
+func (o *FormsElement) SetValidationMessages(v map[string]string) {
+	o.ValidationMessages = &v
+}
+
+func (o FormsElement) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsElement) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["component"] = o.Component
+	if !IsNil(o.FieldId) {
+		toSerialize["fieldId"] = o.FieldId
+	}
+	if !IsNil(o.PersonField) {
+		toSerialize["personField"] = o.PersonField
+	}
+	if !IsNil(o.Label) {
+		toSerialize["label"] = o.Label
+	}
+	if !IsNil(o.IsRequired) {
+		toSerialize["isRequired"] = o.IsRequired
+	}
+	if !IsNil(o.IsHidden) {
+		toSerialize["isHidden"] = o.IsHidden
+	}
+	if !IsNil(o.AdditionalConfiguration) {
+		toSerialize["additionalConfiguration"] = o.AdditionalConfiguration
+	}
+	if !IsNil(o.TextContent) {
+		toSerialize["textContent"] = o.TextContent
+	}
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	if !IsNil(o.ValidationRules) {
+		toSerialize["validationRules"] = o.ValidationRules
+	}
+	if !IsNil(o.Placeholder) {
+		toSerialize["placeholder"] = o.Placeholder
+	}
+	if !IsNil(o.CheckboxText) {
+		toSerialize["checkboxText"] = o.CheckboxText
+	}
+	if !IsNil(o.ValidationMessages) {
+		toSerialize["validationMessages"] = o.ValidationMessages
+	}
+	return toSerialize, nil
+}
+
+type NullableFormsElement struct {
+	value *FormsElement
+	isSet bool
+}
+
+func (v NullableFormsElement) Get() *FormsElement {
+	return v.value
+}
+
+func (v *NullableFormsElement) Set(val *FormsElement) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsElement) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsElement) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsElement(val *FormsElement) *NullableFormsElement {
+	return &NullableFormsElement{value: val, isSet: true}
+}
+
+func (v NullableFormsElement) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsElement) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_element_option.go b/pkg/infobip/models/moments/forms_element_option.go
new file mode 100644
index 0000000..af9c5b2
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_element_option.go
@@ -0,0 +1,184 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsElementOption type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsElementOption{}
+
+// FormsElementOption struct for FormsElementOption
+type FormsElementOption struct {
+	Name                    string
+	Value                   string
+	AdditionalConfiguration *map[string]string
+}
+
+type _FormsElementOption FormsElementOption
+
+// NewFormsElementOption instantiates a new FormsElementOption object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsElementOption(name string, value string) *FormsElementOption {
+	this := FormsElementOption{}
+	this.Name = name
+	this.Value = value
+	return &this
+}
+
+// NewFormsElementOptionWithDefaults instantiates a new FormsElementOption object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsElementOptionWithDefaults() *FormsElementOption {
+	this := FormsElementOption{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *FormsElementOption) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *FormsElementOption) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *FormsElementOption) SetName(v string) {
+	o.Name = v
+}
+
+// GetValue returns the Value field value
+func (o *FormsElementOption) GetValue() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value
+// and a boolean to check if the value has been set.
+func (o *FormsElementOption) GetValueOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Value, true
+}
+
+// SetValue sets field value
+func (o *FormsElementOption) SetValue(v string) {
+	o.Value = v
+}
+
+// GetAdditionalConfiguration returns the AdditionalConfiguration field value if set, zero value otherwise.
+func (o *FormsElementOption) GetAdditionalConfiguration() map[string]string {
+	if o == nil || IsNil(o.AdditionalConfiguration) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.AdditionalConfiguration
+}
+
+// GetAdditionalConfigurationOk returns a tuple with the AdditionalConfiguration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsElementOption) GetAdditionalConfigurationOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.AdditionalConfiguration) {
+		return nil, false
+	}
+	return o.AdditionalConfiguration, true
+}
+
+// HasAdditionalConfiguration returns a boolean if a field has been set.
+func (o *FormsElementOption) HasAdditionalConfiguration() bool {
+	if o != nil && !IsNil(o.AdditionalConfiguration) {
+		return true
+	}
+
+	return false
+}
+
+// SetAdditionalConfiguration gets a reference to the given map[string]string and assigns it to the AdditionalConfiguration field.
+func (o *FormsElementOption) SetAdditionalConfiguration(v map[string]string) {
+	o.AdditionalConfiguration = &v
+}
+
+func (o FormsElementOption) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsElementOption) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	toSerialize["value"] = o.Value
+	if !IsNil(o.AdditionalConfiguration) {
+		toSerialize["additionalConfiguration"] = o.AdditionalConfiguration
+	}
+	return toSerialize, nil
+}
+
+type NullableFormsElementOption struct {
+	value *FormsElementOption
+	isSet bool
+}
+
+func (v NullableFormsElementOption) Get() *FormsElementOption {
+	return v.value
+}
+
+func (v *NullableFormsElementOption) Set(val *FormsElementOption) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsElementOption) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsElementOption) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsElementOption(val *FormsElementOption) *NullableFormsElementOption {
+	return &NullableFormsElementOption{value: val, isSet: true}
+}
+
+func (v NullableFormsElementOption) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsElementOption) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_response.go b/pkg/infobip/models/moments/forms_response.go
new file mode 100644
index 0000000..9bb7a31
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_response.go
@@ -0,0 +1,233 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsResponse{}
+
+// FormsResponse struct for FormsResponse
+type FormsResponse struct {
+	// Forms list
+	Forms []FormsResponseContent
+	// Offset from beginning of list of available forms
+	Offset *int32
+	// Number of returned forms
+	Limit *int32
+	// Total number of available forms
+	Total *int64
+}
+
+type _FormsResponse FormsResponse
+
+// NewFormsResponse instantiates a new FormsResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsResponse(forms []FormsResponseContent) *FormsResponse {
+	this := FormsResponse{}
+	this.Forms = forms
+	return &this
+}
+
+// NewFormsResponseWithDefaults instantiates a new FormsResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsResponseWithDefaults() *FormsResponse {
+	this := FormsResponse{}
+
+	return &this
+}
+
+// GetForms returns the Forms field value
+func (o *FormsResponse) GetForms() []FormsResponseContent {
+	if o == nil {
+		var ret []FormsResponseContent
+		return ret
+	}
+
+	return o.Forms
+}
+
+// GetFormsOk returns a tuple with the Forms field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponse) GetFormsOk() ([]FormsResponseContent, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Forms, true
+}
+
+// SetForms sets field value
+func (o *FormsResponse) SetForms(v []FormsResponseContent) {
+	o.Forms = v
+}
+
+// GetOffset returns the Offset field value if set, zero value otherwise.
+func (o *FormsResponse) GetOffset() int32 {
+	if o == nil || IsNil(o.Offset) {
+		var ret int32
+		return ret
+	}
+	return *o.Offset
+}
+
+// GetOffsetOk returns a tuple with the Offset field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsResponse) GetOffsetOk() (*int32, bool) {
+	if o == nil || IsNil(o.Offset) {
+		return nil, false
+	}
+	return o.Offset, true
+}
+
+// HasOffset returns a boolean if a field has been set.
+func (o *FormsResponse) HasOffset() bool {
+	if o != nil && !IsNil(o.Offset) {
+		return true
+	}
+
+	return false
+}
+
+// SetOffset gets a reference to the given int32 and assigns it to the Offset field.
+func (o *FormsResponse) SetOffset(v int32) {
+	o.Offset = &v
+}
+
+// GetLimit returns the Limit field value if set, zero value otherwise.
+func (o *FormsResponse) GetLimit() int32 {
+	if o == nil || IsNil(o.Limit) {
+		var ret int32
+		return ret
+	}
+	return *o.Limit
+}
+
+// GetLimitOk returns a tuple with the Limit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsResponse) GetLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.Limit) {
+		return nil, false
+	}
+	return o.Limit, true
+}
+
+// HasLimit returns a boolean if a field has been set.
+func (o *FormsResponse) HasLimit() bool {
+	if o != nil && !IsNil(o.Limit) {
+		return true
+	}
+
+	return false
+}
+
+// SetLimit gets a reference to the given int32 and assigns it to the Limit field.
+func (o *FormsResponse) SetLimit(v int32) {
+	o.Limit = &v
+}
+
+// GetTotal returns the Total field value if set, zero value otherwise.
+func (o *FormsResponse) GetTotal() int64 {
+	if o == nil || IsNil(o.Total) {
+		var ret int64
+		return ret
+	}
+	return *o.Total
+}
+
+// GetTotalOk returns a tuple with the Total field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsResponse) GetTotalOk() (*int64, bool) {
+	if o == nil || IsNil(o.Total) {
+		return nil, false
+	}
+	return o.Total, true
+}
+
+// HasTotal returns a boolean if a field has been set.
+func (o *FormsResponse) HasTotal() bool {
+	if o != nil && !IsNil(o.Total) {
+		return true
+	}
+
+	return false
+}
+
+// SetTotal gets a reference to the given int64 and assigns it to the Total field.
+func (o *FormsResponse) SetTotal(v int64) {
+	o.Total = &v
+}
+
+func (o FormsResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["forms"] = o.Forms
+	if !IsNil(o.Offset) {
+		toSerialize["offset"] = o.Offset
+	}
+	if !IsNil(o.Limit) {
+		toSerialize["limit"] = o.Limit
+	}
+	if !IsNil(o.Total) {
+		toSerialize["total"] = o.Total
+	}
+	return toSerialize, nil
+}
+
+type NullableFormsResponse struct {
+	value *FormsResponse
+	isSet bool
+}
+
+func (v NullableFormsResponse) Get() *FormsResponse {
+	return v.value
+}
+
+func (v *NullableFormsResponse) Set(val *FormsResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsResponse(val *FormsResponse) *NullableFormsResponse {
+	return &NullableFormsResponse{value: val, isSet: true}
+}
+
+func (v NullableFormsResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_response_content.go b/pkg/infobip/models/moments/forms_response_content.go
new file mode 100644
index 0000000..a6a2503
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_response_content.go
@@ -0,0 +1,370 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsResponseContent type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsResponseContent{}
+
+// FormsResponseContent struct for FormsResponseContent
+type FormsResponseContent struct {
+	// Form identifier
+	Id string
+	// Form name
+	Name string
+	// List of form fields
+	Elements []FormsElement
+	// Time when form was created
+	CreatedAt *Time
+	// Time when form was update last time
+	UpdatedAt             *Time
+	ActionAfterSubmission *FormsActionAfterSubmission
+	// Can resubmit multiple times
+	ResubmitEnabled bool
+	FormType        FormsType
+	FormStatus      FormsStatus
+}
+
+type _FormsResponseContent FormsResponseContent
+
+// NewFormsResponseContent instantiates a new FormsResponseContent object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsResponseContent(id string, name string, elements []FormsElement, resubmitEnabled bool, formType FormsType, formStatus FormsStatus) *FormsResponseContent {
+	this := FormsResponseContent{}
+	this.Id = id
+	this.Name = name
+	this.Elements = elements
+	this.ResubmitEnabled = resubmitEnabled
+	this.FormType = formType
+	this.FormStatus = formStatus
+	return &this
+}
+
+// NewFormsResponseContentWithDefaults instantiates a new FormsResponseContent object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsResponseContentWithDefaults() *FormsResponseContent {
+	this := FormsResponseContent{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *FormsResponseContent) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *FormsResponseContent) SetId(v string) {
+	o.Id = v
+}
+
+// GetName returns the Name field value
+func (o *FormsResponseContent) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *FormsResponseContent) SetName(v string) {
+	o.Name = v
+}
+
+// GetElements returns the Elements field value
+func (o *FormsResponseContent) GetElements() []FormsElement {
+	if o == nil {
+		var ret []FormsElement
+		return ret
+	}
+
+	return o.Elements
+}
+
+// GetElementsOk returns a tuple with the Elements field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetElementsOk() ([]FormsElement, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Elements, true
+}
+
+// SetElements sets field value
+func (o *FormsResponseContent) SetElements(v []FormsElement) {
+	o.Elements = v
+}
+
+// GetCreatedAt returns the CreatedAt field value if set, zero value otherwise.
+func (o *FormsResponseContent) GetCreatedAt() Time {
+	if o == nil || IsNil(o.CreatedAt) {
+		var ret Time
+		return ret
+	}
+	return *o.CreatedAt
+}
+
+// GetCreatedAtOk returns a tuple with the CreatedAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetCreatedAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.CreatedAt) {
+		return nil, false
+	}
+	return o.CreatedAt, true
+}
+
+// HasCreatedAt returns a boolean if a field has been set.
+func (o *FormsResponseContent) HasCreatedAt() bool {
+	if o != nil && !IsNil(o.CreatedAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreatedAt gets a reference to the given Time and assigns it to the CreatedAt field.
+func (o *FormsResponseContent) SetCreatedAt(v Time) {
+	o.CreatedAt = &v
+}
+
+// GetUpdatedAt returns the UpdatedAt field value if set, zero value otherwise.
+func (o *FormsResponseContent) GetUpdatedAt() Time {
+	if o == nil || IsNil(o.UpdatedAt) {
+		var ret Time
+		return ret
+	}
+	return *o.UpdatedAt
+}
+
+// GetUpdatedAtOk returns a tuple with the UpdatedAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetUpdatedAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.UpdatedAt) {
+		return nil, false
+	}
+	return o.UpdatedAt, true
+}
+
+// HasUpdatedAt returns a boolean if a field has been set.
+func (o *FormsResponseContent) HasUpdatedAt() bool {
+	if o != nil && !IsNil(o.UpdatedAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetUpdatedAt gets a reference to the given Time and assigns it to the UpdatedAt field.
+func (o *FormsResponseContent) SetUpdatedAt(v Time) {
+	o.UpdatedAt = &v
+}
+
+// GetActionAfterSubmission returns the ActionAfterSubmission field value if set, zero value otherwise.
+func (o *FormsResponseContent) GetActionAfterSubmission() FormsActionAfterSubmission {
+	if o == nil || IsNil(o.ActionAfterSubmission) {
+		var ret FormsActionAfterSubmission
+		return ret
+	}
+	return *o.ActionAfterSubmission
+}
+
+// GetActionAfterSubmissionOk returns a tuple with the ActionAfterSubmission field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetActionAfterSubmissionOk() (*FormsActionAfterSubmission, bool) {
+	if o == nil || IsNil(o.ActionAfterSubmission) {
+		return nil, false
+	}
+	return o.ActionAfterSubmission, true
+}
+
+// HasActionAfterSubmission returns a boolean if a field has been set.
+func (o *FormsResponseContent) HasActionAfterSubmission() bool {
+	if o != nil && !IsNil(o.ActionAfterSubmission) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionAfterSubmission gets a reference to the given FormsActionAfterSubmission and assigns it to the ActionAfterSubmission field.
+func (o *FormsResponseContent) SetActionAfterSubmission(v FormsActionAfterSubmission) {
+	o.ActionAfterSubmission = &v
+}
+
+// GetResubmitEnabled returns the ResubmitEnabled field value
+func (o *FormsResponseContent) GetResubmitEnabled() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.ResubmitEnabled
+}
+
+// GetResubmitEnabledOk returns a tuple with the ResubmitEnabled field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetResubmitEnabledOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ResubmitEnabled, true
+}
+
+// SetResubmitEnabled sets field value
+func (o *FormsResponseContent) SetResubmitEnabled(v bool) {
+	o.ResubmitEnabled = v
+}
+
+// GetFormType returns the FormType field value
+func (o *FormsResponseContent) GetFormType() FormsType {
+	if o == nil {
+		var ret FormsType
+		return ret
+	}
+
+	return o.FormType
+}
+
+// GetFormTypeOk returns a tuple with the FormType field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetFormTypeOk() (*FormsType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FormType, true
+}
+
+// SetFormType sets field value
+func (o *FormsResponseContent) SetFormType(v FormsType) {
+	o.FormType = v
+}
+
+// GetFormStatus returns the FormStatus field value
+func (o *FormsResponseContent) GetFormStatus() FormsStatus {
+	if o == nil {
+		var ret FormsStatus
+		return ret
+	}
+
+	return o.FormStatus
+}
+
+// GetFormStatusOk returns a tuple with the FormStatus field value
+// and a boolean to check if the value has been set.
+func (o *FormsResponseContent) GetFormStatusOk() (*FormsStatus, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FormStatus, true
+}
+
+// SetFormStatus sets field value
+func (o *FormsResponseContent) SetFormStatus(v FormsStatus) {
+	o.FormStatus = v
+}
+
+func (o FormsResponseContent) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsResponseContent) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["name"] = o.Name
+	toSerialize["elements"] = o.Elements
+	if !IsNil(o.CreatedAt) {
+		toSerialize["createdAt"] = o.CreatedAt
+	}
+	if !IsNil(o.UpdatedAt) {
+		toSerialize["updatedAt"] = o.UpdatedAt
+	}
+	if !IsNil(o.ActionAfterSubmission) {
+		toSerialize["actionAfterSubmission"] = o.ActionAfterSubmission
+	}
+	toSerialize["resubmitEnabled"] = o.ResubmitEnabled
+	toSerialize["formType"] = o.FormType
+	toSerialize["formStatus"] = o.FormStatus
+	return toSerialize, nil
+}
+
+type NullableFormsResponseContent struct {
+	value *FormsResponseContent
+	isSet bool
+}
+
+func (v NullableFormsResponseContent) Get() *FormsResponseContent {
+	return v.value
+}
+
+func (v *NullableFormsResponseContent) Set(val *FormsResponseContent) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsResponseContent) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsResponseContent) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsResponseContent(val *FormsResponseContent) *NullableFormsResponseContent {
+	return &NullableFormsResponseContent{value: val, isSet: true}
+}
+
+func (v NullableFormsResponseContent) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsResponseContent) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_status.go b/pkg/infobip/models/moments/forms_status.go
new file mode 100644
index 0000000..a7eb735
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_status.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FormsStatus Form status
+type FormsStatus string
+
+// List of FormsStatus
+const (
+	FORMSSTATUS_ACTIVE   FormsStatus = "ACTIVE"
+	FORMSSTATUS_DISABLED FormsStatus = "DISABLED"
+	FORMSSTATUS_DRAFT    FormsStatus = "DRAFT"
+)
+
+// All allowed values of FormsStatus enum
+var AllowedFormsStatusEnumValues = []FormsStatus{
+	"ACTIVE",
+	"DISABLED",
+	"DRAFT",
+}
+
+func (v *FormsStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FormsStatus(value)
+	for _, existing := range AllowedFormsStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FormsStatus", value)
+}
+
+// NewFormsStatusFromValue returns a pointer to a valid FormsStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFormsStatusFromValue(v string) (*FormsStatus, error) {
+	ev := FormsStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FormsStatus: valid values are %v", v, AllowedFormsStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FormsStatus) IsValid() bool {
+	for _, existing := range AllowedFormsStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FormsStatus value
+func (v FormsStatus) Ptr() *FormsStatus {
+	return &v
+}
+
+type NullableFormsStatus struct {
+	value *FormsStatus
+	isSet bool
+}
+
+func (v NullableFormsStatus) Get() *FormsStatus {
+	return v.value
+}
+
+func (v *NullableFormsStatus) Set(val *FormsStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsStatus(val *FormsStatus) *NullableFormsStatus {
+	return &NullableFormsStatus{value: val, isSet: true}
+}
+
+func (v NullableFormsStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_status_response.go b/pkg/infobip/models/moments/forms_status_response.go
new file mode 100644
index 0000000..c964306
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_status_response.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsStatusResponse{}
+
+// FormsStatusResponse struct for FormsStatusResponse
+type FormsStatusResponse struct {
+	Status string
+}
+
+type _FormsStatusResponse FormsStatusResponse
+
+// NewFormsStatusResponse instantiates a new FormsStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsStatusResponse(status string) *FormsStatusResponse {
+	this := FormsStatusResponse{}
+	this.Status = status
+	return &this
+}
+
+// NewFormsStatusResponseWithDefaults instantiates a new FormsStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsStatusResponseWithDefaults() *FormsStatusResponse {
+	this := FormsStatusResponse{}
+
+	return &this
+}
+
+// GetStatus returns the Status field value
+func (o *FormsStatusResponse) GetStatus() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value
+// and a boolean to check if the value has been set.
+func (o *FormsStatusResponse) GetStatusOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Status, true
+}
+
+// SetStatus sets field value
+func (o *FormsStatusResponse) SetStatus(v string) {
+	o.Status = v
+}
+
+func (o FormsStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["status"] = o.Status
+	return toSerialize, nil
+}
+
+type NullableFormsStatusResponse struct {
+	value *FormsStatusResponse
+	isSet bool
+}
+
+func (v NullableFormsStatusResponse) Get() *FormsStatusResponse {
+	return v.value
+}
+
+func (v *NullableFormsStatusResponse) Set(val *FormsStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsStatusResponse(val *FormsStatusResponse) *NullableFormsStatusResponse {
+	return &NullableFormsStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableFormsStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_type.go b/pkg/infobip/models/moments/forms_type.go
new file mode 100644
index 0000000..cb6edf6
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_type.go
@@ -0,0 +1,120 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FormsType Form type
+type FormsType string
+
+// List of FormsType
+const (
+	FORMSTYPE_OPT_IN   FormsType = "OPT_IN"
+	FORMSTYPE_OPT_OUT  FormsType = "OPT_OUT"
+	FORMSTYPE_FACEBOOK FormsType = "FACEBOOK"
+	FORMSTYPE_LIVECHAT FormsType = "LIVECHAT"
+	FORMSTYPE_APPLE    FormsType = "APPLE"
+	FORMSTYPE_CSAT     FormsType = "CSAT"
+	FORMSTYPE_WA_FLOW  FormsType = "WA_FLOW"
+)
+
+// All allowed values of FormsType enum
+var AllowedFormsTypeEnumValues = []FormsType{
+	"OPT_IN",
+	"OPT_OUT",
+	"FACEBOOK",
+	"LIVECHAT",
+	"APPLE",
+	"CSAT",
+	"WA_FLOW",
+}
+
+func (v *FormsType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FormsType(value)
+	for _, existing := range AllowedFormsTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FormsType", value)
+}
+
+// NewFormsTypeFromValue returns a pointer to a valid FormsType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFormsTypeFromValue(v string) (*FormsType, error) {
+	ev := FormsType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FormsType: valid values are %v", v, AllowedFormsTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FormsType) IsValid() bool {
+	for _, existing := range AllowedFormsTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FormsType value
+func (v FormsType) Ptr() *FormsType {
+	return &v
+}
+
+type NullableFormsType struct {
+	value *FormsType
+	isSet bool
+}
+
+func (v NullableFormsType) Get() *FormsType {
+	return v.value
+}
+
+func (v *NullableFormsType) Set(val *FormsType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsType(val *FormsType) *NullableFormsType {
+	return &NullableFormsType{value: val, isSet: true}
+}
+
+func (v NullableFormsType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/moments/forms_validation_rules.go b/pkg/infobip/models/moments/forms_validation_rules.go
new file mode 100644
index 0000000..278e8d6
--- /dev/null
+++ b/pkg/infobip/models/moments/forms_validation_rules.go
@@ -0,0 +1,344 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package moments
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FormsValidationRules type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FormsValidationRules{}
+
+// FormsValidationRules struct for FormsValidationRules
+type FormsValidationRules struct {
+	DatePattern      *string
+	MaxLength        *int32
+	MaxValue         *string
+	MinValue         *string
+	Pattern          *string
+	Sample           *string
+	ForbiddenSymbols []string
+}
+
+// NewFormsValidationRules instantiates a new FormsValidationRules object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFormsValidationRules() *FormsValidationRules {
+	this := FormsValidationRules{}
+	return &this
+}
+
+// NewFormsValidationRulesWithDefaults instantiates a new FormsValidationRules object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFormsValidationRulesWithDefaults() *FormsValidationRules {
+	this := FormsValidationRules{}
+
+	return &this
+}
+
+// GetDatePattern returns the DatePattern field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetDatePattern() string {
+	if o == nil || IsNil(o.DatePattern) {
+		var ret string
+		return ret
+	}
+	return *o.DatePattern
+}
+
+// GetDatePatternOk returns a tuple with the DatePattern field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetDatePatternOk() (*string, bool) {
+	if o == nil || IsNil(o.DatePattern) {
+		return nil, false
+	}
+	return o.DatePattern, true
+}
+
+// HasDatePattern returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasDatePattern() bool {
+	if o != nil && !IsNil(o.DatePattern) {
+		return true
+	}
+
+	return false
+}
+
+// SetDatePattern gets a reference to the given string and assigns it to the DatePattern field.
+func (o *FormsValidationRules) SetDatePattern(v string) {
+	o.DatePattern = &v
+}
+
+// GetMaxLength returns the MaxLength field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetMaxLength() int32 {
+	if o == nil || IsNil(o.MaxLength) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxLength
+}
+
+// GetMaxLengthOk returns a tuple with the MaxLength field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetMaxLengthOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxLength) {
+		return nil, false
+	}
+	return o.MaxLength, true
+}
+
+// HasMaxLength returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasMaxLength() bool {
+	if o != nil && !IsNil(o.MaxLength) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxLength gets a reference to the given int32 and assigns it to the MaxLength field.
+func (o *FormsValidationRules) SetMaxLength(v int32) {
+	o.MaxLength = &v
+}
+
+// GetMaxValue returns the MaxValue field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetMaxValue() string {
+	if o == nil || IsNil(o.MaxValue) {
+		var ret string
+		return ret
+	}
+	return *o.MaxValue
+}
+
+// GetMaxValueOk returns a tuple with the MaxValue field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetMaxValueOk() (*string, bool) {
+	if o == nil || IsNil(o.MaxValue) {
+		return nil, false
+	}
+	return o.MaxValue, true
+}
+
+// HasMaxValue returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasMaxValue() bool {
+	if o != nil && !IsNil(o.MaxValue) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxValue gets a reference to the given string and assigns it to the MaxValue field.
+func (o *FormsValidationRules) SetMaxValue(v string) {
+	o.MaxValue = &v
+}
+
+// GetMinValue returns the MinValue field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetMinValue() string {
+	if o == nil || IsNil(o.MinValue) {
+		var ret string
+		return ret
+	}
+	return *o.MinValue
+}
+
+// GetMinValueOk returns a tuple with the MinValue field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetMinValueOk() (*string, bool) {
+	if o == nil || IsNil(o.MinValue) {
+		return nil, false
+	}
+	return o.MinValue, true
+}
+
+// HasMinValue returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasMinValue() bool {
+	if o != nil && !IsNil(o.MinValue) {
+		return true
+	}
+
+	return false
+}
+
+// SetMinValue gets a reference to the given string and assigns it to the MinValue field.
+func (o *FormsValidationRules) SetMinValue(v string) {
+	o.MinValue = &v
+}
+
+// GetPattern returns the Pattern field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetPattern() string {
+	if o == nil || IsNil(o.Pattern) {
+		var ret string
+		return ret
+	}
+	return *o.Pattern
+}
+
+// GetPatternOk returns a tuple with the Pattern field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetPatternOk() (*string, bool) {
+	if o == nil || IsNil(o.Pattern) {
+		return nil, false
+	}
+	return o.Pattern, true
+}
+
+// HasPattern returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasPattern() bool {
+	if o != nil && !IsNil(o.Pattern) {
+		return true
+	}
+
+	return false
+}
+
+// SetPattern gets a reference to the given string and assigns it to the Pattern field.
+func (o *FormsValidationRules) SetPattern(v string) {
+	o.Pattern = &v
+}
+
+// GetSample returns the Sample field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetSample() string {
+	if o == nil || IsNil(o.Sample) {
+		var ret string
+		return ret
+	}
+	return *o.Sample
+}
+
+// GetSampleOk returns a tuple with the Sample field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetSampleOk() (*string, bool) {
+	if o == nil || IsNil(o.Sample) {
+		return nil, false
+	}
+	return o.Sample, true
+}
+
+// HasSample returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasSample() bool {
+	if o != nil && !IsNil(o.Sample) {
+		return true
+	}
+
+	return false
+}
+
+// SetSample gets a reference to the given string and assigns it to the Sample field.
+func (o *FormsValidationRules) SetSample(v string) {
+	o.Sample = &v
+}
+
+// GetForbiddenSymbols returns the ForbiddenSymbols field value if set, zero value otherwise.
+func (o *FormsValidationRules) GetForbiddenSymbols() []string {
+	if o == nil || IsNil(o.ForbiddenSymbols) {
+		var ret []string
+		return ret
+	}
+	return o.ForbiddenSymbols
+}
+
+// GetForbiddenSymbolsOk returns a tuple with the ForbiddenSymbols field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FormsValidationRules) GetForbiddenSymbolsOk() ([]string, bool) {
+	if o == nil || IsNil(o.ForbiddenSymbols) {
+		return nil, false
+	}
+	return o.ForbiddenSymbols, true
+}
+
+// HasForbiddenSymbols returns a boolean if a field has been set.
+func (o *FormsValidationRules) HasForbiddenSymbols() bool {
+	if o != nil && !IsNil(o.ForbiddenSymbols) {
+		return true
+	}
+
+	return false
+}
+
+// SetForbiddenSymbols gets a reference to the given []string and assigns it to the ForbiddenSymbols field.
+func (o *FormsValidationRules) SetForbiddenSymbols(v []string) {
+	o.ForbiddenSymbols = v
+}
+
+func (o FormsValidationRules) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FormsValidationRules) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DatePattern) {
+		toSerialize["datePattern"] = o.DatePattern
+	}
+	if !IsNil(o.MaxLength) {
+		toSerialize["maxLength"] = o.MaxLength
+	}
+	if !IsNil(o.MaxValue) {
+		toSerialize["maxValue"] = o.MaxValue
+	}
+	if !IsNil(o.MinValue) {
+		toSerialize["minValue"] = o.MinValue
+	}
+	if !IsNil(o.Pattern) {
+		toSerialize["pattern"] = o.Pattern
+	}
+	if !IsNil(o.Sample) {
+		toSerialize["sample"] = o.Sample
+	}
+	if !IsNil(o.ForbiddenSymbols) {
+		toSerialize["forbiddenSymbols"] = o.ForbiddenSymbols
+	}
+	return toSerialize, nil
+}
+
+type NullableFormsValidationRules struct {
+	value *FormsValidationRules
+	isSet bool
+}
+
+func (v NullableFormsValidationRules) Get() *FormsValidationRules {
+	return v.value
+}
+
+func (v *NullableFormsValidationRules) Set(val *FormsValidationRules) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFormsValidationRules) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFormsValidationRules) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFormsValidationRules(val *FormsValidationRules) *NullableFormsValidationRules {
+	return &NullableFormsValidationRules{value: val, isSet: true}
+}
+
+func (v NullableFormsValidationRules) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFormsValidationRules) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/sms/api_error.go b/pkg/infobip/models/sms/api_error.go
index 8620507..f1b660e 100644
--- a/pkg/infobip/models/sms/api_error.go
+++ b/pkg/infobip/models/sms/api_error.go
@@ -39,6 +39,7 @@ type _ApiError ApiError
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiError(errorCode string, description string, action string, violations []ApiErrorViolation, resources []ApiErrorResource) *ApiError {
 	this := ApiError{}
 	this.ErrorCode = errorCode
@@ -54,6 +55,7 @@ func NewApiError(errorCode string, description string, action string, violations
 // but it doesn't guarantee that properties required by API are set
 func NewApiErrorWithDefaults() *ApiError {
 	this := ApiError{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/api_error_resource.go b/pkg/infobip/models/sms/api_error_resource.go
index 1e874bf..a501597 100644
--- a/pkg/infobip/models/sms/api_error_resource.go
+++ b/pkg/infobip/models/sms/api_error_resource.go
@@ -31,6 +31,7 @@ type ApiErrorResource struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiErrorResource() *ApiErrorResource {
 	this := ApiErrorResource{}
 	return &this
@@ -41,6 +42,7 @@ func NewApiErrorResource() *ApiErrorResource {
 // but it doesn't guarantee that properties required by API are set
 func NewApiErrorResourceWithDefaults() *ApiErrorResource {
 	this := ApiErrorResource{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/api_error_violation.go b/pkg/infobip/models/sms/api_error_violation.go
index e217e68..c792a15 100644
--- a/pkg/infobip/models/sms/api_error_violation.go
+++ b/pkg/infobip/models/sms/api_error_violation.go
@@ -31,6 +31,7 @@ type ApiErrorViolation struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiErrorViolation() *ApiErrorViolation {
 	this := ApiErrorViolation{}
 	return &this
@@ -41,6 +42,7 @@ func NewApiErrorViolation() *ApiErrorViolation {
 // but it doesn't guarantee that properties required by API are set
 func NewApiErrorViolationWithDefaults() *ApiErrorViolation {
 	this := ApiErrorViolation{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/api_exception.go b/pkg/infobip/models/sms/api_exception.go
index 74c728e..574623f 100644
--- a/pkg/infobip/models/sms/api_exception.go
+++ b/pkg/infobip/models/sms/api_exception.go
@@ -28,6 +28,7 @@ type ApiException struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiException() *ApiException {
 	this := ApiException{}
 	return &this
@@ -38,6 +39,7 @@ func NewApiException() *ApiException {
 // but it doesn't guarantee that properties required by API are set
 func NewApiExceptionWithDefaults() *ApiException {
 	this := ApiException{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/api_request_error.go b/pkg/infobip/models/sms/api_request_error.go
index d17823a..5dab0bf 100644
--- a/pkg/infobip/models/sms/api_request_error.go
+++ b/pkg/infobip/models/sms/api_request_error.go
@@ -28,6 +28,7 @@ type ApiRequestError struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiRequestError() *ApiRequestError {
 	this := ApiRequestError{}
 	return &this
@@ -38,6 +39,7 @@ func NewApiRequestError() *ApiRequestError {
 // but it doesn't guarantee that properties required by API are set
 func NewApiRequestErrorWithDefaults() *ApiRequestError {
 	this := ApiRequestError{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/api_request_error_details.go b/pkg/infobip/models/sms/api_request_error_details.go
index 2133ae2..2abdd77 100644
--- a/pkg/infobip/models/sms/api_request_error_details.go
+++ b/pkg/infobip/models/sms/api_request_error_details.go
@@ -33,6 +33,7 @@ type ApiRequestErrorDetails struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApiRequestErrorDetails() *ApiRequestErrorDetails {
 	this := ApiRequestErrorDetails{}
 	return &this
@@ -43,6 +44,7 @@ func NewApiRequestErrorDetails() *ApiRequestErrorDetails {
 // but it doesn't guarantee that properties required by API are set
 func NewApiRequestErrorDetailsWithDefaults() *ApiRequestErrorDetails {
 	this := ApiRequestErrorDetails{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/application_configuration.go b/pkg/infobip/models/sms/application_configuration.go
index 53c6be3..2067c08 100644
--- a/pkg/infobip/models/sms/application_configuration.go
+++ b/pkg/infobip/models/sms/application_configuration.go
@@ -39,6 +39,7 @@ type ApplicationConfiguration struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApplicationConfiguration() *ApplicationConfiguration {
 	this := ApplicationConfiguration{}
 	var allowMultiplePinVerifications bool = true
@@ -61,6 +62,7 @@ func NewApplicationConfiguration() *ApplicationConfiguration {
 // but it doesn't guarantee that properties required by API are set
 func NewApplicationConfigurationWithDefaults() *ApplicationConfiguration {
 	this := ApplicationConfiguration{}
+
 	var allowMultiplePinVerifications bool = true
 	this.AllowMultiplePinVerifications = &allowMultiplePinVerifications
 	var pinAttempts int32 = 10
diff --git a/pkg/infobip/models/sms/application_request.go b/pkg/infobip/models/sms/application_request.go
index 181c36d..ba9d7f2 100644
--- a/pkg/infobip/models/sms/application_request.go
+++ b/pkg/infobip/models/sms/application_request.go
@@ -34,6 +34,7 @@ type _ApplicationRequest ApplicationRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApplicationRequest(name string) *ApplicationRequest {
 	this := ApplicationRequest{}
 	this.Name = name
@@ -45,6 +46,7 @@ func NewApplicationRequest(name string) *ApplicationRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewApplicationRequestWithDefaults() *ApplicationRequest {
 	this := ApplicationRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/application_response.go b/pkg/infobip/models/sms/application_response.go
index 0ef6dd3..cff982e 100644
--- a/pkg/infobip/models/sms/application_response.go
+++ b/pkg/infobip/models/sms/application_response.go
@@ -34,6 +34,7 @@ type ApplicationResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewApplicationResponse() *ApplicationResponse {
 	this := ApplicationResponse{}
 	return &this
@@ -44,6 +45,7 @@ func NewApplicationResponse() *ApplicationResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewApplicationResponseWithDefaults() *ApplicationResponse {
 	this := ApplicationResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/binary_content.go b/pkg/infobip/models/sms/binary_content.go
index 36e003e..6bd9da6 100644
--- a/pkg/infobip/models/sms/binary_content.go
+++ b/pkg/infobip/models/sms/binary_content.go
@@ -35,6 +35,7 @@ type _BinaryContent BinaryContent
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewBinaryContent(hex string) *BinaryContent {
 	this := BinaryContent{}
 	var dataCoding int32 = 0
@@ -50,6 +51,7 @@ func NewBinaryContent(hex string) *BinaryContent {
 // but it doesn't guarantee that properties required by API are set
 func NewBinaryContentWithDefaults() *BinaryContent {
 	this := BinaryContent{}
+
 	var dataCoding int32 = 0
 	this.DataCoding = &dataCoding
 	var esmClass int32 = 0
diff --git a/pkg/infobip/models/sms/bulk_request.go b/pkg/infobip/models/sms/bulk_request.go
index 1bfc8fe..e6b30cd 100644
--- a/pkg/infobip/models/sms/bulk_request.go
+++ b/pkg/infobip/models/sms/bulk_request.go
@@ -31,6 +31,7 @@ type _BulkRequest BulkRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewBulkRequest(sendAt Time) *BulkRequest {
 	this := BulkRequest{}
 	this.SendAt = sendAt
@@ -42,6 +43,7 @@ func NewBulkRequest(sendAt Time) *BulkRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewBulkRequestWithDefaults() *BulkRequest {
 	this := BulkRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/bulk_response.go b/pkg/infobip/models/sms/bulk_response.go
index aadb25f..bd13f0a 100644
--- a/pkg/infobip/models/sms/bulk_response.go
+++ b/pkg/infobip/models/sms/bulk_response.go
@@ -31,6 +31,7 @@ type BulkResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewBulkResponse() *BulkResponse {
 	this := BulkResponse{}
 	return &this
@@ -41,6 +42,7 @@ func NewBulkResponse() *BulkResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewBulkResponseWithDefaults() *BulkResponse {
 	this := BulkResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/bulk_status_response.go b/pkg/infobip/models/sms/bulk_status_response.go
index 1b38786..72c5551 100644
--- a/pkg/infobip/models/sms/bulk_status_response.go
+++ b/pkg/infobip/models/sms/bulk_status_response.go
@@ -30,6 +30,7 @@ type BulkStatusResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewBulkStatusResponse() *BulkStatusResponse {
 	this := BulkStatusResponse{}
 	return &this
@@ -40,6 +41,7 @@ func NewBulkStatusResponse() *BulkStatusResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewBulkStatusResponseWithDefaults() *BulkStatusResponse {
 	this := BulkStatusResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/create_email_message_request.go b/pkg/infobip/models/sms/create_email_message_request.go
index bdaf4c1..78ad27d 100644
--- a/pkg/infobip/models/sms/create_email_message_request.go
+++ b/pkg/infobip/models/sms/create_email_message_request.go
@@ -36,6 +36,7 @@ type _CreateEmailMessageRequest CreateEmailMessageRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewCreateEmailMessageRequest(emailTemplateId int64) *CreateEmailMessageRequest {
 	this := CreateEmailMessageRequest{}
 	this.EmailTemplateId = emailTemplateId
@@ -49,6 +50,7 @@ func NewCreateEmailMessageRequest(emailTemplateId int64) *CreateEmailMessageRequ
 // but it doesn't guarantee that properties required by API are set
 func NewCreateEmailMessageRequestWithDefaults() *CreateEmailMessageRequest {
 	this := CreateEmailMessageRequest{}
+
 	var pinLength int32 = 4
 	this.PinLength = &pinLength
 	return &this
diff --git a/pkg/infobip/models/sms/create_sms_or_voice_message_request.go b/pkg/infobip/models/sms/create_message_request.go
similarity index 67%
rename from pkg/infobip/models/sms/create_sms_or_voice_message_request.go
rename to pkg/infobip/models/sms/create_message_request.go
index 6e77a20..54905c2 100644
--- a/pkg/infobip/models/sms/create_sms_or_voice_message_request.go
+++ b/pkg/infobip/models/sms/create_message_request.go
@@ -16,11 +16,11 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the CreateSmsOrVoiceMessageRequest type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &CreateSmsOrVoiceMessageRequest{}
+// checks if the CreateMessageRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CreateMessageRequest{}
 
-// CreateSmsOrVoiceMessageRequest struct for CreateSmsOrVoiceMessageRequest
-type CreateSmsOrVoiceMessageRequest struct {
+// CreateMessageRequest struct for CreateMessageRequest
+type CreateMessageRequest struct {
 	Language *TfaLanguage
 	// Content of the message being sent which contains at minimum one placeholder for a PIN code (`{{pin}}`). Placeholder format is `{{placeholderName}}`.
 	MessageText string
@@ -38,29 +38,31 @@ type CreateSmsOrVoiceMessageRequest struct {
 	VoiceName *string
 }
 
-type _CreateSmsOrVoiceMessageRequest CreateSmsOrVoiceMessageRequest
+type _CreateMessageRequest CreateMessageRequest
 
-// NewCreateSmsOrVoiceMessageRequest instantiates a new CreateSmsOrVoiceMessageRequest object
+// NewCreateMessageRequest instantiates a new CreateMessageRequest object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewCreateSmsOrVoiceMessageRequest(messageText string, pinType PinType) *CreateSmsOrVoiceMessageRequest {
-	this := CreateSmsOrVoiceMessageRequest{}
+
+func NewCreateMessageRequest(messageText string, pinType PinType) *CreateMessageRequest {
+	this := CreateMessageRequest{}
 	this.MessageText = messageText
 	this.PinType = pinType
 	return &this
 }
 
-// NewCreateSmsOrVoiceMessageRequestWithDefaults instantiates a new CreateSmsOrVoiceMessageRequest object
+// NewCreateMessageRequestWithDefaults instantiates a new CreateMessageRequest object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewCreateSmsOrVoiceMessageRequestWithDefaults() *CreateSmsOrVoiceMessageRequest {
-	this := CreateSmsOrVoiceMessageRequest{}
+func NewCreateMessageRequestWithDefaults() *CreateMessageRequest {
+	this := CreateMessageRequest{}
+
 	return &this
 }
 
 // GetLanguage returns the Language field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetLanguage() TfaLanguage {
+func (o *CreateMessageRequest) GetLanguage() TfaLanguage {
 	if o == nil || IsNil(o.Language) {
 		var ret TfaLanguage
 		return ret
@@ -70,7 +72,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetLanguage() TfaLanguage {
 
 // GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetLanguageOk() (*TfaLanguage, bool) {
+func (o *CreateMessageRequest) GetLanguageOk() (*TfaLanguage, bool) {
 	if o == nil || IsNil(o.Language) {
 		return nil, false
 	}
@@ -78,7 +80,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetLanguageOk() (*TfaLanguage, bool) {
 }
 
 // HasLanguage returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasLanguage() bool {
+func (o *CreateMessageRequest) HasLanguage() bool {
 	if o != nil && !IsNil(o.Language) {
 		return true
 	}
@@ -87,12 +89,12 @@ func (o *CreateSmsOrVoiceMessageRequest) HasLanguage() bool {
 }
 
 // SetLanguage gets a reference to the given TfaLanguage and assigns it to the Language field.
-func (o *CreateSmsOrVoiceMessageRequest) SetLanguage(v TfaLanguage) {
+func (o *CreateMessageRequest) SetLanguage(v TfaLanguage) {
 	o.Language = &v
 }
 
 // GetMessageText returns the MessageText field value
-func (o *CreateSmsOrVoiceMessageRequest) GetMessageText() string {
+func (o *CreateMessageRequest) GetMessageText() string {
 	if o == nil {
 		var ret string
 		return ret
@@ -103,7 +105,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetMessageText() string {
 
 // GetMessageTextOk returns a tuple with the MessageText field value
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetMessageTextOk() (*string, bool) {
+func (o *CreateMessageRequest) GetMessageTextOk() (*string, bool) {
 	if o == nil {
 		return nil, false
 	}
@@ -111,12 +113,12 @@ func (o *CreateSmsOrVoiceMessageRequest) GetMessageTextOk() (*string, bool) {
 }
 
 // SetMessageText sets field value
-func (o *CreateSmsOrVoiceMessageRequest) SetMessageText(v string) {
+func (o *CreateMessageRequest) SetMessageText(v string) {
 	o.MessageText = v
 }
 
 // GetPinLength returns the PinLength field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetPinLength() int32 {
+func (o *CreateMessageRequest) GetPinLength() int32 {
 	if o == nil || IsNil(o.PinLength) {
 		var ret int32
 		return ret
@@ -126,7 +128,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetPinLength() int32 {
 
 // GetPinLengthOk returns a tuple with the PinLength field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetPinLengthOk() (*int32, bool) {
+func (o *CreateMessageRequest) GetPinLengthOk() (*int32, bool) {
 	if o == nil || IsNil(o.PinLength) {
 		return nil, false
 	}
@@ -134,7 +136,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetPinLengthOk() (*int32, bool) {
 }
 
 // HasPinLength returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasPinLength() bool {
+func (o *CreateMessageRequest) HasPinLength() bool {
 	if o != nil && !IsNil(o.PinLength) {
 		return true
 	}
@@ -143,12 +145,12 @@ func (o *CreateSmsOrVoiceMessageRequest) HasPinLength() bool {
 }
 
 // SetPinLength gets a reference to the given int32 and assigns it to the PinLength field.
-func (o *CreateSmsOrVoiceMessageRequest) SetPinLength(v int32) {
+func (o *CreateMessageRequest) SetPinLength(v int32) {
 	o.PinLength = &v
 }
 
 // GetPinType returns the PinType field value
-func (o *CreateSmsOrVoiceMessageRequest) GetPinType() PinType {
+func (o *CreateMessageRequest) GetPinType() PinType {
 	if o == nil {
 		var ret PinType
 		return ret
@@ -159,7 +161,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetPinType() PinType {
 
 // GetPinTypeOk returns a tuple with the PinType field value
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetPinTypeOk() (*PinType, bool) {
+func (o *CreateMessageRequest) GetPinTypeOk() (*PinType, bool) {
 	if o == nil {
 		return nil, false
 	}
@@ -167,12 +169,12 @@ func (o *CreateSmsOrVoiceMessageRequest) GetPinTypeOk() (*PinType, bool) {
 }
 
 // SetPinType sets field value
-func (o *CreateSmsOrVoiceMessageRequest) SetPinType(v PinType) {
+func (o *CreateMessageRequest) SetPinType(v PinType) {
 	o.PinType = v
 }
 
 // GetRegional returns the Regional field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetRegional() RegionalOptions {
+func (o *CreateMessageRequest) GetRegional() RegionalOptions {
 	if o == nil || IsNil(o.Regional) {
 		var ret RegionalOptions
 		return ret
@@ -182,7 +184,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetRegional() RegionalOptions {
 
 // GetRegionalOk returns a tuple with the Regional field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetRegionalOk() (*RegionalOptions, bool) {
+func (o *CreateMessageRequest) GetRegionalOk() (*RegionalOptions, bool) {
 	if o == nil || IsNil(o.Regional) {
 		return nil, false
 	}
@@ -190,7 +192,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetRegionalOk() (*RegionalOptions, bool
 }
 
 // HasRegional returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasRegional() bool {
+func (o *CreateMessageRequest) HasRegional() bool {
 	if o != nil && !IsNil(o.Regional) {
 		return true
 	}
@@ -199,12 +201,12 @@ func (o *CreateSmsOrVoiceMessageRequest) HasRegional() bool {
 }
 
 // SetRegional gets a reference to the given RegionalOptions and assigns it to the Regional field.
-func (o *CreateSmsOrVoiceMessageRequest) SetRegional(v RegionalOptions) {
+func (o *CreateMessageRequest) SetRegional(v RegionalOptions) {
 	o.Regional = &v
 }
 
 // GetRepeatDTMF returns the RepeatDTMF field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetRepeatDTMF() string {
+func (o *CreateMessageRequest) GetRepeatDTMF() string {
 	if o == nil || IsNil(o.RepeatDTMF) {
 		var ret string
 		return ret
@@ -214,7 +216,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetRepeatDTMF() string {
 
 // GetRepeatDTMFOk returns a tuple with the RepeatDTMF field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetRepeatDTMFOk() (*string, bool) {
+func (o *CreateMessageRequest) GetRepeatDTMFOk() (*string, bool) {
 	if o == nil || IsNil(o.RepeatDTMF) {
 		return nil, false
 	}
@@ -222,7 +224,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetRepeatDTMFOk() (*string, bool) {
 }
 
 // HasRepeatDTMF returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasRepeatDTMF() bool {
+func (o *CreateMessageRequest) HasRepeatDTMF() bool {
 	if o != nil && !IsNil(o.RepeatDTMF) {
 		return true
 	}
@@ -231,12 +233,12 @@ func (o *CreateSmsOrVoiceMessageRequest) HasRepeatDTMF() bool {
 }
 
 // SetRepeatDTMF gets a reference to the given string and assigns it to the RepeatDTMF field.
-func (o *CreateSmsOrVoiceMessageRequest) SetRepeatDTMF(v string) {
+func (o *CreateMessageRequest) SetRepeatDTMF(v string) {
 	o.RepeatDTMF = &v
 }
 
 // GetSenderId returns the SenderId field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetSenderId() string {
+func (o *CreateMessageRequest) GetSenderId() string {
 	if o == nil || IsNil(o.SenderId) {
 		var ret string
 		return ret
@@ -246,7 +248,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetSenderId() string {
 
 // GetSenderIdOk returns a tuple with the SenderId field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetSenderIdOk() (*string, bool) {
+func (o *CreateMessageRequest) GetSenderIdOk() (*string, bool) {
 	if o == nil || IsNil(o.SenderId) {
 		return nil, false
 	}
@@ -254,7 +256,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetSenderIdOk() (*string, bool) {
 }
 
 // HasSenderId returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasSenderId() bool {
+func (o *CreateMessageRequest) HasSenderId() bool {
 	if o != nil && !IsNil(o.SenderId) {
 		return true
 	}
@@ -263,12 +265,12 @@ func (o *CreateSmsOrVoiceMessageRequest) HasSenderId() bool {
 }
 
 // SetSenderId gets a reference to the given string and assigns it to the SenderId field.
-func (o *CreateSmsOrVoiceMessageRequest) SetSenderId(v string) {
+func (o *CreateMessageRequest) SetSenderId(v string) {
 	o.SenderId = &v
 }
 
 // GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetSpeechRate() float64 {
+func (o *CreateMessageRequest) GetSpeechRate() float64 {
 	if o == nil || IsNil(o.SpeechRate) {
 		var ret float64
 		return ret
@@ -278,7 +280,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetSpeechRate() float64 {
 
 // GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetSpeechRateOk() (*float64, bool) {
+func (o *CreateMessageRequest) GetSpeechRateOk() (*float64, bool) {
 	if o == nil || IsNil(o.SpeechRate) {
 		return nil, false
 	}
@@ -286,7 +288,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetSpeechRateOk() (*float64, bool) {
 }
 
 // HasSpeechRate returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasSpeechRate() bool {
+func (o *CreateMessageRequest) HasSpeechRate() bool {
 	if o != nil && !IsNil(o.SpeechRate) {
 		return true
 	}
@@ -295,12 +297,12 @@ func (o *CreateSmsOrVoiceMessageRequest) HasSpeechRate() bool {
 }
 
 // SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
-func (o *CreateSmsOrVoiceMessageRequest) SetSpeechRate(v float64) {
+func (o *CreateMessageRequest) SetSpeechRate(v float64) {
 	o.SpeechRate = &v
 }
 
 // GetVoiceName returns the VoiceName field value if set, zero value otherwise.
-func (o *CreateSmsOrVoiceMessageRequest) GetVoiceName() string {
+func (o *CreateMessageRequest) GetVoiceName() string {
 	if o == nil || IsNil(o.VoiceName) {
 		var ret string
 		return ret
@@ -310,7 +312,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetVoiceName() string {
 
 // GetVoiceNameOk returns a tuple with the VoiceName field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *CreateSmsOrVoiceMessageRequest) GetVoiceNameOk() (*string, bool) {
+func (o *CreateMessageRequest) GetVoiceNameOk() (*string, bool) {
 	if o == nil || IsNil(o.VoiceName) {
 		return nil, false
 	}
@@ -318,7 +320,7 @@ func (o *CreateSmsOrVoiceMessageRequest) GetVoiceNameOk() (*string, bool) {
 }
 
 // HasVoiceName returns a boolean if a field has been set.
-func (o *CreateSmsOrVoiceMessageRequest) HasVoiceName() bool {
+func (o *CreateMessageRequest) HasVoiceName() bool {
 	if o != nil && !IsNil(o.VoiceName) {
 		return true
 	}
@@ -327,11 +329,11 @@ func (o *CreateSmsOrVoiceMessageRequest) HasVoiceName() bool {
 }
 
 // SetVoiceName gets a reference to the given string and assigns it to the VoiceName field.
-func (o *CreateSmsOrVoiceMessageRequest) SetVoiceName(v string) {
+func (o *CreateMessageRequest) SetVoiceName(v string) {
 	o.VoiceName = &v
 }
 
-func (o CreateSmsOrVoiceMessageRequest) MarshalJSON() ([]byte, error) {
+func (o CreateMessageRequest) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -339,7 +341,7 @@ func (o CreateSmsOrVoiceMessageRequest) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o CreateSmsOrVoiceMessageRequest) ToMap() (map[string]interface{}, error) {
+func (o CreateMessageRequest) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.Language) {
 		toSerialize["language"] = o.Language
@@ -367,38 +369,38 @@ func (o CreateSmsOrVoiceMessageRequest) ToMap() (map[string]interface{}, error)
 	return toSerialize, nil
 }
 
-type NullableCreateSmsOrVoiceMessageRequest struct {
-	value *CreateSmsOrVoiceMessageRequest
+type NullableCreateMessageRequest struct {
+	value *CreateMessageRequest
 	isSet bool
 }
 
-func (v NullableCreateSmsOrVoiceMessageRequest) Get() *CreateSmsOrVoiceMessageRequest {
+func (v NullableCreateMessageRequest) Get() *CreateMessageRequest {
 	return v.value
 }
 
-func (v *NullableCreateSmsOrVoiceMessageRequest) Set(val *CreateSmsOrVoiceMessageRequest) {
+func (v *NullableCreateMessageRequest) Set(val *CreateMessageRequest) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableCreateSmsOrVoiceMessageRequest) IsSet() bool {
+func (v NullableCreateMessageRequest) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableCreateSmsOrVoiceMessageRequest) Unset() {
+func (v *NullableCreateMessageRequest) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableCreateSmsOrVoiceMessageRequest(val *CreateSmsOrVoiceMessageRequest) *NullableCreateSmsOrVoiceMessageRequest {
-	return &NullableCreateSmsOrVoiceMessageRequest{value: val, isSet: true}
+func NewNullableCreateMessageRequest(val *CreateMessageRequest) *NullableCreateMessageRequest {
+	return &NullableCreateMessageRequest{value: val, isSet: true}
 }
 
-func (v NullableCreateSmsOrVoiceMessageRequest) MarshalJSON() ([]byte, error) {
+func (v NullableCreateMessageRequest) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableCreateSmsOrVoiceMessageRequest) UnmarshalJSON(src []byte) error {
+func (v *NullableCreateMessageRequest) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/sms/delivery_report.go b/pkg/infobip/models/sms/delivery_report.go
index 4c06836..2a63f87 100644
--- a/pkg/infobip/models/sms/delivery_report.go
+++ b/pkg/infobip/models/sms/delivery_report.go
@@ -51,6 +51,7 @@ type DeliveryReport struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryReport() *DeliveryReport {
 	this := DeliveryReport{}
 	return &this
@@ -61,6 +62,7 @@ func NewDeliveryReport() *DeliveryReport {
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryReportWithDefaults() *DeliveryReport {
 	this := DeliveryReport{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/delivery_reports.go b/pkg/infobip/models/sms/delivery_reports.go
index 562689d..1498603 100644
--- a/pkg/infobip/models/sms/delivery_reports.go
+++ b/pkg/infobip/models/sms/delivery_reports.go
@@ -29,6 +29,7 @@ type DeliveryReports struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryReports() *DeliveryReports {
 	this := DeliveryReports{}
 	return &this
@@ -39,6 +40,7 @@ func NewDeliveryReports() *DeliveryReports {
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryReportsWithDefaults() *DeliveryReports {
 	this := DeliveryReports{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/delivery_time.go b/pkg/infobip/models/sms/delivery_time.go
index 32724a6..5f42547 100644
--- a/pkg/infobip/models/sms/delivery_time.go
+++ b/pkg/infobip/models/sms/delivery_time.go
@@ -33,6 +33,7 @@ type _DeliveryTime DeliveryTime
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryTime(hour int32, minute int32) *DeliveryTime {
 	this := DeliveryTime{}
 	this.Hour = hour
@@ -45,6 +46,7 @@ func NewDeliveryTime(hour int32, minute int32) *DeliveryTime {
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryTimeWithDefaults() *DeliveryTime {
 	this := DeliveryTime{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/delivery_time_window.go b/pkg/infobip/models/sms/delivery_time_window.go
index bee58d4..8eec494 100644
--- a/pkg/infobip/models/sms/delivery_time_window.go
+++ b/pkg/infobip/models/sms/delivery_time_window.go
@@ -33,6 +33,7 @@ type _DeliveryTimeWindow DeliveryTimeWindow
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDeliveryTimeWindow(days []DeliveryDay) *DeliveryTimeWindow {
 	this := DeliveryTimeWindow{}
 	this.Days = days
@@ -44,6 +45,7 @@ func NewDeliveryTimeWindow(days []DeliveryDay) *DeliveryTimeWindow {
 // but it doesn't guarantee that properties required by API are set
 func NewDeliveryTimeWindowWithDefaults() *DeliveryTimeWindow {
 	this := DeliveryTimeWindow{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/destination.go b/pkg/infobip/models/sms/destination.go
index dc86b35..96e3caa 100644
--- a/pkg/infobip/models/sms/destination.go
+++ b/pkg/infobip/models/sms/destination.go
@@ -35,6 +35,7 @@ type _Destination Destination
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewDestination(to string) *Destination {
 	this := Destination{}
 	this.To = to
@@ -46,6 +47,7 @@ func NewDestination(to string) *Destination {
 // but it doesn't guarantee that properties required by API are set
 func NewDestinationWithDefaults() *Destination {
 	this := Destination{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/email_message.go b/pkg/infobip/models/sms/email_message.go
index fd75620..5a19d78 100644
--- a/pkg/infobip/models/sms/email_message.go
+++ b/pkg/infobip/models/sms/email_message.go
@@ -38,6 +38,7 @@ type EmailMessage struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewEmailMessage() *EmailMessage {
 	this := EmailMessage{}
 	return &this
@@ -48,6 +49,7 @@ func NewEmailMessage() *EmailMessage {
 // but it doesn't guarantee that properties required by API are set
 func NewEmailMessageWithDefaults() *EmailMessage {
 	this := EmailMessage{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/email_status.go b/pkg/infobip/models/sms/email_status.go
index 08aead7..29e3bc1 100644
--- a/pkg/infobip/models/sms/email_status.go
+++ b/pkg/infobip/models/sms/email_status.go
@@ -31,6 +31,7 @@ type EmailStatus struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewEmailStatus() *EmailStatus {
 	this := EmailStatus{}
 	return &this
@@ -41,6 +42,7 @@ func NewEmailStatus() *EmailStatus {
 // but it doesn't guarantee that properties required by API are set
 func NewEmailStatusWithDefaults() *EmailStatus {
 	this := EmailStatus{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/inbound_message.go b/pkg/infobip/models/sms/inbound_message.go
index dd225d6..4a8070b 100644
--- a/pkg/infobip/models/sms/inbound_message.go
+++ b/pkg/infobip/models/sms/inbound_message.go
@@ -52,6 +52,7 @@ type InboundMessage struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewInboundMessage() *InboundMessage {
 	this := InboundMessage{}
 	return &this
@@ -62,6 +63,7 @@ func NewInboundMessage() *InboundMessage {
 // but it doesn't guarantee that properties required by API are set
 func NewInboundMessageWithDefaults() *InboundMessage {
 	this := InboundMessage{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/inbound_message_result.go b/pkg/infobip/models/sms/inbound_message_result.go
index 7cf16ce..a504bfc 100644
--- a/pkg/infobip/models/sms/inbound_message_result.go
+++ b/pkg/infobip/models/sms/inbound_message_result.go
@@ -33,6 +33,7 @@ type InboundMessageResult struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewInboundMessageResult() *InboundMessageResult {
 	this := InboundMessageResult{}
 	return &this
@@ -43,6 +44,7 @@ func NewInboundMessageResult() *InboundMessageResult {
 // but it doesn't guarantee that properties required by API are set
 func NewInboundMessageResultWithDefaults() *InboundMessageResult {
 	this := InboundMessageResult{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/india_dlt_options.go b/pkg/infobip/models/sms/india_dlt_options.go
index 3f22170..630d8fe 100644
--- a/pkg/infobip/models/sms/india_dlt_options.go
+++ b/pkg/infobip/models/sms/india_dlt_options.go
@@ -25,6 +25,8 @@ type IndiaDltOptions struct {
 	ContentTemplateId *string
 	// Your assigned DLT principal entity ID.
 	PrincipalEntityId string
+	// Your assigned Telemarketer ID. (required for Aggregators)
+	TelemarketerId *string
 }
 
 type _IndiaDltOptions IndiaDltOptions
@@ -33,6 +35,7 @@ type _IndiaDltOptions IndiaDltOptions
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewIndiaDltOptions(principalEntityId string) *IndiaDltOptions {
 	this := IndiaDltOptions{}
 	this.PrincipalEntityId = principalEntityId
@@ -44,6 +47,7 @@ func NewIndiaDltOptions(principalEntityId string) *IndiaDltOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewIndiaDltOptionsWithDefaults() *IndiaDltOptions {
 	this := IndiaDltOptions{}
+
 	return &this
 }
 
@@ -103,6 +107,38 @@ func (o *IndiaDltOptions) SetPrincipalEntityId(v string) {
 	o.PrincipalEntityId = v
 }
 
+// GetTelemarketerId returns the TelemarketerId field value if set, zero value otherwise.
+func (o *IndiaDltOptions) GetTelemarketerId() string {
+	if o == nil || IsNil(o.TelemarketerId) {
+		var ret string
+		return ret
+	}
+	return *o.TelemarketerId
+}
+
+// GetTelemarketerIdOk returns a tuple with the TelemarketerId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IndiaDltOptions) GetTelemarketerIdOk() (*string, bool) {
+	if o == nil || IsNil(o.TelemarketerId) {
+		return nil, false
+	}
+	return o.TelemarketerId, true
+}
+
+// HasTelemarketerId returns a boolean if a field has been set.
+func (o *IndiaDltOptions) HasTelemarketerId() bool {
+	if o != nil && !IsNil(o.TelemarketerId) {
+		return true
+	}
+
+	return false
+}
+
+// SetTelemarketerId gets a reference to the given string and assigns it to the TelemarketerId field.
+func (o *IndiaDltOptions) SetTelemarketerId(v string) {
+	o.TelemarketerId = &v
+}
+
 func (o IndiaDltOptions) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
@@ -117,6 +153,9 @@ func (o IndiaDltOptions) ToMap() (map[string]interface{}, error) {
 		toSerialize["contentTemplateId"] = o.ContentTemplateId
 	}
 	toSerialize["principalEntityId"] = o.PrincipalEntityId
+	if !IsNil(o.TelemarketerId) {
+		toSerialize["telemarketerId"] = o.TelemarketerId
+	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/sms/language_v3.go b/pkg/infobip/models/sms/language.go
similarity index 71%
rename from pkg/infobip/models/sms/language_v3.go
rename to pkg/infobip/models/sms/language.go
index ab12dd0..3bd93bc 100644
--- a/pkg/infobip/models/sms/language_v3.go
+++ b/pkg/infobip/models/sms/language.go
@@ -16,11 +16,11 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the LanguageV3 type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &LanguageV3{}
+// checks if the Language type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Language{}
 
-// LanguageV3 Sets the language parameters for the message being sent.
-type LanguageV3 struct {
+// Language Sets the language parameters for the message being sent.
+type Language struct {
 	LanguageCode *LanguageCode
 	// Uses a single shift table which enhances only the extension table of the GSM default alphabet. Allows you to selectively improve character support without altering the entire message.
 	SingleShift *bool
@@ -28,12 +28,13 @@ type LanguageV3 struct {
 	LockingShift *bool
 }
 
-// NewLanguageV3 instantiates a new LanguageV3 object
+// NewLanguage instantiates a new Language object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewLanguageV3() *LanguageV3 {
-	this := LanguageV3{}
+
+func NewLanguage() *Language {
+	this := Language{}
 	var singleShift bool = false
 	this.SingleShift = &singleShift
 	var lockingShift bool = false
@@ -41,11 +42,12 @@ func NewLanguageV3() *LanguageV3 {
 	return &this
 }
 
-// NewLanguageV3WithDefaults instantiates a new LanguageV3 object
+// NewLanguageWithDefaults instantiates a new Language object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewLanguageV3WithDefaults() *LanguageV3 {
-	this := LanguageV3{}
+func NewLanguageWithDefaults() *Language {
+	this := Language{}
+
 	var singleShift bool = false
 	this.SingleShift = &singleShift
 	var lockingShift bool = false
@@ -54,7 +56,7 @@ func NewLanguageV3WithDefaults() *LanguageV3 {
 }
 
 // GetLanguageCode returns the LanguageCode field value if set, zero value otherwise.
-func (o *LanguageV3) GetLanguageCode() LanguageCode {
+func (o *Language) GetLanguageCode() LanguageCode {
 	if o == nil || IsNil(o.LanguageCode) {
 		var ret LanguageCode
 		return ret
@@ -64,7 +66,7 @@ func (o *LanguageV3) GetLanguageCode() LanguageCode {
 
 // GetLanguageCodeOk returns a tuple with the LanguageCode field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *LanguageV3) GetLanguageCodeOk() (*LanguageCode, bool) {
+func (o *Language) GetLanguageCodeOk() (*LanguageCode, bool) {
 	if o == nil || IsNil(o.LanguageCode) {
 		return nil, false
 	}
@@ -72,7 +74,7 @@ func (o *LanguageV3) GetLanguageCodeOk() (*LanguageCode, bool) {
 }
 
 // HasLanguageCode returns a boolean if a field has been set.
-func (o *LanguageV3) HasLanguageCode() bool {
+func (o *Language) HasLanguageCode() bool {
 	if o != nil && !IsNil(o.LanguageCode) {
 		return true
 	}
@@ -81,12 +83,12 @@ func (o *LanguageV3) HasLanguageCode() bool {
 }
 
 // SetLanguageCode gets a reference to the given LanguageCode and assigns it to the LanguageCode field.
-func (o *LanguageV3) SetLanguageCode(v LanguageCode) {
+func (o *Language) SetLanguageCode(v LanguageCode) {
 	o.LanguageCode = &v
 }
 
 // GetSingleShift returns the SingleShift field value if set, zero value otherwise.
-func (o *LanguageV3) GetSingleShift() bool {
+func (o *Language) GetSingleShift() bool {
 	if o == nil || IsNil(o.SingleShift) {
 		var ret bool
 		return ret
@@ -96,7 +98,7 @@ func (o *LanguageV3) GetSingleShift() bool {
 
 // GetSingleShiftOk returns a tuple with the SingleShift field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *LanguageV3) GetSingleShiftOk() (*bool, bool) {
+func (o *Language) GetSingleShiftOk() (*bool, bool) {
 	if o == nil || IsNil(o.SingleShift) {
 		return nil, false
 	}
@@ -104,7 +106,7 @@ func (o *LanguageV3) GetSingleShiftOk() (*bool, bool) {
 }
 
 // HasSingleShift returns a boolean if a field has been set.
-func (o *LanguageV3) HasSingleShift() bool {
+func (o *Language) HasSingleShift() bool {
 	if o != nil && !IsNil(o.SingleShift) {
 		return true
 	}
@@ -113,12 +115,12 @@ func (o *LanguageV3) HasSingleShift() bool {
 }
 
 // SetSingleShift gets a reference to the given bool and assigns it to the SingleShift field.
-func (o *LanguageV3) SetSingleShift(v bool) {
+func (o *Language) SetSingleShift(v bool) {
 	o.SingleShift = &v
 }
 
 // GetLockingShift returns the LockingShift field value if set, zero value otherwise.
-func (o *LanguageV3) GetLockingShift() bool {
+func (o *Language) GetLockingShift() bool {
 	if o == nil || IsNil(o.LockingShift) {
 		var ret bool
 		return ret
@@ -128,7 +130,7 @@ func (o *LanguageV3) GetLockingShift() bool {
 
 // GetLockingShiftOk returns a tuple with the LockingShift field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *LanguageV3) GetLockingShiftOk() (*bool, bool) {
+func (o *Language) GetLockingShiftOk() (*bool, bool) {
 	if o == nil || IsNil(o.LockingShift) {
 		return nil, false
 	}
@@ -136,7 +138,7 @@ func (o *LanguageV3) GetLockingShiftOk() (*bool, bool) {
 }
 
 // HasLockingShift returns a boolean if a field has been set.
-func (o *LanguageV3) HasLockingShift() bool {
+func (o *Language) HasLockingShift() bool {
 	if o != nil && !IsNil(o.LockingShift) {
 		return true
 	}
@@ -145,11 +147,11 @@ func (o *LanguageV3) HasLockingShift() bool {
 }
 
 // SetLockingShift gets a reference to the given bool and assigns it to the LockingShift field.
-func (o *LanguageV3) SetLockingShift(v bool) {
+func (o *Language) SetLockingShift(v bool) {
 	o.LockingShift = &v
 }
 
-func (o LanguageV3) MarshalJSON() ([]byte, error) {
+func (o Language) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -157,7 +159,7 @@ func (o LanguageV3) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o LanguageV3) ToMap() (map[string]interface{}, error) {
+func (o Language) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.LanguageCode) {
 		toSerialize["languageCode"] = o.LanguageCode
@@ -171,38 +173,38 @@ func (o LanguageV3) ToMap() (map[string]interface{}, error) {
 	return toSerialize, nil
 }
 
-type NullableLanguageV3 struct {
-	value *LanguageV3
+type NullableLanguage struct {
+	value *Language
 	isSet bool
 }
 
-func (v NullableLanguageV3) Get() *LanguageV3 {
+func (v NullableLanguage) Get() *Language {
 	return v.value
 }
 
-func (v *NullableLanguageV3) Set(val *LanguageV3) {
+func (v *NullableLanguage) Set(val *Language) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableLanguageV3) IsSet() bool {
+func (v NullableLanguage) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableLanguageV3) Unset() {
+func (v *NullableLanguage) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableLanguageV3(val *LanguageV3) *NullableLanguageV3 {
-	return &NullableLanguageV3{value: val, isSet: true}
+func NewNullableLanguage(val *Language) *NullableLanguage {
+	return &NullableLanguage{value: val, isSet: true}
 }
 
-func (v NullableLanguageV3) MarshalJSON() ([]byte, error) {
+func (v NullableLanguage) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableLanguageV3) UnmarshalJSON(src []byte) error {
+func (v *NullableLanguage) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/sms/language_configuration.go b/pkg/infobip/models/sms/language_configuration.go
index bf6fc0a..796cdfd 100644
--- a/pkg/infobip/models/sms/language_configuration.go
+++ b/pkg/infobip/models/sms/language_configuration.go
@@ -21,7 +21,7 @@ var _ MappedNullable = &LanguageConfiguration{}
 
 // LanguageConfiguration Sets up additional configuration that changes the original message content you can preview with this call.
 type LanguageConfiguration struct {
-	Language *LanguageV1
+	Language *PreviewLanguage
 	// Conversion of a message text from one script to another. Possible values: `TURKISH`, `GREEK`, `CYRILLIC`, `SERBIAN_CYRILLIC`, `BULGARIAN_CYRILLIC`, `CENTRAL_EUROPEAN`, `BALTIC` and `NON_UNICODE`.
 	Transliteration *string
 }
@@ -30,6 +30,7 @@ type LanguageConfiguration struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewLanguageConfiguration() *LanguageConfiguration {
 	this := LanguageConfiguration{}
 	return &this
@@ -40,13 +41,14 @@ func NewLanguageConfiguration() *LanguageConfiguration {
 // but it doesn't guarantee that properties required by API are set
 func NewLanguageConfigurationWithDefaults() *LanguageConfiguration {
 	this := LanguageConfiguration{}
+
 	return &this
 }
 
 // GetLanguage returns the Language field value if set, zero value otherwise.
-func (o *LanguageConfiguration) GetLanguage() LanguageV1 {
+func (o *LanguageConfiguration) GetLanguage() PreviewLanguage {
 	if o == nil || IsNil(o.Language) {
-		var ret LanguageV1
+		var ret PreviewLanguage
 		return ret
 	}
 	return *o.Language
@@ -54,7 +56,7 @@ func (o *LanguageConfiguration) GetLanguage() LanguageV1 {
 
 // GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *LanguageConfiguration) GetLanguageOk() (*LanguageV1, bool) {
+func (o *LanguageConfiguration) GetLanguageOk() (*PreviewLanguage, bool) {
 	if o == nil || IsNil(o.Language) {
 		return nil, false
 	}
@@ -70,8 +72,8 @@ func (o *LanguageConfiguration) HasLanguage() bool {
 	return false
 }
 
-// SetLanguage gets a reference to the given LanguageV1 and assigns it to the Language field.
-func (o *LanguageConfiguration) SetLanguage(v LanguageV1) {
+// SetLanguage gets a reference to the given PreviewLanguage and assigns it to the Language field.
+func (o *LanguageConfiguration) SetLanguage(v PreviewLanguage) {
 	o.Language = &v
 }
 
diff --git a/pkg/infobip/models/sms/log.go b/pkg/infobip/models/sms/log.go
index c6cc4b9..44dd201 100644
--- a/pkg/infobip/models/sms/log.go
+++ b/pkg/infobip/models/sms/log.go
@@ -39,7 +39,7 @@ type Log struct {
 	Status       *MessageStatus
 	Error        *MessageError
 	Platform     *Platform
-	Content      *LogContent
+	Content      *MessageContent
 	// ID of a campaign that was sent in the message.
 	CampaignReferenceId *string
 	// Mobile country and network codes.
@@ -50,6 +50,7 @@ type Log struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewLog() *Log {
 	this := Log{}
 	return &this
@@ -60,6 +61,7 @@ func NewLog() *Log {
 // but it doesn't guarantee that properties required by API are set
 func NewLogWithDefaults() *Log {
 	this := Log{}
+
 	return &this
 }
 
@@ -416,9 +418,9 @@ func (o *Log) SetPlatform(v Platform) {
 }
 
 // GetContent returns the Content field value if set, zero value otherwise.
-func (o *Log) GetContent() LogContent {
+func (o *Log) GetContent() MessageContent {
 	if o == nil || IsNil(o.Content) {
-		var ret LogContent
+		var ret MessageContent
 		return ret
 	}
 	return *o.Content
@@ -426,7 +428,7 @@ func (o *Log) GetContent() LogContent {
 
 // GetContentOk returns a tuple with the Content field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Log) GetContentOk() (*LogContent, bool) {
+func (o *Log) GetContentOk() (*MessageContent, bool) {
 	if o == nil || IsNil(o.Content) {
 		return nil, false
 	}
@@ -442,8 +444,8 @@ func (o *Log) HasContent() bool {
 	return false
 }
 
-// SetContent gets a reference to the given LogContent and assigns it to the Content field.
-func (o *Log) SetContent(v LogContent) {
+// SetContent gets a reference to the given MessageContent and assigns it to the Content field.
+func (o *Log) SetContent(v MessageContent) {
 	o.Content = &v
 }
 
diff --git a/pkg/infobip/models/sms/logs_response.go b/pkg/infobip/models/sms/logs_response.go
index eef5c1e..98691f6 100644
--- a/pkg/infobip/models/sms/logs_response.go
+++ b/pkg/infobip/models/sms/logs_response.go
@@ -29,6 +29,7 @@ type LogsResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewLogsResponse() *LogsResponse {
 	this := LogsResponse{}
 	return &this
@@ -39,6 +40,7 @@ func NewLogsResponse() *LogsResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewLogsResponseWithDefaults() *LogsResponse {
 	this := LogsResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message.go b/pkg/infobip/models/sms/message.go
index 071058c..3d7e028 100644
--- a/pkg/infobip/models/sms/message.go
+++ b/pkg/infobip/models/sms/message.go
@@ -25,7 +25,7 @@ type Message struct {
 	Sender *string
 	// An array of destination objects for where messages are being sent. A valid destination is required.
 	Destinations []Destination
-	Content      LogContent
+	Content      MessageContent
 	Options      *MessageOptions
 	Webhooks     *Webhooks
 }
@@ -36,7 +36,8 @@ type _Message Message
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewMessage(destinations []Destination, content LogContent) *Message {
+
+func NewMessage(destinations []Destination, content MessageContent) *Message {
 	this := Message{}
 	this.Destinations = destinations
 	this.Content = content
@@ -48,6 +49,7 @@ func NewMessage(destinations []Destination, content LogContent) *Message {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageWithDefaults() *Message {
 	this := Message{}
+
 	return &this
 }
 
@@ -108,9 +110,9 @@ func (o *Message) SetDestinations(v []Destination) {
 }
 
 // GetContent returns the Content field value
-func (o *Message) GetContent() LogContent {
+func (o *Message) GetContent() MessageContent {
 	if o == nil {
-		var ret LogContent
+		var ret MessageContent
 		return ret
 	}
 
@@ -119,7 +121,7 @@ func (o *Message) GetContent() LogContent {
 
 // GetContentOk returns a tuple with the Content field value
 // and a boolean to check if the value has been set.
-func (o *Message) GetContentOk() (*LogContent, bool) {
+func (o *Message) GetContentOk() (*MessageContent, bool) {
 	if o == nil {
 		return nil, false
 	}
@@ -127,7 +129,7 @@ func (o *Message) GetContentOk() (*LogContent, bool) {
 }
 
 // SetContent sets field value
-func (o *Message) SetContent(v LogContent) {
+func (o *Message) SetContent(v MessageContent) {
 	o.Content = v
 }
 
diff --git a/pkg/infobip/models/sms/log_content.go b/pkg/infobip/models/sms/message_content.go
similarity index 65%
rename from pkg/infobip/models/sms/log_content.go
rename to pkg/infobip/models/sms/message_content.go
index 12d631b..c1c6c89 100644
--- a/pkg/infobip/models/sms/log_content.go
+++ b/pkg/infobip/models/sms/message_content.go
@@ -14,32 +14,33 @@ import (
 	"encoding/json"
 	"fmt"
 
-	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 	"gopkg.in/validator.v2"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// LogContent - struct for LogContent
-type LogContent struct {
+// MessageContent - Message content.
+type MessageContent struct {
 	BinaryContent      *BinaryContent
 	TextMessageContent *TextMessageContent
 }
 
-// BinaryContentAsLogContent is a convenience function that returns BinaryContent wrapped in LogContent
-func BinaryContentAsLogContent(v *BinaryContent) LogContent {
-	return LogContent{
+// BinaryContentAsMessageContent is a convenience function that returns BinaryContent wrapped in MessageContent
+func BinaryContentAsMessageContent(v *BinaryContent) MessageContent {
+	return MessageContent{
 		BinaryContent: v,
 	}
 }
 
-// TextMessageContentAsLogContent is a convenience function that returns TextMessageContent wrapped in LogContent
-func TextMessageContentAsLogContent(v *TextMessageContent) LogContent {
-	return LogContent{
+// TextMessageContentAsMessageContent is a convenience function that returns TextMessageContent wrapped in MessageContent
+func TextMessageContentAsMessageContent(v *TextMessageContent) MessageContent {
+	return MessageContent{
 		TextMessageContent: v,
 	}
 }
 
 // Unmarshal JSON data into one of the pointers in the struct
-func (dst *LogContent) UnmarshalJSON(data []byte) error {
+func (dst *MessageContent) UnmarshalJSON(data []byte) error {
 	var err error
 	match := 0
 	// try to unmarshal data into BinaryContent
@@ -81,16 +82,16 @@ func (dst *LogContent) UnmarshalJSON(data []byte) error {
 		dst.BinaryContent = nil
 		dst.TextMessageContent = nil
 
-		return fmt.Errorf("data matches more than one schema in oneOf(LogContent)")
+		return fmt.Errorf("data matches more than one schema in oneOf(MessageContent)")
 	} else if match == 1 {
 		return nil // exactly one match
 	} else { // no match
-		return fmt.Errorf("data failed to match schemas in oneOf(LogContent)")
+		return fmt.Errorf("data failed to match schemas in oneOf(MessageContent)")
 	}
 }
 
 // Marshal data from the first non-nil pointers in the struct to JSON
-func (src LogContent) MarshalJSON() ([]byte, error) {
+func (src MessageContent) MarshalJSON() ([]byte, error) {
 	if src.BinaryContent != nil {
 		return json.Marshal(&src.BinaryContent)
 	}
@@ -103,7 +104,7 @@ func (src LogContent) MarshalJSON() ([]byte, error) {
 }
 
 // Get the actual instance
-func (obj *LogContent) GetActualInstance() interface{} {
+func (obj *MessageContent) GetActualInstance() interface{} {
 	if obj == nil {
 		return nil
 	}
@@ -119,38 +120,38 @@ func (obj *LogContent) GetActualInstance() interface{} {
 	return nil
 }
 
-type NullableLogContent struct {
-	value *LogContent
+type NullableMessageContent struct {
+	value *MessageContent
 	isSet bool
 }
 
-func (v NullableLogContent) Get() *LogContent {
+func (v NullableMessageContent) Get() *MessageContent {
 	return v.value
 }
 
-func (v *NullableLogContent) Set(val *LogContent) {
+func (v *NullableMessageContent) Set(val *MessageContent) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableLogContent) IsSet() bool {
+func (v NullableMessageContent) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableLogContent) Unset() {
+func (v *NullableMessageContent) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableLogContent(val *LogContent) *NullableLogContent {
-	return &NullableLogContent{value: val, isSet: true}
+func NewNullableMessageContent(val *MessageContent) *NullableMessageContent {
+	return &NullableMessageContent{value: val, isSet: true}
 }
 
-func (v NullableLogContent) MarshalJSON() ([]byte, error) {
+func (v NullableMessageContent) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableLogContent) UnmarshalJSON(src []byte) error {
+func (v *NullableMessageContent) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/sms/message_count.go b/pkg/infobip/models/sms/message_count.go
index 184242b..2470e1f 100644
--- a/pkg/infobip/models/sms/message_count.go
+++ b/pkg/infobip/models/sms/message_count.go
@@ -31,6 +31,7 @@ type MessageCount struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageCount() *MessageCount {
 	this := MessageCount{}
 	return &this
@@ -41,6 +42,7 @@ func NewMessageCount() *MessageCount {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageCountWithDefaults() *MessageCount {
 	this := MessageCount{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message_delivery_reporting.go b/pkg/infobip/models/sms/message_delivery_reporting.go
index fcc7c30..622c92f 100644
--- a/pkg/infobip/models/sms/message_delivery_reporting.go
+++ b/pkg/infobip/models/sms/message_delivery_reporting.go
@@ -33,6 +33,7 @@ type MessageDeliveryReporting struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageDeliveryReporting() *MessageDeliveryReporting {
 	this := MessageDeliveryReporting{}
 	return &this
@@ -43,6 +44,7 @@ func NewMessageDeliveryReporting() *MessageDeliveryReporting {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageDeliveryReportingWithDefaults() *MessageDeliveryReporting {
 	this := MessageDeliveryReporting{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message_error.go b/pkg/infobip/models/sms/message_error.go
index 06350f6..95cd864 100644
--- a/pkg/infobip/models/sms/message_error.go
+++ b/pkg/infobip/models/sms/message_error.go
@@ -38,6 +38,7 @@ type MessageError struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageError() *MessageError {
 	this := MessageError{}
 	return &this
@@ -48,6 +49,7 @@ func NewMessageError() *MessageError {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageErrorWithDefaults() *MessageError {
 	this := MessageError{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message_options.go b/pkg/infobip/models/sms/message_options.go
index cb77db7..794d094 100644
--- a/pkg/infobip/models/sms/message_options.go
+++ b/pkg/infobip/models/sms/message_options.go
@@ -35,6 +35,7 @@ type MessageOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageOptions() *MessageOptions {
 	this := MessageOptions{}
 	return &this
@@ -45,6 +46,7 @@ func NewMessageOptions() *MessageOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageOptionsWithDefaults() *MessageOptions {
 	this := MessageOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message_price.go b/pkg/infobip/models/sms/message_price.go
index 16aefd7..f1378bc 100644
--- a/pkg/infobip/models/sms/message_price.go
+++ b/pkg/infobip/models/sms/message_price.go
@@ -31,6 +31,7 @@ type MessagePrice struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessagePrice() *MessagePrice {
 	this := MessagePrice{}
 	return &this
@@ -41,6 +42,7 @@ func NewMessagePrice() *MessagePrice {
 // but it doesn't guarantee that properties required by API are set
 func NewMessagePriceWithDefaults() *MessagePrice {
 	this := MessagePrice{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message_request_options.go b/pkg/infobip/models/sms/message_request_options.go
index 823fddc..576ab17 100644
--- a/pkg/infobip/models/sms/message_request_options.go
+++ b/pkg/infobip/models/sms/message_request_options.go
@@ -32,6 +32,7 @@ type MessageRequestOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageRequestOptions() *MessageRequestOptions {
 	this := MessageRequestOptions{}
 	var includeSmsCountInResponse bool = false
@@ -44,6 +45,7 @@ func NewMessageRequestOptions() *MessageRequestOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageRequestOptionsWithDefaults() *MessageRequestOptions {
 	this := MessageRequestOptions{}
+
 	var includeSmsCountInResponse bool = false
 	this.IncludeSmsCountInResponse = &includeSmsCountInResponse
 	return &this
diff --git a/pkg/infobip/models/sms/message_response_details.go b/pkg/infobip/models/sms/message_response_details.go
index 080c1ad..505f857 100644
--- a/pkg/infobip/models/sms/message_response_details.go
+++ b/pkg/infobip/models/sms/message_response_details.go
@@ -29,6 +29,7 @@ type MessageResponseDetails struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageResponseDetails() *MessageResponseDetails {
 	this := MessageResponseDetails{}
 	return &this
@@ -39,6 +40,7 @@ func NewMessageResponseDetails() *MessageResponseDetails {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageResponseDetailsWithDefaults() *MessageResponseDetails {
 	this := MessageResponseDetails{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/message_status.go b/pkg/infobip/models/sms/message_status.go
index 9f5dc0d..1fd02ff 100644
--- a/pkg/infobip/models/sms/message_status.go
+++ b/pkg/infobip/models/sms/message_status.go
@@ -38,6 +38,7 @@ type MessageStatus struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMessageStatus() *MessageStatus {
 	this := MessageStatus{}
 	return &this
@@ -48,6 +49,7 @@ func NewMessageStatus() *MessageStatus {
 // but it doesn't guarantee that properties required by API are set
 func NewMessageStatusWithDefaults() *MessageStatus {
 	this := MessageStatus{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/mo_report.go b/pkg/infobip/models/sms/mo_report.go
index cef831e..79f7247 100644
--- a/pkg/infobip/models/sms/mo_report.go
+++ b/pkg/infobip/models/sms/mo_report.go
@@ -46,6 +46,7 @@ type MoReport struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewMoReport() *MoReport {
 	this := MoReport{}
 	return &this
@@ -56,6 +57,7 @@ func NewMoReport() *MoReport {
 // but it doesn't guarantee that properties required by API are set
 func NewMoReportWithDefaults() *MoReport {
 	this := MoReport{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/platform.go b/pkg/infobip/models/sms/platform.go
index f90a751..b271d0d 100644
--- a/pkg/infobip/models/sms/platform.go
+++ b/pkg/infobip/models/sms/platform.go
@@ -31,6 +31,7 @@ type Platform struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewPlatform() *Platform {
 	this := Platform{}
 	return &this
@@ -41,6 +42,7 @@ func NewPlatform() *Platform {
 // but it doesn't guarantee that properties required by API are set
 func NewPlatformWithDefaults() *Platform {
 	this := Platform{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/preview.go b/pkg/infobip/models/sms/preview.go
index 69e65b0..c69e59f 100644
--- a/pkg/infobip/models/sms/preview.go
+++ b/pkg/infobip/models/sms/preview.go
@@ -34,6 +34,7 @@ type Preview struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewPreview() *Preview {
 	this := Preview{}
 	return &this
@@ -44,6 +45,7 @@ func NewPreview() *Preview {
 // but it doesn't guarantee that properties required by API are set
 func NewPreviewWithDefaults() *Preview {
 	this := Preview{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/language_v1.go b/pkg/infobip/models/sms/preview_language.go
similarity index 60%
rename from pkg/infobip/models/sms/language_v1.go
rename to pkg/infobip/models/sms/preview_language.go
index 98a0d7c..54a8f71 100644
--- a/pkg/infobip/models/sms/language_v1.go
+++ b/pkg/infobip/models/sms/preview_language.go
@@ -16,34 +16,36 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the LanguageV1 type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &LanguageV1{}
+// checks if the PreviewLanguage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &PreviewLanguage{}
 
-// LanguageV1 struct for LanguageV1
-type LanguageV1 struct {
+// PreviewLanguage struct for PreviewLanguage
+type PreviewLanguage struct {
 	// Language code for the correct character set. Possible values: `TR` for Turkish, `ES` for Spanish, `PT` for Portuguese, or `AUTODETECT` to let platform select the character set based on message content.
 	LanguageCode *string
 }
 
-// NewLanguageV1 instantiates a new LanguageV1 object
+// NewPreviewLanguage instantiates a new PreviewLanguage object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewLanguageV1() *LanguageV1 {
-	this := LanguageV1{}
+
+func NewPreviewLanguage() *PreviewLanguage {
+	this := PreviewLanguage{}
 	return &this
 }
 
-// NewLanguageV1WithDefaults instantiates a new LanguageV1 object
+// NewPreviewLanguageWithDefaults instantiates a new PreviewLanguage object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewLanguageV1WithDefaults() *LanguageV1 {
-	this := LanguageV1{}
+func NewPreviewLanguageWithDefaults() *PreviewLanguage {
+	this := PreviewLanguage{}
+
 	return &this
 }
 
 // GetLanguageCode returns the LanguageCode field value if set, zero value otherwise.
-func (o *LanguageV1) GetLanguageCode() string {
+func (o *PreviewLanguage) GetLanguageCode() string {
 	if o == nil || IsNil(o.LanguageCode) {
 		var ret string
 		return ret
@@ -53,7 +55,7 @@ func (o *LanguageV1) GetLanguageCode() string {
 
 // GetLanguageCodeOk returns a tuple with the LanguageCode field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *LanguageV1) GetLanguageCodeOk() (*string, bool) {
+func (o *PreviewLanguage) GetLanguageCodeOk() (*string, bool) {
 	if o == nil || IsNil(o.LanguageCode) {
 		return nil, false
 	}
@@ -61,7 +63,7 @@ func (o *LanguageV1) GetLanguageCodeOk() (*string, bool) {
 }
 
 // HasLanguageCode returns a boolean if a field has been set.
-func (o *LanguageV1) HasLanguageCode() bool {
+func (o *PreviewLanguage) HasLanguageCode() bool {
 	if o != nil && !IsNil(o.LanguageCode) {
 		return true
 	}
@@ -70,11 +72,11 @@ func (o *LanguageV1) HasLanguageCode() bool {
 }
 
 // SetLanguageCode gets a reference to the given string and assigns it to the LanguageCode field.
-func (o *LanguageV1) SetLanguageCode(v string) {
+func (o *PreviewLanguage) SetLanguageCode(v string) {
 	o.LanguageCode = &v
 }
 
-func (o LanguageV1) MarshalJSON() ([]byte, error) {
+func (o PreviewLanguage) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -82,7 +84,7 @@ func (o LanguageV1) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o LanguageV1) ToMap() (map[string]interface{}, error) {
+func (o PreviewLanguage) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.LanguageCode) {
 		toSerialize["languageCode"] = o.LanguageCode
@@ -90,38 +92,38 @@ func (o LanguageV1) ToMap() (map[string]interface{}, error) {
 	return toSerialize, nil
 }
 
-type NullableLanguageV1 struct {
-	value *LanguageV1
+type NullablePreviewLanguage struct {
+	value *PreviewLanguage
 	isSet bool
 }
 
-func (v NullableLanguageV1) Get() *LanguageV1 {
+func (v NullablePreviewLanguage) Get() *PreviewLanguage {
 	return v.value
 }
 
-func (v *NullableLanguageV1) Set(val *LanguageV1) {
+func (v *NullablePreviewLanguage) Set(val *PreviewLanguage) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableLanguageV1) IsSet() bool {
+func (v NullablePreviewLanguage) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableLanguageV1) Unset() {
+func (v *NullablePreviewLanguage) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableLanguageV1(val *LanguageV1) *NullableLanguageV1 {
-	return &NullableLanguageV1{value: val, isSet: true}
+func NewNullablePreviewLanguage(val *PreviewLanguage) *NullablePreviewLanguage {
+	return &NullablePreviewLanguage{value: val, isSet: true}
 }
 
-func (v NullableLanguageV1) MarshalJSON() ([]byte, error) {
+func (v NullablePreviewLanguage) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableLanguageV1) UnmarshalJSON(src []byte) error {
+func (v *NullablePreviewLanguage) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/sms/preview_request.go b/pkg/infobip/models/sms/preview_request.go
index 9033e4e..af6d7c1 100644
--- a/pkg/infobip/models/sms/preview_request.go
+++ b/pkg/infobip/models/sms/preview_request.go
@@ -35,6 +35,7 @@ type _PreviewRequest PreviewRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewPreviewRequest(text string) *PreviewRequest {
 	this := PreviewRequest{}
 	this.Text = text
@@ -46,6 +47,7 @@ func NewPreviewRequest(text string) *PreviewRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewPreviewRequestWithDefaults() *PreviewRequest {
 	this := PreviewRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/preview_response.go b/pkg/infobip/models/sms/preview_response.go
index 18504e2..c7d7355 100644
--- a/pkg/infobip/models/sms/preview_response.go
+++ b/pkg/infobip/models/sms/preview_response.go
@@ -31,6 +31,7 @@ type PreviewResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewPreviewResponse() *PreviewResponse {
 	this := PreviewResponse{}
 	return &this
@@ -41,6 +42,7 @@ func NewPreviewResponse() *PreviewResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewPreviewResponseWithDefaults() *PreviewResponse {
 	this := PreviewResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/price.go b/pkg/infobip/models/sms/price.go
index bdefb2e..fc05f91 100644
--- a/pkg/infobip/models/sms/price.go
+++ b/pkg/infobip/models/sms/price.go
@@ -19,18 +19,19 @@ import (
 // checks if the Price type satisfies the MappedNullable interface at compile time
 var _ MappedNullable = &Price{}
 
-// Price Sent SMS price.
+// Price A price object showing currency and a price per each message.
 type Price struct {
-	// Price per one SMS.
-	PricePerMessage *float64
 	// The currency in which the price is expressed.
 	Currency *string
+	// Price per one SMS.
+	PricePerMessage *float64
 }
 
 // NewPrice instantiates a new Price object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewPrice() *Price {
 	this := Price{}
 	return &this
@@ -41,71 +42,72 @@ func NewPrice() *Price {
 // but it doesn't guarantee that properties required by API are set
 func NewPriceWithDefaults() *Price {
 	this := Price{}
+
 	return &this
 }
 
-// GetPricePerMessage returns the PricePerMessage field value if set, zero value otherwise.
-func (o *Price) GetPricePerMessage() float64 {
-	if o == nil || IsNil(o.PricePerMessage) {
-		var ret float64
+// GetCurrency returns the Currency field value if set, zero value otherwise.
+func (o *Price) GetCurrency() string {
+	if o == nil || IsNil(o.Currency) {
+		var ret string
 		return ret
 	}
-	return *o.PricePerMessage
+	return *o.Currency
 }
 
-// GetPricePerMessageOk returns a tuple with the PricePerMessage field value if set, nil otherwise
+// GetCurrencyOk returns a tuple with the Currency field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Price) GetPricePerMessageOk() (*float64, bool) {
-	if o == nil || IsNil(o.PricePerMessage) {
+func (o *Price) GetCurrencyOk() (*string, bool) {
+	if o == nil || IsNil(o.Currency) {
 		return nil, false
 	}
-	return o.PricePerMessage, true
+	return o.Currency, true
 }
 
-// HasPricePerMessage returns a boolean if a field has been set.
-func (o *Price) HasPricePerMessage() bool {
-	if o != nil && !IsNil(o.PricePerMessage) {
+// HasCurrency returns a boolean if a field has been set.
+func (o *Price) HasCurrency() bool {
+	if o != nil && !IsNil(o.Currency) {
 		return true
 	}
 
 	return false
 }
 
-// SetPricePerMessage gets a reference to the given float64 and assigns it to the PricePerMessage field.
-func (o *Price) SetPricePerMessage(v float64) {
-	o.PricePerMessage = &v
+// SetCurrency gets a reference to the given string and assigns it to the Currency field.
+func (o *Price) SetCurrency(v string) {
+	o.Currency = &v
 }
 
-// GetCurrency returns the Currency field value if set, zero value otherwise.
-func (o *Price) GetCurrency() string {
-	if o == nil || IsNil(o.Currency) {
-		var ret string
+// GetPricePerMessage returns the PricePerMessage field value if set, zero value otherwise.
+func (o *Price) GetPricePerMessage() float64 {
+	if o == nil || IsNil(o.PricePerMessage) {
+		var ret float64
 		return ret
 	}
-	return *o.Currency
+	return *o.PricePerMessage
 }
 
-// GetCurrencyOk returns a tuple with the Currency field value if set, nil otherwise
+// GetPricePerMessageOk returns a tuple with the PricePerMessage field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Price) GetCurrencyOk() (*string, bool) {
-	if o == nil || IsNil(o.Currency) {
+func (o *Price) GetPricePerMessageOk() (*float64, bool) {
+	if o == nil || IsNil(o.PricePerMessage) {
 		return nil, false
 	}
-	return o.Currency, true
+	return o.PricePerMessage, true
 }
 
-// HasCurrency returns a boolean if a field has been set.
-func (o *Price) HasCurrency() bool {
-	if o != nil && !IsNil(o.Currency) {
+// HasPricePerMessage returns a boolean if a field has been set.
+func (o *Price) HasPricePerMessage() bool {
+	if o != nil && !IsNil(o.PricePerMessage) {
 		return true
 	}
 
 	return false
 }
 
-// SetCurrency gets a reference to the given string and assigns it to the Currency field.
-func (o *Price) SetCurrency(v string) {
-	o.Currency = &v
+// SetPricePerMessage gets a reference to the given float64 and assigns it to the PricePerMessage field.
+func (o *Price) SetPricePerMessage(v float64) {
+	o.PricePerMessage = &v
 }
 
 func (o Price) MarshalJSON() ([]byte, error) {
@@ -118,12 +120,12 @@ func (o Price) MarshalJSON() ([]byte, error) {
 
 func (o Price) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
-	if !IsNil(o.PricePerMessage) {
-		toSerialize["pricePerMessage"] = o.PricePerMessage
-	}
 	if !IsNil(o.Currency) {
 		toSerialize["currency"] = o.Currency
 	}
+	if !IsNil(o.PricePerMessage) {
+		toSerialize["pricePerMessage"] = o.PricePerMessage
+	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/sms/regional_options.go b/pkg/infobip/models/sms/regional_options.go
index 5c9297f..bf392f3 100644
--- a/pkg/infobip/models/sms/regional_options.go
+++ b/pkg/infobip/models/sms/regional_options.go
@@ -30,6 +30,7 @@ type RegionalOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewRegionalOptions() *RegionalOptions {
 	this := RegionalOptions{}
 	return &this
@@ -40,6 +41,7 @@ func NewRegionalOptions() *RegionalOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewRegionalOptionsWithDefaults() *RegionalOptions {
 	this := RegionalOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/report_response.go b/pkg/infobip/models/sms/report_response.go
index c958371..66b6118 100644
--- a/pkg/infobip/models/sms/report_response.go
+++ b/pkg/infobip/models/sms/report_response.go
@@ -32,6 +32,7 @@ type ReportResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewReportResponse() *ReportResponse {
 	this := ReportResponse{}
 	return &this
@@ -42,6 +43,7 @@ func NewReportResponse() *ReportResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewReportResponseWithDefaults() *ReportResponse {
 	this := ReportResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/request_envelope.go b/pkg/infobip/models/sms/request_envelope.go
index 98a7611..dc72741 100644
--- a/pkg/infobip/models/sms/request_envelope.go
+++ b/pkg/infobip/models/sms/request_envelope.go
@@ -32,6 +32,7 @@ type _RequestEnvelope RequestEnvelope
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewRequestEnvelope(messages []Message) *RequestEnvelope {
 	this := RequestEnvelope{}
 	this.Messages = messages
@@ -43,6 +44,7 @@ func NewRequestEnvelope(messages []Message) *RequestEnvelope {
 // but it doesn't guarantee that properties required by API are set
 func NewRequestEnvelopeWithDefaults() *RequestEnvelope {
 	this := RequestEnvelope{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/request_scheduling_settings.go b/pkg/infobip/models/sms/request_scheduling_settings.go
index f572a7c..8647f07 100644
--- a/pkg/infobip/models/sms/request_scheduling_settings.go
+++ b/pkg/infobip/models/sms/request_scheduling_settings.go
@@ -32,6 +32,7 @@ type RequestSchedulingSettings struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewRequestSchedulingSettings() *RequestSchedulingSettings {
 	this := RequestSchedulingSettings{}
 	return &this
@@ -42,6 +43,7 @@ func NewRequestSchedulingSettings() *RequestSchedulingSettings {
 // but it doesn't guarantee that properties required by API are set
 func NewRequestSchedulingSettingsWithDefaults() *RequestSchedulingSettings {
 	this := RequestSchedulingSettings{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/resend_pin_request.go b/pkg/infobip/models/sms/resend_pin_request.go
index 1d60d31..8e8b271 100644
--- a/pkg/infobip/models/sms/resend_pin_request.go
+++ b/pkg/infobip/models/sms/resend_pin_request.go
@@ -29,6 +29,7 @@ type ResendPinRequest struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewResendPinRequest() *ResendPinRequest {
 	this := ResendPinRequest{}
 	return &this
@@ -39,6 +40,7 @@ func NewResendPinRequest() *ResendPinRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewResendPinRequestWithDefaults() *ResendPinRequest {
 	this := ResendPinRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/response.go b/pkg/infobip/models/sms/response.go
index 749f8a7..39a9c52 100644
--- a/pkg/infobip/models/sms/response.go
+++ b/pkg/infobip/models/sms/response.go
@@ -33,6 +33,7 @@ type _Response Response
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewResponse(messages []ResponseDetails) *Response {
 	this := Response{}
 	this.Messages = messages
@@ -44,6 +45,7 @@ func NewResponse(messages []ResponseDetails) *Response {
 // but it doesn't guarantee that properties required by API are set
 func NewResponseWithDefaults() *Response {
 	this := Response{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/response_details.go b/pkg/infobip/models/sms/response_details.go
index 4e39f38..7ea0814 100644
--- a/pkg/infobip/models/sms/response_details.go
+++ b/pkg/infobip/models/sms/response_details.go
@@ -33,6 +33,7 @@ type ResponseDetails struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewResponseDetails() *ResponseDetails {
 	this := ResponseDetails{}
 	return &this
@@ -43,6 +44,7 @@ func NewResponseDetails() *ResponseDetails {
 // but it doesn't guarantee that properties required by API are set
 func NewResponseDetailsWithDefaults() *ResponseDetails {
 	this := ResponseDetails{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/sending_speed_limit.go b/pkg/infobip/models/sms/sending_speed_limit.go
index 686d953..94d0515 100644
--- a/pkg/infobip/models/sms/sending_speed_limit.go
+++ b/pkg/infobip/models/sms/sending_speed_limit.go
@@ -32,6 +32,7 @@ type _SendingSpeedLimit SendingSpeedLimit
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSendingSpeedLimit(amount int32) *SendingSpeedLimit {
 	this := SendingSpeedLimit{}
 	this.Amount = amount
@@ -45,6 +46,7 @@ func NewSendingSpeedLimit(amount int32) *SendingSpeedLimit {
 // but it doesn't guarantee that properties required by API are set
 func NewSendingSpeedLimitWithDefaults() *SendingSpeedLimit {
 	this := SendingSpeedLimit{}
+
 	var timeUnit SpeedLimitTimeUnit = SPEEDLIMITTIMEUNIT_MINUTE
 	this.TimeUnit = &timeUnit
 	return &this
diff --git a/pkg/infobip/models/sms/south_korea_options.go b/pkg/infobip/models/sms/south_korea_options.go
index 07e0252..3bd9353 100644
--- a/pkg/infobip/models/sms/south_korea_options.go
+++ b/pkg/infobip/models/sms/south_korea_options.go
@@ -31,6 +31,7 @@ type SouthKoreaOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewSouthKoreaOptions() *SouthKoreaOptions {
 	this := SouthKoreaOptions{}
 	return &this
@@ -41,6 +42,7 @@ func NewSouthKoreaOptions() *SouthKoreaOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewSouthKoreaOptionsWithDefaults() *SouthKoreaOptions {
 	this := SouthKoreaOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/start_authentication_request.go b/pkg/infobip/models/sms/start_authentication_request.go
index 5b5c0ea..a231eb5 100644
--- a/pkg/infobip/models/sms/start_authentication_request.go
+++ b/pkg/infobip/models/sms/start_authentication_request.go
@@ -39,6 +39,7 @@ type _StartAuthenticationRequest StartAuthenticationRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewStartAuthenticationRequest(applicationId string, messageId string, to string) *StartAuthenticationRequest {
 	this := StartAuthenticationRequest{}
 	this.ApplicationId = applicationId
@@ -52,6 +53,7 @@ func NewStartAuthenticationRequest(applicationId string, messageId string, to st
 // but it doesn't guarantee that properties required by API are set
 func NewStartAuthenticationRequestWithDefaults() *StartAuthenticationRequest {
 	this := StartAuthenticationRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/start_authentication_response.go b/pkg/infobip/models/sms/start_authentication_response.go
index 039c426..a4f19e2 100644
--- a/pkg/infobip/models/sms/start_authentication_response.go
+++ b/pkg/infobip/models/sms/start_authentication_response.go
@@ -37,6 +37,7 @@ type StartAuthenticationResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewStartAuthenticationResponse() *StartAuthenticationResponse {
 	this := StartAuthenticationResponse{}
 	return &this
@@ -47,6 +48,7 @@ func NewStartAuthenticationResponse() *StartAuthenticationResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewStartAuthenticationResponseWithDefaults() *StartAuthenticationResponse {
 	this := StartAuthenticationResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/start_email_authentication_request.go b/pkg/infobip/models/sms/start_email_authentication_request.go
index 27028ae..ac3ddd4 100644
--- a/pkg/infobip/models/sms/start_email_authentication_request.go
+++ b/pkg/infobip/models/sms/start_email_authentication_request.go
@@ -39,6 +39,7 @@ type _StartEmailAuthenticationRequest StartEmailAuthenticationRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewStartEmailAuthenticationRequest(applicationId string, messageId string, to string) *StartEmailAuthenticationRequest {
 	this := StartEmailAuthenticationRequest{}
 	this.ApplicationId = applicationId
@@ -52,6 +53,7 @@ func NewStartEmailAuthenticationRequest(applicationId string, messageId string,
 // but it doesn't guarantee that properties required by API are set
 func NewStartEmailAuthenticationRequestWithDefaults() *StartEmailAuthenticationRequest {
 	this := StartEmailAuthenticationRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/start_email_authentication_response.go b/pkg/infobip/models/sms/start_email_authentication_response.go
index da17634..b43ef51 100644
--- a/pkg/infobip/models/sms/start_email_authentication_response.go
+++ b/pkg/infobip/models/sms/start_email_authentication_response.go
@@ -32,6 +32,7 @@ type StartEmailAuthenticationResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewStartEmailAuthenticationResponse() *StartEmailAuthenticationResponse {
 	this := StartEmailAuthenticationResponse{}
 	return &this
@@ -42,6 +43,7 @@ func NewStartEmailAuthenticationResponse() *StartEmailAuthenticationResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewStartEmailAuthenticationResponseWithDefaults() *StartEmailAuthenticationResponse {
 	this := StartEmailAuthenticationResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/sms_or_voice_message.go b/pkg/infobip/models/sms/template_message.go
similarity index 74%
rename from pkg/infobip/models/sms/sms_or_voice_message.go
rename to pkg/infobip/models/sms/template_message.go
index 8257fbd..b8d92a8 100644
--- a/pkg/infobip/models/sms/sms_or_voice_message.go
+++ b/pkg/infobip/models/sms/template_message.go
@@ -16,11 +16,11 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the SmsOrVoiceMessage type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &SmsOrVoiceMessage{}
+// checks if the TemplateMessage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &TemplateMessage{}
 
-// SmsOrVoiceMessage struct for SmsOrVoiceMessage
-type SmsOrVoiceMessage struct {
+// TemplateMessage struct for TemplateMessage
+type TemplateMessage struct {
 	// The ID of the application that represents your service (e.g. 2FA for login, 2FA for changing the password, etc.) for which the requested message has been created.
 	ApplicationId *string
 	Language      *TfaLanguage
@@ -44,25 +44,27 @@ type SmsOrVoiceMessage struct {
 	VoiceName *string
 }
 
-// NewSmsOrVoiceMessage instantiates a new SmsOrVoiceMessage object
+// NewTemplateMessage instantiates a new TemplateMessage object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewSmsOrVoiceMessage() *SmsOrVoiceMessage {
-	this := SmsOrVoiceMessage{}
+
+func NewTemplateMessage() *TemplateMessage {
+	this := TemplateMessage{}
 	return &this
 }
 
-// NewSmsOrVoiceMessageWithDefaults instantiates a new SmsOrVoiceMessage object
+// NewTemplateMessageWithDefaults instantiates a new TemplateMessage object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewSmsOrVoiceMessageWithDefaults() *SmsOrVoiceMessage {
-	this := SmsOrVoiceMessage{}
+func NewTemplateMessageWithDefaults() *TemplateMessage {
+	this := TemplateMessage{}
+
 	return &this
 }
 
 // GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetApplicationId() string {
+func (o *TemplateMessage) GetApplicationId() string {
 	if o == nil || IsNil(o.ApplicationId) {
 		var ret string
 		return ret
@@ -72,7 +74,7 @@ func (o *SmsOrVoiceMessage) GetApplicationId() string {
 
 // GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetApplicationIdOk() (*string, bool) {
+func (o *TemplateMessage) GetApplicationIdOk() (*string, bool) {
 	if o == nil || IsNil(o.ApplicationId) {
 		return nil, false
 	}
@@ -80,7 +82,7 @@ func (o *SmsOrVoiceMessage) GetApplicationIdOk() (*string, bool) {
 }
 
 // HasApplicationId returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasApplicationId() bool {
+func (o *TemplateMessage) HasApplicationId() bool {
 	if o != nil && !IsNil(o.ApplicationId) {
 		return true
 	}
@@ -89,12 +91,12 @@ func (o *SmsOrVoiceMessage) HasApplicationId() bool {
 }
 
 // SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
-func (o *SmsOrVoiceMessage) SetApplicationId(v string) {
+func (o *TemplateMessage) SetApplicationId(v string) {
 	o.ApplicationId = &v
 }
 
 // GetLanguage returns the Language field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetLanguage() TfaLanguage {
+func (o *TemplateMessage) GetLanguage() TfaLanguage {
 	if o == nil || IsNil(o.Language) {
 		var ret TfaLanguage
 		return ret
@@ -104,7 +106,7 @@ func (o *SmsOrVoiceMessage) GetLanguage() TfaLanguage {
 
 // GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetLanguageOk() (*TfaLanguage, bool) {
+func (o *TemplateMessage) GetLanguageOk() (*TfaLanguage, bool) {
 	if o == nil || IsNil(o.Language) {
 		return nil, false
 	}
@@ -112,7 +114,7 @@ func (o *SmsOrVoiceMessage) GetLanguageOk() (*TfaLanguage, bool) {
 }
 
 // HasLanguage returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasLanguage() bool {
+func (o *TemplateMessage) HasLanguage() bool {
 	if o != nil && !IsNil(o.Language) {
 		return true
 	}
@@ -121,12 +123,12 @@ func (o *SmsOrVoiceMessage) HasLanguage() bool {
 }
 
 // SetLanguage gets a reference to the given TfaLanguage and assigns it to the Language field.
-func (o *SmsOrVoiceMessage) SetLanguage(v TfaLanguage) {
+func (o *TemplateMessage) SetLanguage(v TfaLanguage) {
 	o.Language = &v
 }
 
 // GetMessageId returns the MessageId field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetMessageId() string {
+func (o *TemplateMessage) GetMessageId() string {
 	if o == nil || IsNil(o.MessageId) {
 		var ret string
 		return ret
@@ -136,7 +138,7 @@ func (o *SmsOrVoiceMessage) GetMessageId() string {
 
 // GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetMessageIdOk() (*string, bool) {
+func (o *TemplateMessage) GetMessageIdOk() (*string, bool) {
 	if o == nil || IsNil(o.MessageId) {
 		return nil, false
 	}
@@ -144,7 +146,7 @@ func (o *SmsOrVoiceMessage) GetMessageIdOk() (*string, bool) {
 }
 
 // HasMessageId returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasMessageId() bool {
+func (o *TemplateMessage) HasMessageId() bool {
 	if o != nil && !IsNil(o.MessageId) {
 		return true
 	}
@@ -153,12 +155,12 @@ func (o *SmsOrVoiceMessage) HasMessageId() bool {
 }
 
 // SetMessageId gets a reference to the given string and assigns it to the MessageId field.
-func (o *SmsOrVoiceMessage) SetMessageId(v string) {
+func (o *TemplateMessage) SetMessageId(v string) {
 	o.MessageId = &v
 }
 
 // GetMessageText returns the MessageText field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetMessageText() string {
+func (o *TemplateMessage) GetMessageText() string {
 	if o == nil || IsNil(o.MessageText) {
 		var ret string
 		return ret
@@ -168,7 +170,7 @@ func (o *SmsOrVoiceMessage) GetMessageText() string {
 
 // GetMessageTextOk returns a tuple with the MessageText field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetMessageTextOk() (*string, bool) {
+func (o *TemplateMessage) GetMessageTextOk() (*string, bool) {
 	if o == nil || IsNil(o.MessageText) {
 		return nil, false
 	}
@@ -176,7 +178,7 @@ func (o *SmsOrVoiceMessage) GetMessageTextOk() (*string, bool) {
 }
 
 // HasMessageText returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasMessageText() bool {
+func (o *TemplateMessage) HasMessageText() bool {
 	if o != nil && !IsNil(o.MessageText) {
 		return true
 	}
@@ -185,12 +187,12 @@ func (o *SmsOrVoiceMessage) HasMessageText() bool {
 }
 
 // SetMessageText gets a reference to the given string and assigns it to the MessageText field.
-func (o *SmsOrVoiceMessage) SetMessageText(v string) {
+func (o *TemplateMessage) SetMessageText(v string) {
 	o.MessageText = &v
 }
 
 // GetPinLength returns the PinLength field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetPinLength() int32 {
+func (o *TemplateMessage) GetPinLength() int32 {
 	if o == nil || IsNil(o.PinLength) {
 		var ret int32
 		return ret
@@ -200,7 +202,7 @@ func (o *SmsOrVoiceMessage) GetPinLength() int32 {
 
 // GetPinLengthOk returns a tuple with the PinLength field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetPinLengthOk() (*int32, bool) {
+func (o *TemplateMessage) GetPinLengthOk() (*int32, bool) {
 	if o == nil || IsNil(o.PinLength) {
 		return nil, false
 	}
@@ -208,7 +210,7 @@ func (o *SmsOrVoiceMessage) GetPinLengthOk() (*int32, bool) {
 }
 
 // HasPinLength returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasPinLength() bool {
+func (o *TemplateMessage) HasPinLength() bool {
 	if o != nil && !IsNil(o.PinLength) {
 		return true
 	}
@@ -217,12 +219,12 @@ func (o *SmsOrVoiceMessage) HasPinLength() bool {
 }
 
 // SetPinLength gets a reference to the given int32 and assigns it to the PinLength field.
-func (o *SmsOrVoiceMessage) SetPinLength(v int32) {
+func (o *TemplateMessage) SetPinLength(v int32) {
 	o.PinLength = &v
 }
 
 // GetPinPlaceholder returns the PinPlaceholder field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetPinPlaceholder() string {
+func (o *TemplateMessage) GetPinPlaceholder() string {
 	if o == nil || IsNil(o.PinPlaceholder) {
 		var ret string
 		return ret
@@ -232,7 +234,7 @@ func (o *SmsOrVoiceMessage) GetPinPlaceholder() string {
 
 // GetPinPlaceholderOk returns a tuple with the PinPlaceholder field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetPinPlaceholderOk() (*string, bool) {
+func (o *TemplateMessage) GetPinPlaceholderOk() (*string, bool) {
 	if o == nil || IsNil(o.PinPlaceholder) {
 		return nil, false
 	}
@@ -240,7 +242,7 @@ func (o *SmsOrVoiceMessage) GetPinPlaceholderOk() (*string, bool) {
 }
 
 // HasPinPlaceholder returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasPinPlaceholder() bool {
+func (o *TemplateMessage) HasPinPlaceholder() bool {
 	if o != nil && !IsNil(o.PinPlaceholder) {
 		return true
 	}
@@ -249,12 +251,12 @@ func (o *SmsOrVoiceMessage) HasPinPlaceholder() bool {
 }
 
 // SetPinPlaceholder gets a reference to the given string and assigns it to the PinPlaceholder field.
-func (o *SmsOrVoiceMessage) SetPinPlaceholder(v string) {
+func (o *TemplateMessage) SetPinPlaceholder(v string) {
 	o.PinPlaceholder = &v
 }
 
 // GetPinType returns the PinType field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetPinType() PinType {
+func (o *TemplateMessage) GetPinType() PinType {
 	if o == nil || IsNil(o.PinType) {
 		var ret PinType
 		return ret
@@ -264,7 +266,7 @@ func (o *SmsOrVoiceMessage) GetPinType() PinType {
 
 // GetPinTypeOk returns a tuple with the PinType field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetPinTypeOk() (*PinType, bool) {
+func (o *TemplateMessage) GetPinTypeOk() (*PinType, bool) {
 	if o == nil || IsNil(o.PinType) {
 		return nil, false
 	}
@@ -272,7 +274,7 @@ func (o *SmsOrVoiceMessage) GetPinTypeOk() (*PinType, bool) {
 }
 
 // HasPinType returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasPinType() bool {
+func (o *TemplateMessage) HasPinType() bool {
 	if o != nil && !IsNil(o.PinType) {
 		return true
 	}
@@ -281,12 +283,12 @@ func (o *SmsOrVoiceMessage) HasPinType() bool {
 }
 
 // SetPinType gets a reference to the given PinType and assigns it to the PinType field.
-func (o *SmsOrVoiceMessage) SetPinType(v PinType) {
+func (o *TemplateMessage) SetPinType(v PinType) {
 	o.PinType = &v
 }
 
 // GetRegional returns the Regional field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetRegional() RegionalOptions {
+func (o *TemplateMessage) GetRegional() RegionalOptions {
 	if o == nil || IsNil(o.Regional) {
 		var ret RegionalOptions
 		return ret
@@ -296,7 +298,7 @@ func (o *SmsOrVoiceMessage) GetRegional() RegionalOptions {
 
 // GetRegionalOk returns a tuple with the Regional field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetRegionalOk() (*RegionalOptions, bool) {
+func (o *TemplateMessage) GetRegionalOk() (*RegionalOptions, bool) {
 	if o == nil || IsNil(o.Regional) {
 		return nil, false
 	}
@@ -304,7 +306,7 @@ func (o *SmsOrVoiceMessage) GetRegionalOk() (*RegionalOptions, bool) {
 }
 
 // HasRegional returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasRegional() bool {
+func (o *TemplateMessage) HasRegional() bool {
 	if o != nil && !IsNil(o.Regional) {
 		return true
 	}
@@ -313,12 +315,12 @@ func (o *SmsOrVoiceMessage) HasRegional() bool {
 }
 
 // SetRegional gets a reference to the given RegionalOptions and assigns it to the Regional field.
-func (o *SmsOrVoiceMessage) SetRegional(v RegionalOptions) {
+func (o *TemplateMessage) SetRegional(v RegionalOptions) {
 	o.Regional = &v
 }
 
 // GetRepeatDTMF returns the RepeatDTMF field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetRepeatDTMF() string {
+func (o *TemplateMessage) GetRepeatDTMF() string {
 	if o == nil || IsNil(o.RepeatDTMF) {
 		var ret string
 		return ret
@@ -328,7 +330,7 @@ func (o *SmsOrVoiceMessage) GetRepeatDTMF() string {
 
 // GetRepeatDTMFOk returns a tuple with the RepeatDTMF field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetRepeatDTMFOk() (*string, bool) {
+func (o *TemplateMessage) GetRepeatDTMFOk() (*string, bool) {
 	if o == nil || IsNil(o.RepeatDTMF) {
 		return nil, false
 	}
@@ -336,7 +338,7 @@ func (o *SmsOrVoiceMessage) GetRepeatDTMFOk() (*string, bool) {
 }
 
 // HasRepeatDTMF returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasRepeatDTMF() bool {
+func (o *TemplateMessage) HasRepeatDTMF() bool {
 	if o != nil && !IsNil(o.RepeatDTMF) {
 		return true
 	}
@@ -345,12 +347,12 @@ func (o *SmsOrVoiceMessage) HasRepeatDTMF() bool {
 }
 
 // SetRepeatDTMF gets a reference to the given string and assigns it to the RepeatDTMF field.
-func (o *SmsOrVoiceMessage) SetRepeatDTMF(v string) {
+func (o *TemplateMessage) SetRepeatDTMF(v string) {
 	o.RepeatDTMF = &v
 }
 
 // GetSenderId returns the SenderId field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetSenderId() string {
+func (o *TemplateMessage) GetSenderId() string {
 	if o == nil || IsNil(o.SenderId) {
 		var ret string
 		return ret
@@ -360,7 +362,7 @@ func (o *SmsOrVoiceMessage) GetSenderId() string {
 
 // GetSenderIdOk returns a tuple with the SenderId field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetSenderIdOk() (*string, bool) {
+func (o *TemplateMessage) GetSenderIdOk() (*string, bool) {
 	if o == nil || IsNil(o.SenderId) {
 		return nil, false
 	}
@@ -368,7 +370,7 @@ func (o *SmsOrVoiceMessage) GetSenderIdOk() (*string, bool) {
 }
 
 // HasSenderId returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasSenderId() bool {
+func (o *TemplateMessage) HasSenderId() bool {
 	if o != nil && !IsNil(o.SenderId) {
 		return true
 	}
@@ -377,12 +379,12 @@ func (o *SmsOrVoiceMessage) HasSenderId() bool {
 }
 
 // SetSenderId gets a reference to the given string and assigns it to the SenderId field.
-func (o *SmsOrVoiceMessage) SetSenderId(v string) {
+func (o *TemplateMessage) SetSenderId(v string) {
 	o.SenderId = &v
 }
 
 // GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetSpeechRate() float64 {
+func (o *TemplateMessage) GetSpeechRate() float64 {
 	if o == nil || IsNil(o.SpeechRate) {
 		var ret float64
 		return ret
@@ -392,7 +394,7 @@ func (o *SmsOrVoiceMessage) GetSpeechRate() float64 {
 
 // GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetSpeechRateOk() (*float64, bool) {
+func (o *TemplateMessage) GetSpeechRateOk() (*float64, bool) {
 	if o == nil || IsNil(o.SpeechRate) {
 		return nil, false
 	}
@@ -400,7 +402,7 @@ func (o *SmsOrVoiceMessage) GetSpeechRateOk() (*float64, bool) {
 }
 
 // HasSpeechRate returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasSpeechRate() bool {
+func (o *TemplateMessage) HasSpeechRate() bool {
 	if o != nil && !IsNil(o.SpeechRate) {
 		return true
 	}
@@ -409,12 +411,12 @@ func (o *SmsOrVoiceMessage) HasSpeechRate() bool {
 }
 
 // SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
-func (o *SmsOrVoiceMessage) SetSpeechRate(v float64) {
+func (o *TemplateMessage) SetSpeechRate(v float64) {
 	o.SpeechRate = &v
 }
 
 // GetVoiceName returns the VoiceName field value if set, zero value otherwise.
-func (o *SmsOrVoiceMessage) GetVoiceName() string {
+func (o *TemplateMessage) GetVoiceName() string {
 	if o == nil || IsNil(o.VoiceName) {
 		var ret string
 		return ret
@@ -424,7 +426,7 @@ func (o *SmsOrVoiceMessage) GetVoiceName() string {
 
 // GetVoiceNameOk returns a tuple with the VoiceName field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *SmsOrVoiceMessage) GetVoiceNameOk() (*string, bool) {
+func (o *TemplateMessage) GetVoiceNameOk() (*string, bool) {
 	if o == nil || IsNil(o.VoiceName) {
 		return nil, false
 	}
@@ -432,7 +434,7 @@ func (o *SmsOrVoiceMessage) GetVoiceNameOk() (*string, bool) {
 }
 
 // HasVoiceName returns a boolean if a field has been set.
-func (o *SmsOrVoiceMessage) HasVoiceName() bool {
+func (o *TemplateMessage) HasVoiceName() bool {
 	if o != nil && !IsNil(o.VoiceName) {
 		return true
 	}
@@ -441,11 +443,11 @@ func (o *SmsOrVoiceMessage) HasVoiceName() bool {
 }
 
 // SetVoiceName gets a reference to the given string and assigns it to the VoiceName field.
-func (o *SmsOrVoiceMessage) SetVoiceName(v string) {
+func (o *TemplateMessage) SetVoiceName(v string) {
 	o.VoiceName = &v
 }
 
-func (o SmsOrVoiceMessage) MarshalJSON() ([]byte, error) {
+func (o TemplateMessage) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -453,7 +455,7 @@ func (o SmsOrVoiceMessage) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o SmsOrVoiceMessage) ToMap() (map[string]interface{}, error) {
+func (o TemplateMessage) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.ApplicationId) {
 		toSerialize["applicationId"] = o.ApplicationId
@@ -494,38 +496,38 @@ func (o SmsOrVoiceMessage) ToMap() (map[string]interface{}, error) {
 	return toSerialize, nil
 }
 
-type NullableSmsOrVoiceMessage struct {
-	value *SmsOrVoiceMessage
+type NullableTemplateMessage struct {
+	value *TemplateMessage
 	isSet bool
 }
 
-func (v NullableSmsOrVoiceMessage) Get() *SmsOrVoiceMessage {
+func (v NullableTemplateMessage) Get() *TemplateMessage {
 	return v.value
 }
 
-func (v *NullableSmsOrVoiceMessage) Set(val *SmsOrVoiceMessage) {
+func (v *NullableTemplateMessage) Set(val *TemplateMessage) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableSmsOrVoiceMessage) IsSet() bool {
+func (v NullableTemplateMessage) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableSmsOrVoiceMessage) Unset() {
+func (v *NullableTemplateMessage) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableSmsOrVoiceMessage(val *SmsOrVoiceMessage) *NullableSmsOrVoiceMessage {
-	return &NullableSmsOrVoiceMessage{value: val, isSet: true}
+func NewNullableTemplateMessage(val *TemplateMessage) *NullableTemplateMessage {
+	return &NullableTemplateMessage{value: val, isSet: true}
 }
 
-func (v NullableSmsOrVoiceMessage) MarshalJSON() ([]byte, error) {
+func (v NullableTemplateMessage) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableSmsOrVoiceMessage) UnmarshalJSON(src []byte) error {
+func (v *NullableTemplateMessage) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/sms/text_message_content.go b/pkg/infobip/models/sms/text_message_content.go
index 6b88565..10f585d 100644
--- a/pkg/infobip/models/sms/text_message_content.go
+++ b/pkg/infobip/models/sms/text_message_content.go
@@ -24,7 +24,7 @@ type TextMessageContent struct {
 	// Content of the message being sent.
 	Text            string
 	Transliteration *TransliterationCode
-	Language        *LanguageV3
+	Language        *Language
 }
 
 type _TextMessageContent TextMessageContent
@@ -33,6 +33,7 @@ type _TextMessageContent TextMessageContent
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTextMessageContent(text string) *TextMessageContent {
 	this := TextMessageContent{}
 	this.Text = text
@@ -44,6 +45,7 @@ func NewTextMessageContent(text string) *TextMessageContent {
 // but it doesn't guarantee that properties required by API are set
 func NewTextMessageContentWithDefaults() *TextMessageContent {
 	this := TextMessageContent{}
+
 	return &this
 }
 
@@ -104,9 +106,9 @@ func (o *TextMessageContent) SetTransliteration(v TransliterationCode) {
 }
 
 // GetLanguage returns the Language field value if set, zero value otherwise.
-func (o *TextMessageContent) GetLanguage() LanguageV3 {
+func (o *TextMessageContent) GetLanguage() Language {
 	if o == nil || IsNil(o.Language) {
-		var ret LanguageV3
+		var ret Language
 		return ret
 	}
 	return *o.Language
@@ -114,7 +116,7 @@ func (o *TextMessageContent) GetLanguage() LanguageV3 {
 
 // GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *TextMessageContent) GetLanguageOk() (*LanguageV3, bool) {
+func (o *TextMessageContent) GetLanguageOk() (*Language, bool) {
 	if o == nil || IsNil(o.Language) {
 		return nil, false
 	}
@@ -130,8 +132,8 @@ func (o *TextMessageContent) HasLanguage() bool {
 	return false
 }
 
-// SetLanguage gets a reference to the given LanguageV3 and assigns it to the Language field.
-func (o *TextMessageContent) SetLanguage(v LanguageV3) {
+// SetLanguage gets a reference to the given Language and assigns it to the Language field.
+func (o *TextMessageContent) SetLanguage(v Language) {
 	o.Language = &v
 }
 
diff --git a/pkg/infobip/models/sms/tfa_message.go b/pkg/infobip/models/sms/tfa_message.go
index da3d0bd..e30a029 100644
--- a/pkg/infobip/models/sms/tfa_message.go
+++ b/pkg/infobip/models/sms/tfa_message.go
@@ -52,6 +52,7 @@ type TfaMessage struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTfaMessage() *TfaMessage {
 	this := TfaMessage{}
 	return &this
@@ -62,6 +63,7 @@ func NewTfaMessage() *TfaMessage {
 // but it doesn't guarantee that properties required by API are set
 func NewTfaMessageWithDefaults() *TfaMessage {
 	this := TfaMessage{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/tracking.go b/pkg/infobip/models/sms/tracking.go
index f88fe39..c09a4cc 100644
--- a/pkg/infobip/models/sms/tracking.go
+++ b/pkg/infobip/models/sms/tracking.go
@@ -31,6 +31,7 @@ type Tracking struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTracking() *Tracking {
 	this := Tracking{}
 	return &this
@@ -41,6 +42,7 @@ func NewTracking() *Tracking {
 // but it doesn't guarantee that properties required by API are set
 func NewTrackingWithDefaults() *Tracking {
 	this := Tracking{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/turkey_iys_options.go b/pkg/infobip/models/sms/turkey_iys_options.go
index da7c7b7..5e59657 100644
--- a/pkg/infobip/models/sms/turkey_iys_options.go
+++ b/pkg/infobip/models/sms/turkey_iys_options.go
@@ -32,6 +32,7 @@ type _TurkeyIysOptions TurkeyIysOptions
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewTurkeyIysOptions(recipientType RecipientType) *TurkeyIysOptions {
 	this := TurkeyIysOptions{}
 	this.RecipientType = recipientType
@@ -43,6 +44,7 @@ func NewTurkeyIysOptions(recipientType RecipientType) *TurkeyIysOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewTurkeyIysOptionsWithDefaults() *TurkeyIysOptions {
 	this := TurkeyIysOptions{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/update_email_message_request.go b/pkg/infobip/models/sms/update_email_message_request.go
index aeb24f6..ea80af6 100644
--- a/pkg/infobip/models/sms/update_email_message_request.go
+++ b/pkg/infobip/models/sms/update_email_message_request.go
@@ -34,6 +34,7 @@ type UpdateEmailMessageRequest struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewUpdateEmailMessageRequest() *UpdateEmailMessageRequest {
 	this := UpdateEmailMessageRequest{}
 	return &this
@@ -44,6 +45,7 @@ func NewUpdateEmailMessageRequest() *UpdateEmailMessageRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewUpdateEmailMessageRequestWithDefaults() *UpdateEmailMessageRequest {
 	this := UpdateEmailMessageRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/update_sms_or_voice_message_request.go b/pkg/infobip/models/sms/update_message_request.go
similarity index 68%
rename from pkg/infobip/models/sms/update_sms_or_voice_message_request.go
rename to pkg/infobip/models/sms/update_message_request.go
index 3be45a5..66d2cda 100644
--- a/pkg/infobip/models/sms/update_sms_or_voice_message_request.go
+++ b/pkg/infobip/models/sms/update_message_request.go
@@ -16,11 +16,11 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the UpdateSmsOrVoiceMessageRequest type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &UpdateSmsOrVoiceMessageRequest{}
+// checks if the UpdateMessageRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &UpdateMessageRequest{}
 
-// UpdateSmsOrVoiceMessageRequest struct for UpdateSmsOrVoiceMessageRequest
-type UpdateSmsOrVoiceMessageRequest struct {
+// UpdateMessageRequest struct for UpdateMessageRequest
+type UpdateMessageRequest struct {
 	Language *TfaLanguage
 	// Content of the message being sent which contains at minimum one placeholder for a PIN code (`{{pin}}`). Placeholder format is `{{placeholderName}}`.
 	MessageText *string
@@ -38,25 +38,27 @@ type UpdateSmsOrVoiceMessageRequest struct {
 	VoiceName *string
 }
 
-// NewUpdateSmsOrVoiceMessageRequest instantiates a new UpdateSmsOrVoiceMessageRequest object
+// NewUpdateMessageRequest instantiates a new UpdateMessageRequest object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewUpdateSmsOrVoiceMessageRequest() *UpdateSmsOrVoiceMessageRequest {
-	this := UpdateSmsOrVoiceMessageRequest{}
+
+func NewUpdateMessageRequest() *UpdateMessageRequest {
+	this := UpdateMessageRequest{}
 	return &this
 }
 
-// NewUpdateSmsOrVoiceMessageRequestWithDefaults instantiates a new UpdateSmsOrVoiceMessageRequest object
+// NewUpdateMessageRequestWithDefaults instantiates a new UpdateMessageRequest object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewUpdateSmsOrVoiceMessageRequestWithDefaults() *UpdateSmsOrVoiceMessageRequest {
-	this := UpdateSmsOrVoiceMessageRequest{}
+func NewUpdateMessageRequestWithDefaults() *UpdateMessageRequest {
+	this := UpdateMessageRequest{}
+
 	return &this
 }
 
 // GetLanguage returns the Language field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetLanguage() TfaLanguage {
+func (o *UpdateMessageRequest) GetLanguage() TfaLanguage {
 	if o == nil || IsNil(o.Language) {
 		var ret TfaLanguage
 		return ret
@@ -66,7 +68,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetLanguage() TfaLanguage {
 
 // GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetLanguageOk() (*TfaLanguage, bool) {
+func (o *UpdateMessageRequest) GetLanguageOk() (*TfaLanguage, bool) {
 	if o == nil || IsNil(o.Language) {
 		return nil, false
 	}
@@ -74,7 +76,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetLanguageOk() (*TfaLanguage, bool) {
 }
 
 // HasLanguage returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasLanguage() bool {
+func (o *UpdateMessageRequest) HasLanguage() bool {
 	if o != nil && !IsNil(o.Language) {
 		return true
 	}
@@ -83,12 +85,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasLanguage() bool {
 }
 
 // SetLanguage gets a reference to the given TfaLanguage and assigns it to the Language field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetLanguage(v TfaLanguage) {
+func (o *UpdateMessageRequest) SetLanguage(v TfaLanguage) {
 	o.Language = &v
 }
 
 // GetMessageText returns the MessageText field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetMessageText() string {
+func (o *UpdateMessageRequest) GetMessageText() string {
 	if o == nil || IsNil(o.MessageText) {
 		var ret string
 		return ret
@@ -98,7 +100,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetMessageText() string {
 
 // GetMessageTextOk returns a tuple with the MessageText field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetMessageTextOk() (*string, bool) {
+func (o *UpdateMessageRequest) GetMessageTextOk() (*string, bool) {
 	if o == nil || IsNil(o.MessageText) {
 		return nil, false
 	}
@@ -106,7 +108,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetMessageTextOk() (*string, bool) {
 }
 
 // HasMessageText returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasMessageText() bool {
+func (o *UpdateMessageRequest) HasMessageText() bool {
 	if o != nil && !IsNil(o.MessageText) {
 		return true
 	}
@@ -115,12 +117,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasMessageText() bool {
 }
 
 // SetMessageText gets a reference to the given string and assigns it to the MessageText field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetMessageText(v string) {
+func (o *UpdateMessageRequest) SetMessageText(v string) {
 	o.MessageText = &v
 }
 
 // GetPinLength returns the PinLength field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetPinLength() int32 {
+func (o *UpdateMessageRequest) GetPinLength() int32 {
 	if o == nil || IsNil(o.PinLength) {
 		var ret int32
 		return ret
@@ -130,7 +132,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetPinLength() int32 {
 
 // GetPinLengthOk returns a tuple with the PinLength field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetPinLengthOk() (*int32, bool) {
+func (o *UpdateMessageRequest) GetPinLengthOk() (*int32, bool) {
 	if o == nil || IsNil(o.PinLength) {
 		return nil, false
 	}
@@ -138,7 +140,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetPinLengthOk() (*int32, bool) {
 }
 
 // HasPinLength returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasPinLength() bool {
+func (o *UpdateMessageRequest) HasPinLength() bool {
 	if o != nil && !IsNil(o.PinLength) {
 		return true
 	}
@@ -147,12 +149,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasPinLength() bool {
 }
 
 // SetPinLength gets a reference to the given int32 and assigns it to the PinLength field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetPinLength(v int32) {
+func (o *UpdateMessageRequest) SetPinLength(v int32) {
 	o.PinLength = &v
 }
 
 // GetPinType returns the PinType field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetPinType() PinType {
+func (o *UpdateMessageRequest) GetPinType() PinType {
 	if o == nil || IsNil(o.PinType) {
 		var ret PinType
 		return ret
@@ -162,7 +164,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetPinType() PinType {
 
 // GetPinTypeOk returns a tuple with the PinType field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetPinTypeOk() (*PinType, bool) {
+func (o *UpdateMessageRequest) GetPinTypeOk() (*PinType, bool) {
 	if o == nil || IsNil(o.PinType) {
 		return nil, false
 	}
@@ -170,7 +172,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetPinTypeOk() (*PinType, bool) {
 }
 
 // HasPinType returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasPinType() bool {
+func (o *UpdateMessageRequest) HasPinType() bool {
 	if o != nil && !IsNil(o.PinType) {
 		return true
 	}
@@ -179,12 +181,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasPinType() bool {
 }
 
 // SetPinType gets a reference to the given PinType and assigns it to the PinType field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetPinType(v PinType) {
+func (o *UpdateMessageRequest) SetPinType(v PinType) {
 	o.PinType = &v
 }
 
 // GetRegional returns the Regional field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetRegional() RegionalOptions {
+func (o *UpdateMessageRequest) GetRegional() RegionalOptions {
 	if o == nil || IsNil(o.Regional) {
 		var ret RegionalOptions
 		return ret
@@ -194,7 +196,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetRegional() RegionalOptions {
 
 // GetRegionalOk returns a tuple with the Regional field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetRegionalOk() (*RegionalOptions, bool) {
+func (o *UpdateMessageRequest) GetRegionalOk() (*RegionalOptions, bool) {
 	if o == nil || IsNil(o.Regional) {
 		return nil, false
 	}
@@ -202,7 +204,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetRegionalOk() (*RegionalOptions, bool
 }
 
 // HasRegional returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasRegional() bool {
+func (o *UpdateMessageRequest) HasRegional() bool {
 	if o != nil && !IsNil(o.Regional) {
 		return true
 	}
@@ -211,12 +213,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasRegional() bool {
 }
 
 // SetRegional gets a reference to the given RegionalOptions and assigns it to the Regional field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetRegional(v RegionalOptions) {
+func (o *UpdateMessageRequest) SetRegional(v RegionalOptions) {
 	o.Regional = &v
 }
 
 // GetRepeatDTMF returns the RepeatDTMF field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetRepeatDTMF() string {
+func (o *UpdateMessageRequest) GetRepeatDTMF() string {
 	if o == nil || IsNil(o.RepeatDTMF) {
 		var ret string
 		return ret
@@ -226,7 +228,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetRepeatDTMF() string {
 
 // GetRepeatDTMFOk returns a tuple with the RepeatDTMF field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetRepeatDTMFOk() (*string, bool) {
+func (o *UpdateMessageRequest) GetRepeatDTMFOk() (*string, bool) {
 	if o == nil || IsNil(o.RepeatDTMF) {
 		return nil, false
 	}
@@ -234,7 +236,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetRepeatDTMFOk() (*string, bool) {
 }
 
 // HasRepeatDTMF returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasRepeatDTMF() bool {
+func (o *UpdateMessageRequest) HasRepeatDTMF() bool {
 	if o != nil && !IsNil(o.RepeatDTMF) {
 		return true
 	}
@@ -243,12 +245,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasRepeatDTMF() bool {
 }
 
 // SetRepeatDTMF gets a reference to the given string and assigns it to the RepeatDTMF field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetRepeatDTMF(v string) {
+func (o *UpdateMessageRequest) SetRepeatDTMF(v string) {
 	o.RepeatDTMF = &v
 }
 
 // GetSenderId returns the SenderId field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetSenderId() string {
+func (o *UpdateMessageRequest) GetSenderId() string {
 	if o == nil || IsNil(o.SenderId) {
 		var ret string
 		return ret
@@ -258,7 +260,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetSenderId() string {
 
 // GetSenderIdOk returns a tuple with the SenderId field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetSenderIdOk() (*string, bool) {
+func (o *UpdateMessageRequest) GetSenderIdOk() (*string, bool) {
 	if o == nil || IsNil(o.SenderId) {
 		return nil, false
 	}
@@ -266,7 +268,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetSenderIdOk() (*string, bool) {
 }
 
 // HasSenderId returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasSenderId() bool {
+func (o *UpdateMessageRequest) HasSenderId() bool {
 	if o != nil && !IsNil(o.SenderId) {
 		return true
 	}
@@ -275,12 +277,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasSenderId() bool {
 }
 
 // SetSenderId gets a reference to the given string and assigns it to the SenderId field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetSenderId(v string) {
+func (o *UpdateMessageRequest) SetSenderId(v string) {
 	o.SenderId = &v
 }
 
 // GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetSpeechRate() float64 {
+func (o *UpdateMessageRequest) GetSpeechRate() float64 {
 	if o == nil || IsNil(o.SpeechRate) {
 		var ret float64
 		return ret
@@ -290,7 +292,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetSpeechRate() float64 {
 
 // GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetSpeechRateOk() (*float64, bool) {
+func (o *UpdateMessageRequest) GetSpeechRateOk() (*float64, bool) {
 	if o == nil || IsNil(o.SpeechRate) {
 		return nil, false
 	}
@@ -298,7 +300,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetSpeechRateOk() (*float64, bool) {
 }
 
 // HasSpeechRate returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasSpeechRate() bool {
+func (o *UpdateMessageRequest) HasSpeechRate() bool {
 	if o != nil && !IsNil(o.SpeechRate) {
 		return true
 	}
@@ -307,12 +309,12 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasSpeechRate() bool {
 }
 
 // SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetSpeechRate(v float64) {
+func (o *UpdateMessageRequest) SetSpeechRate(v float64) {
 	o.SpeechRate = &v
 }
 
 // GetVoiceName returns the VoiceName field value if set, zero value otherwise.
-func (o *UpdateSmsOrVoiceMessageRequest) GetVoiceName() string {
+func (o *UpdateMessageRequest) GetVoiceName() string {
 	if o == nil || IsNil(o.VoiceName) {
 		var ret string
 		return ret
@@ -322,7 +324,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetVoiceName() string {
 
 // GetVoiceNameOk returns a tuple with the VoiceName field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) GetVoiceNameOk() (*string, bool) {
+func (o *UpdateMessageRequest) GetVoiceNameOk() (*string, bool) {
 	if o == nil || IsNil(o.VoiceName) {
 		return nil, false
 	}
@@ -330,7 +332,7 @@ func (o *UpdateSmsOrVoiceMessageRequest) GetVoiceNameOk() (*string, bool) {
 }
 
 // HasVoiceName returns a boolean if a field has been set.
-func (o *UpdateSmsOrVoiceMessageRequest) HasVoiceName() bool {
+func (o *UpdateMessageRequest) HasVoiceName() bool {
 	if o != nil && !IsNil(o.VoiceName) {
 		return true
 	}
@@ -339,11 +341,11 @@ func (o *UpdateSmsOrVoiceMessageRequest) HasVoiceName() bool {
 }
 
 // SetVoiceName gets a reference to the given string and assigns it to the VoiceName field.
-func (o *UpdateSmsOrVoiceMessageRequest) SetVoiceName(v string) {
+func (o *UpdateMessageRequest) SetVoiceName(v string) {
 	o.VoiceName = &v
 }
 
-func (o UpdateSmsOrVoiceMessageRequest) MarshalJSON() ([]byte, error) {
+func (o UpdateMessageRequest) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -351,7 +353,7 @@ func (o UpdateSmsOrVoiceMessageRequest) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o UpdateSmsOrVoiceMessageRequest) ToMap() (map[string]interface{}, error) {
+func (o UpdateMessageRequest) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.Language) {
 		toSerialize["language"] = o.Language
@@ -383,38 +385,38 @@ func (o UpdateSmsOrVoiceMessageRequest) ToMap() (map[string]interface{}, error)
 	return toSerialize, nil
 }
 
-type NullableUpdateSmsOrVoiceMessageRequest struct {
-	value *UpdateSmsOrVoiceMessageRequest
+type NullableUpdateMessageRequest struct {
+	value *UpdateMessageRequest
 	isSet bool
 }
 
-func (v NullableUpdateSmsOrVoiceMessageRequest) Get() *UpdateSmsOrVoiceMessageRequest {
+func (v NullableUpdateMessageRequest) Get() *UpdateMessageRequest {
 	return v.value
 }
 
-func (v *NullableUpdateSmsOrVoiceMessageRequest) Set(val *UpdateSmsOrVoiceMessageRequest) {
+func (v *NullableUpdateMessageRequest) Set(val *UpdateMessageRequest) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableUpdateSmsOrVoiceMessageRequest) IsSet() bool {
+func (v NullableUpdateMessageRequest) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableUpdateSmsOrVoiceMessageRequest) Unset() {
+func (v *NullableUpdateMessageRequest) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableUpdateSmsOrVoiceMessageRequest(val *UpdateSmsOrVoiceMessageRequest) *NullableUpdateSmsOrVoiceMessageRequest {
-	return &NullableUpdateSmsOrVoiceMessageRequest{value: val, isSet: true}
+func NewNullableUpdateMessageRequest(val *UpdateMessageRequest) *NullableUpdateMessageRequest {
+	return &NullableUpdateMessageRequest{value: val, isSet: true}
 }
 
-func (v NullableUpdateSmsOrVoiceMessageRequest) MarshalJSON() ([]byte, error) {
+func (v NullableUpdateMessageRequest) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableUpdateSmsOrVoiceMessageRequest) UnmarshalJSON(src []byte) error {
+func (v *NullableUpdateMessageRequest) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/sms/update_status_request.go b/pkg/infobip/models/sms/update_status_request.go
index 708a267..7eabd5f 100644
--- a/pkg/infobip/models/sms/update_status_request.go
+++ b/pkg/infobip/models/sms/update_status_request.go
@@ -30,6 +30,7 @@ type _UpdateStatusRequest UpdateStatusRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewUpdateStatusRequest(status BulkStatus) *UpdateStatusRequest {
 	this := UpdateStatusRequest{}
 	this.Status = status
@@ -41,6 +42,7 @@ func NewUpdateStatusRequest(status BulkStatus) *UpdateStatusRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewUpdateStatusRequestWithDefaults() *UpdateStatusRequest {
 	this := UpdateStatusRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/url_options.go b/pkg/infobip/models/sms/url_options.go
index 93290e6..597ad01 100644
--- a/pkg/infobip/models/sms/url_options.go
+++ b/pkg/infobip/models/sms/url_options.go
@@ -37,6 +37,7 @@ type UrlOptions struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewUrlOptions() *UrlOptions {
 	this := UrlOptions{}
 	var shortenUrl bool = true
@@ -53,6 +54,7 @@ func NewUrlOptions() *UrlOptions {
 // but it doesn't guarantee that properties required by API are set
 func NewUrlOptionsWithDefaults() *UrlOptions {
 	this := UrlOptions{}
+
 	var shortenUrl bool = true
 	this.ShortenUrl = &shortenUrl
 	var trackClicks bool = true
diff --git a/pkg/infobip/models/sms/validity_period.go b/pkg/infobip/models/sms/validity_period.go
index a0639b6..7a1993a 100644
--- a/pkg/infobip/models/sms/validity_period.go
+++ b/pkg/infobip/models/sms/validity_period.go
@@ -32,6 +32,7 @@ type _ValidityPeriod ValidityPeriod
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewValidityPeriod(amount int32) *ValidityPeriod {
 	this := ValidityPeriod{}
 	this.Amount = amount
@@ -45,6 +46,7 @@ func NewValidityPeriod(amount int32) *ValidityPeriod {
 // but it doesn't guarantee that properties required by API are set
 func NewValidityPeriodWithDefaults() *ValidityPeriod {
 	this := ValidityPeriod{}
+
 	var timeUnit ValidityPeriodTimeUnit = VALIDITYPERIODTIMEUNIT_MINUTES
 	this.TimeUnit = &timeUnit
 	return &this
diff --git a/pkg/infobip/models/sms/verification.go b/pkg/infobip/models/sms/verification.go
index 5a7125b..d7c1c6f 100644
--- a/pkg/infobip/models/sms/verification.go
+++ b/pkg/infobip/models/sms/verification.go
@@ -35,6 +35,7 @@ type Verification struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewVerification() *Verification {
 	this := Verification{}
 	return &this
@@ -45,6 +46,7 @@ func NewVerification() *Verification {
 // but it doesn't guarantee that properties required by API are set
 func NewVerificationWithDefaults() *Verification {
 	this := Verification{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/verification_response.go b/pkg/infobip/models/sms/verification_response.go
index ae836fc..c9b2bb3 100644
--- a/pkg/infobip/models/sms/verification_response.go
+++ b/pkg/infobip/models/sms/verification_response.go
@@ -29,6 +29,7 @@ type VerificationResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewVerificationResponse() *VerificationResponse {
 	this := VerificationResponse{}
 	return &this
@@ -39,6 +40,7 @@ func NewVerificationResponse() *VerificationResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewVerificationResponseWithDefaults() *VerificationResponse {
 	this := VerificationResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/verify_pin_request.go b/pkg/infobip/models/sms/verify_pin_request.go
index ab6874e..d45df75 100644
--- a/pkg/infobip/models/sms/verify_pin_request.go
+++ b/pkg/infobip/models/sms/verify_pin_request.go
@@ -31,6 +31,7 @@ type _VerifyPinRequest VerifyPinRequest
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewVerifyPinRequest(pin string) *VerifyPinRequest {
 	this := VerifyPinRequest{}
 	this.Pin = pin
@@ -42,6 +43,7 @@ func NewVerifyPinRequest(pin string) *VerifyPinRequest {
 // but it doesn't guarantee that properties required by API are set
 func NewVerifyPinRequestWithDefaults() *VerifyPinRequest {
 	this := VerifyPinRequest{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/verify_pin_response.go b/pkg/infobip/models/sms/verify_pin_response.go
index 71037f7..b84d2fa 100644
--- a/pkg/infobip/models/sms/verify_pin_response.go
+++ b/pkg/infobip/models/sms/verify_pin_response.go
@@ -37,6 +37,7 @@ type VerifyPinResponse struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewVerifyPinResponse() *VerifyPinResponse {
 	this := VerifyPinResponse{}
 	return &this
@@ -47,6 +48,7 @@ func NewVerifyPinResponse() *VerifyPinResponse {
 // but it doesn't guarantee that properties required by API are set
 func NewVerifyPinResponseWithDefaults() *VerifyPinResponse {
 	this := VerifyPinResponse{}
+
 	return &this
 }
 
diff --git a/pkg/infobip/models/sms/webhooks.go b/pkg/infobip/models/sms/webhooks.go
index 9d6e7fc..92bf4ef 100644
--- a/pkg/infobip/models/sms/webhooks.go
+++ b/pkg/infobip/models/sms/webhooks.go
@@ -32,6 +32,7 @@ type Webhooks struct {
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewWebhooks() *Webhooks {
 	this := Webhooks{}
 	return &this
@@ -42,6 +43,7 @@ func NewWebhooks() *Webhooks {
 // but it doesn't guarantee that properties required by API are set
 func NewWebhooksWithDefaults() *Webhooks {
 	this := Webhooks{}
+
 	return &this
 }
 
@@ -197,4 +199,4 @@ func (v NullableWebhooks) MarshalJSON() ([]byte, error) {
 func (v *NullableWebhooks) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
-}
\ No newline at end of file
+}
diff --git a/pkg/infobip/models/voice/action_call_request.go b/pkg/infobip/models/voice/action_call_request.go
new file mode 100644
index 0000000..5e4597d
--- /dev/null
+++ b/pkg/infobip/models/voice/action_call_request.go
@@ -0,0 +1,373 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ActionCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ActionCallRequest{}
+
+// ActionCallRequest struct for ActionCallRequest
+type ActionCallRequest struct {
+	Endpoint CallEndpoint
+	// Caller identifier. Must be a number in the [E.164](https://en.wikipedia.org/wiki/E.164) format for calls to `PHONE`, a string for calls to `WEBRTC` or `SIP`, and a Viber Voice number for calls to `VIBER`.
+	From string
+	// Display name to show when placing calls towards WEBRTC endpoints. Can be any alphanumeric string.
+	FromDisplayName *string
+	// Time to wait, in seconds, before the called party answers the call.
+	ConnectTimeout   *int32
+	Recording        *CallRecordingRequest
+	MachineDetection *MachineDetectionRequest
+	// Max duration in seconds.
+	MaxDuration *int32
+	// Custom data.
+	CustomData *map[string]string
+}
+
+type _ActionCallRequest ActionCallRequest
+
+// NewActionCallRequest instantiates a new ActionCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewActionCallRequest(endpoint CallEndpoint, from string) *ActionCallRequest {
+	this := ActionCallRequest{}
+	this.Endpoint = endpoint
+	this.From = from
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// NewActionCallRequestWithDefaults instantiates a new ActionCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewActionCallRequestWithDefaults() *ActionCallRequest {
+	this := ActionCallRequest{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *ActionCallRequest) GetEndpoint() CallEndpoint {
+	if o == nil {
+		var ret CallEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *ActionCallRequest) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = v
+}
+
+// GetFrom returns the From field value
+func (o *ActionCallRequest) GetFrom() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.From
+}
+
+// GetFromOk returns a tuple with the From field value
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetFromOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.From, true
+}
+
+// SetFrom sets field value
+func (o *ActionCallRequest) SetFrom(v string) {
+	o.From = v
+}
+
+// GetFromDisplayName returns the FromDisplayName field value if set, zero value otherwise.
+func (o *ActionCallRequest) GetFromDisplayName() string {
+	if o == nil || IsNil(o.FromDisplayName) {
+		var ret string
+		return ret
+	}
+	return *o.FromDisplayName
+}
+
+// GetFromDisplayNameOk returns a tuple with the FromDisplayName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetFromDisplayNameOk() (*string, bool) {
+	if o == nil || IsNil(o.FromDisplayName) {
+		return nil, false
+	}
+	return o.FromDisplayName, true
+}
+
+// HasFromDisplayName returns a boolean if a field has been set.
+func (o *ActionCallRequest) HasFromDisplayName() bool {
+	if o != nil && !IsNil(o.FromDisplayName) {
+		return true
+	}
+
+	return false
+}
+
+// SetFromDisplayName gets a reference to the given string and assigns it to the FromDisplayName field.
+func (o *ActionCallRequest) SetFromDisplayName(v string) {
+	o.FromDisplayName = &v
+}
+
+// GetConnectTimeout returns the ConnectTimeout field value if set, zero value otherwise.
+func (o *ActionCallRequest) GetConnectTimeout() int32 {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.ConnectTimeout
+}
+
+// GetConnectTimeoutOk returns a tuple with the ConnectTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetConnectTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		return nil, false
+	}
+	return o.ConnectTimeout, true
+}
+
+// HasConnectTimeout returns a boolean if a field has been set.
+func (o *ActionCallRequest) HasConnectTimeout() bool {
+	if o != nil && !IsNil(o.ConnectTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectTimeout gets a reference to the given int32 and assigns it to the ConnectTimeout field.
+func (o *ActionCallRequest) SetConnectTimeout(v int32) {
+	o.ConnectTimeout = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *ActionCallRequest) GetRecording() CallRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetRecordingOk() (*CallRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *ActionCallRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallRecordingRequest and assigns it to the Recording field.
+func (o *ActionCallRequest) SetRecording(v CallRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *ActionCallRequest) GetMachineDetection() MachineDetectionRequest {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret MachineDetectionRequest
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetMachineDetectionOk() (*MachineDetectionRequest, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *ActionCallRequest) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given MachineDetectionRequest and assigns it to the MachineDetection field.
+func (o *ActionCallRequest) SetMachineDetection(v MachineDetectionRequest) {
+	o.MachineDetection = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *ActionCallRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *ActionCallRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *ActionCallRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *ActionCallRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionCallRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *ActionCallRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *ActionCallRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o ActionCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ActionCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["endpoint"] = o.Endpoint
+	toSerialize["from"] = o.From
+	if !IsNil(o.FromDisplayName) {
+		toSerialize["fromDisplayName"] = o.FromDisplayName
+	}
+	if !IsNil(o.ConnectTimeout) {
+		toSerialize["connectTimeout"] = o.ConnectTimeout
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableActionCallRequest struct {
+	value *ActionCallRequest
+	isSet bool
+}
+
+func (v NullableActionCallRequest) Get() *ActionCallRequest {
+	return v.value
+}
+
+func (v *NullableActionCallRequest) Set(val *ActionCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableActionCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableActionCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableActionCallRequest(val *ActionCallRequest) *NullableActionCallRequest {
+	return &NullableActionCallRequest{value: val, isSet: true}
+}
+
+func (v NullableActionCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableActionCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/action_conference_request.go b/pkg/infobip/models/voice/action_conference_request.go
new file mode 100644
index 0000000..1565889
--- /dev/null
+++ b/pkg/infobip/models/voice/action_conference_request.go
@@ -0,0 +1,206 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ActionConferenceRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ActionConferenceRequest{}
+
+// ActionConferenceRequest struct for ActionConferenceRequest
+type ActionConferenceRequest struct {
+	// Conference name, will be auto-generated if not provided.
+	Name      *string
+	Recording *ConferenceRecordingRequest
+	// Max duration in seconds.
+	MaxDuration *int32
+}
+
+// NewActionConferenceRequest instantiates a new ActionConferenceRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewActionConferenceRequest() *ActionConferenceRequest {
+	this := ActionConferenceRequest{}
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// NewActionConferenceRequestWithDefaults instantiates a new ActionConferenceRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewActionConferenceRequestWithDefaults() *ActionConferenceRequest {
+	this := ActionConferenceRequest{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *ActionConferenceRequest) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionConferenceRequest) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *ActionConferenceRequest) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *ActionConferenceRequest) SetName(v string) {
+	o.Name = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *ActionConferenceRequest) GetRecording() ConferenceRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret ConferenceRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionConferenceRequest) GetRecordingOk() (*ConferenceRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *ActionConferenceRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given ConferenceRecordingRequest and assigns it to the Recording field.
+func (o *ActionConferenceRequest) SetRecording(v ConferenceRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *ActionConferenceRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionConferenceRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *ActionConferenceRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *ActionConferenceRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+func (o ActionConferenceRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ActionConferenceRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	return toSerialize, nil
+}
+
+type NullableActionConferenceRequest struct {
+	value *ActionConferenceRequest
+	isSet bool
+}
+
+func (v NullableActionConferenceRequest) Get() *ActionConferenceRequest {
+	return v.value
+}
+
+func (v *NullableActionConferenceRequest) Set(val *ActionConferenceRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableActionConferenceRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableActionConferenceRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableActionConferenceRequest(val *ActionConferenceRequest) *NullableActionConferenceRequest {
+	return &NullableActionConferenceRequest{value: val, isSet: true}
+}
+
+func (v NullableActionConferenceRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableActionConferenceRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/action_response.go b/pkg/infobip/models/voice/action_response.go
new file mode 100644
index 0000000..e601e19
--- /dev/null
+++ b/pkg/infobip/models/voice/action_response.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ActionResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ActionResponse{}
+
+// ActionResponse struct for ActionResponse
+type ActionResponse struct {
+	Status *ActionStatus
+}
+
+// NewActionResponse instantiates a new ActionResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewActionResponse() *ActionResponse {
+	this := ActionResponse{}
+	return &this
+}
+
+// NewActionResponseWithDefaults instantiates a new ActionResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewActionResponseWithDefaults() *ActionResponse {
+	this := ActionResponse{}
+
+	return &this
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *ActionResponse) GetStatus() ActionStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret ActionStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ActionResponse) GetStatusOk() (*ActionStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *ActionResponse) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given ActionStatus and assigns it to the Status field.
+func (o *ActionResponse) SetStatus(v ActionStatus) {
+	o.Status = &v
+}
+
+func (o ActionResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ActionResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	return toSerialize, nil
+}
+
+type NullableActionResponse struct {
+	value *ActionResponse
+	isSet bool
+}
+
+func (v NullableActionResponse) Get() *ActionResponse {
+	return v.value
+}
+
+func (v *NullableActionResponse) Set(val *ActionResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableActionResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableActionResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableActionResponse(val *ActionResponse) *NullableActionResponse {
+	return &NullableActionResponse{value: val, isSet: true}
+}
+
+func (v NullableActionResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableActionResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/action_status.go b/pkg/infobip/models/voice/action_status.go
new file mode 100644
index 0000000..dd1f67b
--- /dev/null
+++ b/pkg/infobip/models/voice/action_status.go
@@ -0,0 +1,114 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ActionStatus Action status.
+type ActionStatus string
+
+// List of ActionStatus
+const (
+	ACTIONSTATUS_PENDING     ActionStatus = "PENDING"
+	ACTIONSTATUS_IN_PROGRESS ActionStatus = "IN_PROGRESS"
+	ACTIONSTATUS_COMPLETED   ActionStatus = "COMPLETED"
+	ACTIONSTATUS_FAILED      ActionStatus = "FAILED"
+)
+
+// All allowed values of ActionStatus enum
+var AllowedActionStatusEnumValues = []ActionStatus{
+	"PENDING",
+	"IN_PROGRESS",
+	"COMPLETED",
+	"FAILED",
+}
+
+func (v *ActionStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ActionStatus(value)
+	for _, existing := range AllowedActionStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ActionStatus", value)
+}
+
+// NewActionStatusFromValue returns a pointer to a valid ActionStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewActionStatusFromValue(v string) (*ActionStatus, error) {
+	ev := ActionStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ActionStatus: valid values are %v", v, AllowedActionStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ActionStatus) IsValid() bool {
+	for _, existing := range AllowedActionStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ActionStatus value
+func (v ActionStatus) Ptr() *ActionStatus {
+	return &v
+}
+
+type NullableActionStatus struct {
+	value *ActionStatus
+	isSet bool
+}
+
+func (v NullableActionStatus) Get() *ActionStatus {
+	return v.value
+}
+
+func (v *NullableActionStatus) Set(val *ActionStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableActionStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableActionStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableActionStatus(val *ActionStatus) *NullableActionStatus {
+	return &NullableActionStatus{value: val, isSet: true}
+}
+
+func (v NullableActionStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableActionStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/add_existing_call_request.go b/pkg/infobip/models/voice/add_existing_call_request.go
new file mode 100644
index 0000000..e186533
--- /dev/null
+++ b/pkg/infobip/models/voice/add_existing_call_request.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AddExistingCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AddExistingCallRequest{}
+
+// AddExistingCallRequest struct for AddExistingCallRequest
+type AddExistingCallRequest struct {
+	// Indicates whether to add an existing call on early media. Otherwise, the call will be added after being established. This field is applicable for `OUTBOUND` calls only. Cannot be `true` when `ringbackGeneration` is enabled.
+	ConnectOnEarlyMedia *bool
+	RingbackGeneration  *RingbackGeneration
+}
+
+// NewAddExistingCallRequest instantiates a new AddExistingCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAddExistingCallRequest() *AddExistingCallRequest {
+	this := AddExistingCallRequest{}
+	var connectOnEarlyMedia bool = false
+	this.ConnectOnEarlyMedia = &connectOnEarlyMedia
+	return &this
+}
+
+// NewAddExistingCallRequestWithDefaults instantiates a new AddExistingCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAddExistingCallRequestWithDefaults() *AddExistingCallRequest {
+	this := AddExistingCallRequest{}
+
+	var connectOnEarlyMedia bool = false
+	this.ConnectOnEarlyMedia = &connectOnEarlyMedia
+	return &this
+}
+
+// GetConnectOnEarlyMedia returns the ConnectOnEarlyMedia field value if set, zero value otherwise.
+func (o *AddExistingCallRequest) GetConnectOnEarlyMedia() bool {
+	if o == nil || IsNil(o.ConnectOnEarlyMedia) {
+		var ret bool
+		return ret
+	}
+	return *o.ConnectOnEarlyMedia
+}
+
+// GetConnectOnEarlyMediaOk returns a tuple with the ConnectOnEarlyMedia field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddExistingCallRequest) GetConnectOnEarlyMediaOk() (*bool, bool) {
+	if o == nil || IsNil(o.ConnectOnEarlyMedia) {
+		return nil, false
+	}
+	return o.ConnectOnEarlyMedia, true
+}
+
+// HasConnectOnEarlyMedia returns a boolean if a field has been set.
+func (o *AddExistingCallRequest) HasConnectOnEarlyMedia() bool {
+	if o != nil && !IsNil(o.ConnectOnEarlyMedia) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectOnEarlyMedia gets a reference to the given bool and assigns it to the ConnectOnEarlyMedia field.
+func (o *AddExistingCallRequest) SetConnectOnEarlyMedia(v bool) {
+	o.ConnectOnEarlyMedia = &v
+}
+
+// GetRingbackGeneration returns the RingbackGeneration field value if set, zero value otherwise.
+func (o *AddExistingCallRequest) GetRingbackGeneration() RingbackGeneration {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		var ret RingbackGeneration
+		return ret
+	}
+	return *o.RingbackGeneration
+}
+
+// GetRingbackGenerationOk returns a tuple with the RingbackGeneration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddExistingCallRequest) GetRingbackGenerationOk() (*RingbackGeneration, bool) {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		return nil, false
+	}
+	return o.RingbackGeneration, true
+}
+
+// HasRingbackGeneration returns a boolean if a field has been set.
+func (o *AddExistingCallRequest) HasRingbackGeneration() bool {
+	if o != nil && !IsNil(o.RingbackGeneration) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingbackGeneration gets a reference to the given RingbackGeneration and assigns it to the RingbackGeneration field.
+func (o *AddExistingCallRequest) SetRingbackGeneration(v RingbackGeneration) {
+	o.RingbackGeneration = &v
+}
+
+func (o AddExistingCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AddExistingCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ConnectOnEarlyMedia) {
+		toSerialize["connectOnEarlyMedia"] = o.ConnectOnEarlyMedia
+	}
+	if !IsNil(o.RingbackGeneration) {
+		toSerialize["ringbackGeneration"] = o.RingbackGeneration
+	}
+	return toSerialize, nil
+}
+
+type NullableAddExistingCallRequest struct {
+	value *AddExistingCallRequest
+	isSet bool
+}
+
+func (v NullableAddExistingCallRequest) Get() *AddExistingCallRequest {
+	return v.value
+}
+
+func (v *NullableAddExistingCallRequest) Set(val *AddExistingCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAddExistingCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAddExistingCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAddExistingCallRequest(val *AddExistingCallRequest) *NullableAddExistingCallRequest {
+	return &NullableAddExistingCallRequest{value: val, isSet: true}
+}
+
+func (v NullableAddExistingCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAddExistingCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/add_new_call_request.go b/pkg/infobip/models/voice/add_new_call_request.go
new file mode 100644
index 0000000..5d77ce5
--- /dev/null
+++ b/pkg/infobip/models/voice/add_new_call_request.go
@@ -0,0 +1,198 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AddNewCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AddNewCallRequest{}
+
+// AddNewCallRequest struct for AddNewCallRequest
+type AddNewCallRequest struct {
+	CallRequest ActionCallRequest
+	// Indicates whether to connect a new call on early media. Otherwise, the call will be connected after being established. Cannot be `true` when `ringbackGeneration` is enabled.
+	ConnectOnEarlyMedia *bool
+	RingbackGeneration  *RingbackGeneration
+}
+
+type _AddNewCallRequest AddNewCallRequest
+
+// NewAddNewCallRequest instantiates a new AddNewCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAddNewCallRequest(callRequest ActionCallRequest) *AddNewCallRequest {
+	this := AddNewCallRequest{}
+	this.CallRequest = callRequest
+	var connectOnEarlyMedia bool = false
+	this.ConnectOnEarlyMedia = &connectOnEarlyMedia
+	return &this
+}
+
+// NewAddNewCallRequestWithDefaults instantiates a new AddNewCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAddNewCallRequestWithDefaults() *AddNewCallRequest {
+	this := AddNewCallRequest{}
+
+	var connectOnEarlyMedia bool = false
+	this.ConnectOnEarlyMedia = &connectOnEarlyMedia
+	return &this
+}
+
+// GetCallRequest returns the CallRequest field value
+func (o *AddNewCallRequest) GetCallRequest() ActionCallRequest {
+	if o == nil {
+		var ret ActionCallRequest
+		return ret
+	}
+
+	return o.CallRequest
+}
+
+// GetCallRequestOk returns a tuple with the CallRequest field value
+// and a boolean to check if the value has been set.
+func (o *AddNewCallRequest) GetCallRequestOk() (*ActionCallRequest, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CallRequest, true
+}
+
+// SetCallRequest sets field value
+func (o *AddNewCallRequest) SetCallRequest(v ActionCallRequest) {
+	o.CallRequest = v
+}
+
+// GetConnectOnEarlyMedia returns the ConnectOnEarlyMedia field value if set, zero value otherwise.
+func (o *AddNewCallRequest) GetConnectOnEarlyMedia() bool {
+	if o == nil || IsNil(o.ConnectOnEarlyMedia) {
+		var ret bool
+		return ret
+	}
+	return *o.ConnectOnEarlyMedia
+}
+
+// GetConnectOnEarlyMediaOk returns a tuple with the ConnectOnEarlyMedia field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddNewCallRequest) GetConnectOnEarlyMediaOk() (*bool, bool) {
+	if o == nil || IsNil(o.ConnectOnEarlyMedia) {
+		return nil, false
+	}
+	return o.ConnectOnEarlyMedia, true
+}
+
+// HasConnectOnEarlyMedia returns a boolean if a field has been set.
+func (o *AddNewCallRequest) HasConnectOnEarlyMedia() bool {
+	if o != nil && !IsNil(o.ConnectOnEarlyMedia) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectOnEarlyMedia gets a reference to the given bool and assigns it to the ConnectOnEarlyMedia field.
+func (o *AddNewCallRequest) SetConnectOnEarlyMedia(v bool) {
+	o.ConnectOnEarlyMedia = &v
+}
+
+// GetRingbackGeneration returns the RingbackGeneration field value if set, zero value otherwise.
+func (o *AddNewCallRequest) GetRingbackGeneration() RingbackGeneration {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		var ret RingbackGeneration
+		return ret
+	}
+	return *o.RingbackGeneration
+}
+
+// GetRingbackGenerationOk returns a tuple with the RingbackGeneration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AddNewCallRequest) GetRingbackGenerationOk() (*RingbackGeneration, bool) {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		return nil, false
+	}
+	return o.RingbackGeneration, true
+}
+
+// HasRingbackGeneration returns a boolean if a field has been set.
+func (o *AddNewCallRequest) HasRingbackGeneration() bool {
+	if o != nil && !IsNil(o.RingbackGeneration) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingbackGeneration gets a reference to the given RingbackGeneration and assigns it to the RingbackGeneration field.
+func (o *AddNewCallRequest) SetRingbackGeneration(v RingbackGeneration) {
+	o.RingbackGeneration = &v
+}
+
+func (o AddNewCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AddNewCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["callRequest"] = o.CallRequest
+	if !IsNil(o.ConnectOnEarlyMedia) {
+		toSerialize["connectOnEarlyMedia"] = o.ConnectOnEarlyMedia
+	}
+	if !IsNil(o.RingbackGeneration) {
+		toSerialize["ringbackGeneration"] = o.RingbackGeneration
+	}
+	return toSerialize, nil
+}
+
+type NullableAddNewCallRequest struct {
+	value *AddNewCallRequest
+	isSet bool
+}
+
+func (v NullableAddNewCallRequest) Get() *AddNewCallRequest {
+	return v.value
+}
+
+func (v *NullableAddNewCallRequest) Set(val *AddNewCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAddNewCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAddNewCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAddNewCallRequest(val *AddNewCallRequest) *NullableAddNewCallRequest {
+	return &NullableAddNewCallRequest{value: val, isSet: true}
+}
+
+func (v NullableAddNewCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAddNewCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/advanced_voice_message.go b/pkg/infobip/models/voice/advanced_voice_message.go
new file mode 100644
index 0000000..c66f6a9
--- /dev/null
+++ b/pkg/infobip/models/voice/advanced_voice_message.go
@@ -0,0 +1,969 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AdvancedVoiceMessage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AdvancedVoiceMessage{}
+
+// AdvancedVoiceMessage Array of messages to be sent, one object per every message
+type AdvancedVoiceMessage struct {
+	// An audio file can be delivered as a voice message to the recipients. An audio file must be uploaded online, so that the existing URL can be available for file download. Size of the audio file must be below 4 MB. Supported formats of the provided file are aac, aiff, m4a, mp2, mp3, mp4 (audio only), ogg, wav and wma. Our platform needs to have permission to make GET and HEAD HTTP requests on the provided URL. Standard http ports (like 80, 8080, etc.) are advised.
+	AudioFileUrl *string
+	// Maximum possible duration of the call to be set, shown in seconds.
+	CallTimeout *int32
+	// Call transfers object enables transferring the ongoing call to another recipient(s) and establish a communication between your original recipient and additional one.
+	CallTransfers []CallTransfer
+	// Additional client's data that will be sent on the notifyUrl. The maximum value is 700 characters. Example:  `Text containing some additional data needed in Delivery Report`.
+	CallbackData       *string
+	DeliveryTimeWindow *DeliveryTimeWindow
+	// Message destination addresses. Destination address must be in the E.164 standard format (Example: 41793026727). Maximum number of destination addresses is 20k.
+	Destinations []Destination
+	// The waiting period for end user to enter DTMF digits. Default value is `10` seconds.
+	DtmfTimeout *int32
+	// Numeric sender ID in E.164 standard format (Example: 41793026727). This is caller ID that will be presented to the end user where applicable.
+	From *string
+	// If the message is in text format, the language in which the message is written must be defined for correct pronunciation. More about Text-to-speech functionality and supported TTS languages can be found [here](https://www.infobip.com/docs/voice-and-video/outbound-calls#text-to-speech-voice-over-broadcast). If not set, default language is `English [en]`. If voice is not set, then default voice for that specific language is used. In the case of English language, the voice is `[Joanna]`.
+	Language *string
+	// Used for enabling detection of answering machine after the call has been answered. It can be set to `hangup` or `continue`. When set to `hangup`, if a machine is detected call will hang up. When set to `continue`, if a machine is detected, then voice message starts playing into voice mail after the answering message is finished with its greeting. If machineDetection is used, there is a minimum of 4 seconds detection time, which can result in delay of playing the message. Answering machine detection is additionally charged. For more information please contact your account manager and check documentation on Answering Machine Detection.
+	MachineDetection *string
+	// Defines the maximum number of DTMF codes entered by end user that would be collected.
+	MaxDtmf *int32
+	// Preferred Delivery report content type. Can be `application/json` or `application/xml`. [Read more](https://www.infobip.com/docs/api#channels/voice/get-voice-delivery-reports).
+	NotifyContentType *string
+	// Specifies the version of the Delivery report to be sent. Can be `1` ([deprecated version 1](#programmable-communications/voice/receive-voice-delivery-reports-deprecated)) or `2` ([current version 2](#programmable-communications/voice/receive-voice-delivery-reports)). The default is version 2. [Read more](https://www.infobip.com/docs/api#channels/voice/get-voice-delivery-reports).
+	NotifyContentVersion *int32
+	// The URL on your callback server on which the Delivery report will be sent.
+	NotifyUrl *string
+	// Period of time in seconds between end user answering the call and message starting to be played. Minimal value is `0` and maximum value is 10 seconds. Default value is `0`.
+	Pause *int32
+	// Specify DTMF code that is used as an indicator to repeat the voice message to the end user. The # key cannot be collected, as it is reserved for user input termination. Message can be repeated up to 5 times.
+	RepeatDtmf *string
+	Retry      *Retry
+	// Ringing duration, unless there are no operator limitations. Default value is `45`. Note: There are no limitations on the Voice platform regarding this value, however, most of the operators have their own ring timeout limitations and it is advisable to keep the ringTimeout value up to `45` seconds.
+	RingTimeout *int32
+	// Used for scheduled Voice messages (message not to be sent immediately, but at scheduled time).
+	SendAt       *Time
+	SendingSpeed *SendingSpeed
+	// The reproduction speed of speech in the resulting message. Effective only when using text. Supported range is from `0.5` (slow down speech) to `2` (speed up speech). Values less than `0.5` will be replaced with `0.5`, and values higher than `2` will be replaced with `2`. Default value is `1`.
+	SpeechRate *float64
+	// Text of the message that will be sent. Message text can be up to 1400 characters long and cannot contain only punctuation. Adding _pauses_ between the words and extending the duration of the voice message is possible by using the comma character `“,”`. For example, if you want to have a 3 second pause after each word, then the text parameter should look like this `“one,,,,,,two,,,,,,three,,,,,,”`. Each comma creates a pause of 0.5 seconds. SSML (_Speech Synthesis Markup Language_) is supported and can be used to fully customize pronunciation of the provided text.
+	Text *string
+	// The message validity period shown in minutes. When the period expires, it will not be allowed for the message to be sent. A validity period longer than 48h is not supported (in this case, it will be automatically set to 48h).
+	ValidityPeriod *int32
+	Voice          *Voice
+}
+
+type _AdvancedVoiceMessage AdvancedVoiceMessage
+
+// NewAdvancedVoiceMessage instantiates a new AdvancedVoiceMessage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAdvancedVoiceMessage(destinations []Destination) *AdvancedVoiceMessage {
+	this := AdvancedVoiceMessage{}
+	this.Destinations = destinations
+	return &this
+}
+
+// NewAdvancedVoiceMessageWithDefaults instantiates a new AdvancedVoiceMessage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAdvancedVoiceMessageWithDefaults() *AdvancedVoiceMessage {
+	this := AdvancedVoiceMessage{}
+
+	return &this
+}
+
+// GetAudioFileUrl returns the AudioFileUrl field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetAudioFileUrl() string {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.AudioFileUrl
+}
+
+// GetAudioFileUrlOk returns a tuple with the AudioFileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetAudioFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		return nil, false
+	}
+	return o.AudioFileUrl, true
+}
+
+// HasAudioFileUrl returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasAudioFileUrl() bool {
+	if o != nil && !IsNil(o.AudioFileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetAudioFileUrl gets a reference to the given string and assigns it to the AudioFileUrl field.
+func (o *AdvancedVoiceMessage) SetAudioFileUrl(v string) {
+	o.AudioFileUrl = &v
+}
+
+// GetCallTimeout returns the CallTimeout field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetCallTimeout() int32 {
+	if o == nil || IsNil(o.CallTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.CallTimeout
+}
+
+// GetCallTimeoutOk returns a tuple with the CallTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetCallTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.CallTimeout) {
+		return nil, false
+	}
+	return o.CallTimeout, true
+}
+
+// HasCallTimeout returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasCallTimeout() bool {
+	if o != nil && !IsNil(o.CallTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallTimeout gets a reference to the given int32 and assigns it to the CallTimeout field.
+func (o *AdvancedVoiceMessage) SetCallTimeout(v int32) {
+	o.CallTimeout = &v
+}
+
+// GetCallTransfers returns the CallTransfers field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetCallTransfers() []CallTransfer {
+	if o == nil || IsNil(o.CallTransfers) {
+		var ret []CallTransfer
+		return ret
+	}
+	return o.CallTransfers
+}
+
+// GetCallTransfersOk returns a tuple with the CallTransfers field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetCallTransfersOk() ([]CallTransfer, bool) {
+	if o == nil || IsNil(o.CallTransfers) {
+		return nil, false
+	}
+	return o.CallTransfers, true
+}
+
+// HasCallTransfers returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasCallTransfers() bool {
+	if o != nil && !IsNil(o.CallTransfers) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallTransfers gets a reference to the given []CallTransfer and assigns it to the CallTransfers field.
+func (o *AdvancedVoiceMessage) SetCallTransfers(v []CallTransfer) {
+	o.CallTransfers = v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *AdvancedVoiceMessage) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+// GetDeliveryTimeWindow returns the DeliveryTimeWindow field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetDeliveryTimeWindow() DeliveryTimeWindow {
+	if o == nil || IsNil(o.DeliveryTimeWindow) {
+		var ret DeliveryTimeWindow
+		return ret
+	}
+	return *o.DeliveryTimeWindow
+}
+
+// GetDeliveryTimeWindowOk returns a tuple with the DeliveryTimeWindow field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetDeliveryTimeWindowOk() (*DeliveryTimeWindow, bool) {
+	if o == nil || IsNil(o.DeliveryTimeWindow) {
+		return nil, false
+	}
+	return o.DeliveryTimeWindow, true
+}
+
+// HasDeliveryTimeWindow returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasDeliveryTimeWindow() bool {
+	if o != nil && !IsNil(o.DeliveryTimeWindow) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeliveryTimeWindow gets a reference to the given DeliveryTimeWindow and assigns it to the DeliveryTimeWindow field.
+func (o *AdvancedVoiceMessage) SetDeliveryTimeWindow(v DeliveryTimeWindow) {
+	o.DeliveryTimeWindow = &v
+}
+
+// GetDestinations returns the Destinations field value
+func (o *AdvancedVoiceMessage) GetDestinations() []Destination {
+	if o == nil {
+		var ret []Destination
+		return ret
+	}
+
+	return o.Destinations
+}
+
+// GetDestinationsOk returns a tuple with the Destinations field value
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetDestinationsOk() ([]Destination, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Destinations, true
+}
+
+// SetDestinations sets field value
+func (o *AdvancedVoiceMessage) SetDestinations(v []Destination) {
+	o.Destinations = v
+}
+
+// GetDtmfTimeout returns the DtmfTimeout field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetDtmfTimeout() int32 {
+	if o == nil || IsNil(o.DtmfTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.DtmfTimeout
+}
+
+// GetDtmfTimeoutOk returns a tuple with the DtmfTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetDtmfTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.DtmfTimeout) {
+		return nil, false
+	}
+	return o.DtmfTimeout, true
+}
+
+// HasDtmfTimeout returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasDtmfTimeout() bool {
+	if o != nil && !IsNil(o.DtmfTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmfTimeout gets a reference to the given int32 and assigns it to the DtmfTimeout field.
+func (o *AdvancedVoiceMessage) SetDtmfTimeout(v int32) {
+	o.DtmfTimeout = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *AdvancedVoiceMessage) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetLanguage returns the Language field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetLanguage() string {
+	if o == nil || IsNil(o.Language) {
+		var ret string
+		return ret
+	}
+	return *o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetLanguageOk() (*string, bool) {
+	if o == nil || IsNil(o.Language) {
+		return nil, false
+	}
+	return o.Language, true
+}
+
+// HasLanguage returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasLanguage() bool {
+	if o != nil && !IsNil(o.Language) {
+		return true
+	}
+
+	return false
+}
+
+// SetLanguage gets a reference to the given string and assigns it to the Language field.
+func (o *AdvancedVoiceMessage) SetLanguage(v string) {
+	o.Language = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetMachineDetection() string {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret string
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetMachineDetectionOk() (*string, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given string and assigns it to the MachineDetection field.
+func (o *AdvancedVoiceMessage) SetMachineDetection(v string) {
+	o.MachineDetection = &v
+}
+
+// GetMaxDtmf returns the MaxDtmf field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetMaxDtmf() int32 {
+	if o == nil || IsNil(o.MaxDtmf) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDtmf
+}
+
+// GetMaxDtmfOk returns a tuple with the MaxDtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetMaxDtmfOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDtmf) {
+		return nil, false
+	}
+	return o.MaxDtmf, true
+}
+
+// HasMaxDtmf returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasMaxDtmf() bool {
+	if o != nil && !IsNil(o.MaxDtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDtmf gets a reference to the given int32 and assigns it to the MaxDtmf field.
+func (o *AdvancedVoiceMessage) SetMaxDtmf(v int32) {
+	o.MaxDtmf = &v
+}
+
+// GetNotifyContentType returns the NotifyContentType field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetNotifyContentType() string {
+	if o == nil || IsNil(o.NotifyContentType) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyContentType
+}
+
+// GetNotifyContentTypeOk returns a tuple with the NotifyContentType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetNotifyContentTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyContentType) {
+		return nil, false
+	}
+	return o.NotifyContentType, true
+}
+
+// HasNotifyContentType returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasNotifyContentType() bool {
+	if o != nil && !IsNil(o.NotifyContentType) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyContentType gets a reference to the given string and assigns it to the NotifyContentType field.
+func (o *AdvancedVoiceMessage) SetNotifyContentType(v string) {
+	o.NotifyContentType = &v
+}
+
+// GetNotifyContentVersion returns the NotifyContentVersion field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetNotifyContentVersion() int32 {
+	if o == nil || IsNil(o.NotifyContentVersion) {
+		var ret int32
+		return ret
+	}
+	return *o.NotifyContentVersion
+}
+
+// GetNotifyContentVersionOk returns a tuple with the NotifyContentVersion field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetNotifyContentVersionOk() (*int32, bool) {
+	if o == nil || IsNil(o.NotifyContentVersion) {
+		return nil, false
+	}
+	return o.NotifyContentVersion, true
+}
+
+// HasNotifyContentVersion returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasNotifyContentVersion() bool {
+	if o != nil && !IsNil(o.NotifyContentVersion) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyContentVersion gets a reference to the given int32 and assigns it to the NotifyContentVersion field.
+func (o *AdvancedVoiceMessage) SetNotifyContentVersion(v int32) {
+	o.NotifyContentVersion = &v
+}
+
+// GetNotifyUrl returns the NotifyUrl field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetNotifyUrl() string {
+	if o == nil || IsNil(o.NotifyUrl) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyUrl
+}
+
+// GetNotifyUrlOk returns a tuple with the NotifyUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetNotifyUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyUrl) {
+		return nil, false
+	}
+	return o.NotifyUrl, true
+}
+
+// HasNotifyUrl returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasNotifyUrl() bool {
+	if o != nil && !IsNil(o.NotifyUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyUrl gets a reference to the given string and assigns it to the NotifyUrl field.
+func (o *AdvancedVoiceMessage) SetNotifyUrl(v string) {
+	o.NotifyUrl = &v
+}
+
+// GetPause returns the Pause field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetPause() int32 {
+	if o == nil || IsNil(o.Pause) {
+		var ret int32
+		return ret
+	}
+	return *o.Pause
+}
+
+// GetPauseOk returns a tuple with the Pause field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetPauseOk() (*int32, bool) {
+	if o == nil || IsNil(o.Pause) {
+		return nil, false
+	}
+	return o.Pause, true
+}
+
+// HasPause returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasPause() bool {
+	if o != nil && !IsNil(o.Pause) {
+		return true
+	}
+
+	return false
+}
+
+// SetPause gets a reference to the given int32 and assigns it to the Pause field.
+func (o *AdvancedVoiceMessage) SetPause(v int32) {
+	o.Pause = &v
+}
+
+// GetRepeatDtmf returns the RepeatDtmf field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetRepeatDtmf() string {
+	if o == nil || IsNil(o.RepeatDtmf) {
+		var ret string
+		return ret
+	}
+	return *o.RepeatDtmf
+}
+
+// GetRepeatDtmfOk returns a tuple with the RepeatDtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetRepeatDtmfOk() (*string, bool) {
+	if o == nil || IsNil(o.RepeatDtmf) {
+		return nil, false
+	}
+	return o.RepeatDtmf, true
+}
+
+// HasRepeatDtmf returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasRepeatDtmf() bool {
+	if o != nil && !IsNil(o.RepeatDtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetRepeatDtmf gets a reference to the given string and assigns it to the RepeatDtmf field.
+func (o *AdvancedVoiceMessage) SetRepeatDtmf(v string) {
+	o.RepeatDtmf = &v
+}
+
+// GetRetry returns the Retry field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetRetry() Retry {
+	if o == nil || IsNil(o.Retry) {
+		var ret Retry
+		return ret
+	}
+	return *o.Retry
+}
+
+// GetRetryOk returns a tuple with the Retry field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetRetryOk() (*Retry, bool) {
+	if o == nil || IsNil(o.Retry) {
+		return nil, false
+	}
+	return o.Retry, true
+}
+
+// HasRetry returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasRetry() bool {
+	if o != nil && !IsNil(o.Retry) {
+		return true
+	}
+
+	return false
+}
+
+// SetRetry gets a reference to the given Retry and assigns it to the Retry field.
+func (o *AdvancedVoiceMessage) SetRetry(v Retry) {
+	o.Retry = &v
+}
+
+// GetRingTimeout returns the RingTimeout field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetRingTimeout() int32 {
+	if o == nil || IsNil(o.RingTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.RingTimeout
+}
+
+// GetRingTimeoutOk returns a tuple with the RingTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetRingTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.RingTimeout) {
+		return nil, false
+	}
+	return o.RingTimeout, true
+}
+
+// HasRingTimeout returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasRingTimeout() bool {
+	if o != nil && !IsNil(o.RingTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingTimeout gets a reference to the given int32 and assigns it to the RingTimeout field.
+func (o *AdvancedVoiceMessage) SetRingTimeout(v int32) {
+	o.RingTimeout = &v
+}
+
+// GetSendAt returns the SendAt field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetSendAt() Time {
+	if o == nil || IsNil(o.SendAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetSendAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SendAt) {
+		return nil, false
+	}
+	return o.SendAt, true
+}
+
+// HasSendAt returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasSendAt() bool {
+	if o != nil && !IsNil(o.SendAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendAt gets a reference to the given Time and assigns it to the SendAt field.
+func (o *AdvancedVoiceMessage) SetSendAt(v Time) {
+	o.SendAt = &v
+}
+
+// GetSendingSpeed returns the SendingSpeed field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetSendingSpeed() SendingSpeed {
+	if o == nil || IsNil(o.SendingSpeed) {
+		var ret SendingSpeed
+		return ret
+	}
+	return *o.SendingSpeed
+}
+
+// GetSendingSpeedOk returns a tuple with the SendingSpeed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetSendingSpeedOk() (*SendingSpeed, bool) {
+	if o == nil || IsNil(o.SendingSpeed) {
+		return nil, false
+	}
+	return o.SendingSpeed, true
+}
+
+// HasSendingSpeed returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasSendingSpeed() bool {
+	if o != nil && !IsNil(o.SendingSpeed) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendingSpeed gets a reference to the given SendingSpeed and assigns it to the SendingSpeed field.
+func (o *AdvancedVoiceMessage) SetSendingSpeed(v SendingSpeed) {
+	o.SendingSpeed = &v
+}
+
+// GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetSpeechRate() float64 {
+	if o == nil || IsNil(o.SpeechRate) {
+		var ret float64
+		return ret
+	}
+	return *o.SpeechRate
+}
+
+// GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetSpeechRateOk() (*float64, bool) {
+	if o == nil || IsNil(o.SpeechRate) {
+		return nil, false
+	}
+	return o.SpeechRate, true
+}
+
+// HasSpeechRate returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasSpeechRate() bool {
+	if o != nil && !IsNil(o.SpeechRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
+func (o *AdvancedVoiceMessage) SetSpeechRate(v float64) {
+	o.SpeechRate = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *AdvancedVoiceMessage) SetText(v string) {
+	o.Text = &v
+}
+
+// GetValidityPeriod returns the ValidityPeriod field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetValidityPeriod() int32 {
+	if o == nil || IsNil(o.ValidityPeriod) {
+		var ret int32
+		return ret
+	}
+	return *o.ValidityPeriod
+}
+
+// GetValidityPeriodOk returns a tuple with the ValidityPeriod field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetValidityPeriodOk() (*int32, bool) {
+	if o == nil || IsNil(o.ValidityPeriod) {
+		return nil, false
+	}
+	return o.ValidityPeriod, true
+}
+
+// HasValidityPeriod returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasValidityPeriod() bool {
+	if o != nil && !IsNil(o.ValidityPeriod) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidityPeriod gets a reference to the given int32 and assigns it to the ValidityPeriod field.
+func (o *AdvancedVoiceMessage) SetValidityPeriod(v int32) {
+	o.ValidityPeriod = &v
+}
+
+// GetVoice returns the Voice field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessage) GetVoice() Voice {
+	if o == nil || IsNil(o.Voice) {
+		var ret Voice
+		return ret
+	}
+	return *o.Voice
+}
+
+// GetVoiceOk returns a tuple with the Voice field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessage) GetVoiceOk() (*Voice, bool) {
+	if o == nil || IsNil(o.Voice) {
+		return nil, false
+	}
+	return o.Voice, true
+}
+
+// HasVoice returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessage) HasVoice() bool {
+	if o != nil && !IsNil(o.Voice) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoice gets a reference to the given Voice and assigns it to the Voice field.
+func (o *AdvancedVoiceMessage) SetVoice(v Voice) {
+	o.Voice = &v
+}
+
+func (o AdvancedVoiceMessage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AdvancedVoiceMessage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.AudioFileUrl) {
+		toSerialize["audioFileUrl"] = o.AudioFileUrl
+	}
+	if !IsNil(o.CallTimeout) {
+		toSerialize["callTimeout"] = o.CallTimeout
+	}
+	if !IsNil(o.CallTransfers) {
+		toSerialize["callTransfers"] = o.CallTransfers
+	}
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	if !IsNil(o.DeliveryTimeWindow) {
+		toSerialize["deliveryTimeWindow"] = o.DeliveryTimeWindow
+	}
+	toSerialize["destinations"] = o.Destinations
+	if !IsNil(o.DtmfTimeout) {
+		toSerialize["dtmfTimeout"] = o.DtmfTimeout
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.Language) {
+		toSerialize["language"] = o.Language
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.MaxDtmf) {
+		toSerialize["maxDtmf"] = o.MaxDtmf
+	}
+	if !IsNil(o.NotifyContentType) {
+		toSerialize["notifyContentType"] = o.NotifyContentType
+	}
+	if !IsNil(o.NotifyContentVersion) {
+		toSerialize["notifyContentVersion"] = o.NotifyContentVersion
+	}
+	if !IsNil(o.NotifyUrl) {
+		toSerialize["notifyUrl"] = o.NotifyUrl
+	}
+	if !IsNil(o.Pause) {
+		toSerialize["pause"] = o.Pause
+	}
+	if !IsNil(o.RepeatDtmf) {
+		toSerialize["repeatDtmf"] = o.RepeatDtmf
+	}
+	if !IsNil(o.Retry) {
+		toSerialize["retry"] = o.Retry
+	}
+	if !IsNil(o.RingTimeout) {
+		toSerialize["ringTimeout"] = o.RingTimeout
+	}
+	if !IsNil(o.SendAt) {
+		toSerialize["sendAt"] = o.SendAt
+	}
+	if !IsNil(o.SendingSpeed) {
+		toSerialize["sendingSpeed"] = o.SendingSpeed
+	}
+	if !IsNil(o.SpeechRate) {
+		toSerialize["speechRate"] = o.SpeechRate
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.ValidityPeriod) {
+		toSerialize["validityPeriod"] = o.ValidityPeriod
+	}
+	if !IsNil(o.Voice) {
+		toSerialize["voice"] = o.Voice
+	}
+	return toSerialize, nil
+}
+
+type NullableAdvancedVoiceMessage struct {
+	value *AdvancedVoiceMessage
+	isSet bool
+}
+
+func (v NullableAdvancedVoiceMessage) Get() *AdvancedVoiceMessage {
+	return v.value
+}
+
+func (v *NullableAdvancedVoiceMessage) Set(val *AdvancedVoiceMessage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAdvancedVoiceMessage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAdvancedVoiceMessage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAdvancedVoiceMessage(val *AdvancedVoiceMessage) *NullableAdvancedVoiceMessage {
+	return &NullableAdvancedVoiceMessage{value: val, isSet: true}
+}
+
+func (v NullableAdvancedVoiceMessage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAdvancedVoiceMessage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/advanced_voice_message_request.go b/pkg/infobip/models/voice/advanced_voice_message_request.go
new file mode 100644
index 0000000..7c8f88e
--- /dev/null
+++ b/pkg/infobip/models/voice/advanced_voice_message_request.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AdvancedVoiceMessageRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AdvancedVoiceMessageRequest{}
+
+// AdvancedVoiceMessageRequest struct for AdvancedVoiceMessageRequest
+type AdvancedVoiceMessageRequest struct {
+	// The ID which uniquely identifies the request.
+	BulkId *string
+	// Array of messages to be sent, one object per every message
+	Messages []AdvancedVoiceMessage
+}
+
+type _AdvancedVoiceMessageRequest AdvancedVoiceMessageRequest
+
+// NewAdvancedVoiceMessageRequest instantiates a new AdvancedVoiceMessageRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAdvancedVoiceMessageRequest(messages []AdvancedVoiceMessage) *AdvancedVoiceMessageRequest {
+	this := AdvancedVoiceMessageRequest{}
+	this.Messages = messages
+	return &this
+}
+
+// NewAdvancedVoiceMessageRequestWithDefaults instantiates a new AdvancedVoiceMessageRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAdvancedVoiceMessageRequestWithDefaults() *AdvancedVoiceMessageRequest {
+	this := AdvancedVoiceMessageRequest{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *AdvancedVoiceMessageRequest) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessageRequest) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *AdvancedVoiceMessageRequest) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *AdvancedVoiceMessageRequest) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessages returns the Messages field value
+func (o *AdvancedVoiceMessageRequest) GetMessages() []AdvancedVoiceMessage {
+	if o == nil {
+		var ret []AdvancedVoiceMessage
+		return ret
+	}
+
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value
+// and a boolean to check if the value has been set.
+func (o *AdvancedVoiceMessageRequest) GetMessagesOk() ([]AdvancedVoiceMessage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// SetMessages sets field value
+func (o *AdvancedVoiceMessageRequest) SetMessages(v []AdvancedVoiceMessage) {
+	o.Messages = v
+}
+
+func (o AdvancedVoiceMessageRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AdvancedVoiceMessageRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	toSerialize["messages"] = o.Messages
+	return toSerialize, nil
+}
+
+type NullableAdvancedVoiceMessageRequest struct {
+	value *AdvancedVoiceMessageRequest
+	isSet bool
+}
+
+func (v NullableAdvancedVoiceMessageRequest) Get() *AdvancedVoiceMessageRequest {
+	return v.value
+}
+
+func (v *NullableAdvancedVoiceMessageRequest) Set(val *AdvancedVoiceMessageRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAdvancedVoiceMessageRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAdvancedVoiceMessageRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAdvancedVoiceMessageRequest(val *AdvancedVoiceMessageRequest) *NullableAdvancedVoiceMessageRequest {
+	return &NullableAdvancedVoiceMessageRequest{value: val, isSet: true}
+}
+
+func (v NullableAdvancedVoiceMessageRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAdvancedVoiceMessageRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/announcement_callee.go b/pkg/infobip/models/voice/announcement_callee.go
new file mode 100644
index 0000000..c9932e1
--- /dev/null
+++ b/pkg/infobip/models/voice/announcement_callee.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AnnouncementCallee type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AnnouncementCallee{}
+
+// AnnouncementCallee Announcement to be played to a callee before connecting them to a caller.
+type AnnouncementCallee struct {
+	// ID of an audio file played to a callee. Required if `fileUrl` is not provided.
+	FileId *string
+	// URL of an audio file played to a callee. Required if `fileId` is not provided.
+	FileUrl *string
+}
+
+// NewAnnouncementCallee instantiates a new AnnouncementCallee object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAnnouncementCallee() *AnnouncementCallee {
+	this := AnnouncementCallee{}
+	return &this
+}
+
+// NewAnnouncementCalleeWithDefaults instantiates a new AnnouncementCallee object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAnnouncementCalleeWithDefaults() *AnnouncementCallee {
+	this := AnnouncementCallee{}
+
+	return &this
+}
+
+// GetFileId returns the FileId field value if set, zero value otherwise.
+func (o *AnnouncementCallee) GetFileId() string {
+	if o == nil || IsNil(o.FileId) {
+		var ret string
+		return ret
+	}
+	return *o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AnnouncementCallee) GetFileIdOk() (*string, bool) {
+	if o == nil || IsNil(o.FileId) {
+		return nil, false
+	}
+	return o.FileId, true
+}
+
+// HasFileId returns a boolean if a field has been set.
+func (o *AnnouncementCallee) HasFileId() bool {
+	if o != nil && !IsNil(o.FileId) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileId gets a reference to the given string and assigns it to the FileId field.
+func (o *AnnouncementCallee) SetFileId(v string) {
+	o.FileId = &v
+}
+
+// GetFileUrl returns the FileUrl field value if set, zero value otherwise.
+func (o *AnnouncementCallee) GetFileUrl() string {
+	if o == nil || IsNil(o.FileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.FileUrl
+}
+
+// GetFileUrlOk returns a tuple with the FileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AnnouncementCallee) GetFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.FileUrl) {
+		return nil, false
+	}
+	return o.FileUrl, true
+}
+
+// HasFileUrl returns a boolean if a field has been set.
+func (o *AnnouncementCallee) HasFileUrl() bool {
+	if o != nil && !IsNil(o.FileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileUrl gets a reference to the given string and assigns it to the FileUrl field.
+func (o *AnnouncementCallee) SetFileUrl(v string) {
+	o.FileUrl = &v
+}
+
+func (o AnnouncementCallee) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AnnouncementCallee) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.FileId) {
+		toSerialize["fileId"] = o.FileId
+	}
+	if !IsNil(o.FileUrl) {
+		toSerialize["fileUrl"] = o.FileUrl
+	}
+	return toSerialize, nil
+}
+
+type NullableAnnouncementCallee struct {
+	value *AnnouncementCallee
+	isSet bool
+}
+
+func (v NullableAnnouncementCallee) Get() *AnnouncementCallee {
+	return v.value
+}
+
+func (v *NullableAnnouncementCallee) Set(val *AnnouncementCallee) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAnnouncementCallee) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAnnouncementCallee) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAnnouncementCallee(val *AnnouncementCallee) *NullableAnnouncementCallee {
+	return &NullableAnnouncementCallee{value: val, isSet: true}
+}
+
+func (v NullableAnnouncementCallee) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAnnouncementCallee) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/announcement_caller.go b/pkg/infobip/models/voice/announcement_caller.go
new file mode 100644
index 0000000..9aa98c0
--- /dev/null
+++ b/pkg/infobip/models/voice/announcement_caller.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AnnouncementCaller type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AnnouncementCaller{}
+
+// AnnouncementCaller Announcement to be played to a caller before they dial in to the callee.
+type AnnouncementCaller struct {
+	// ID of an audio file to be played to a caller. Required if `fileUrl` is not provided.
+	FileId *string
+	// URL of a file played to a caller. Required if `fileId` is not provided.
+	FileUrl *string
+}
+
+// NewAnnouncementCaller instantiates a new AnnouncementCaller object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAnnouncementCaller() *AnnouncementCaller {
+	this := AnnouncementCaller{}
+	return &this
+}
+
+// NewAnnouncementCallerWithDefaults instantiates a new AnnouncementCaller object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAnnouncementCallerWithDefaults() *AnnouncementCaller {
+	this := AnnouncementCaller{}
+
+	return &this
+}
+
+// GetFileId returns the FileId field value if set, zero value otherwise.
+func (o *AnnouncementCaller) GetFileId() string {
+	if o == nil || IsNil(o.FileId) {
+		var ret string
+		return ret
+	}
+	return *o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AnnouncementCaller) GetFileIdOk() (*string, bool) {
+	if o == nil || IsNil(o.FileId) {
+		return nil, false
+	}
+	return o.FileId, true
+}
+
+// HasFileId returns a boolean if a field has been set.
+func (o *AnnouncementCaller) HasFileId() bool {
+	if o != nil && !IsNil(o.FileId) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileId gets a reference to the given string and assigns it to the FileId field.
+func (o *AnnouncementCaller) SetFileId(v string) {
+	o.FileId = &v
+}
+
+// GetFileUrl returns the FileUrl field value if set, zero value otherwise.
+func (o *AnnouncementCaller) GetFileUrl() string {
+	if o == nil || IsNil(o.FileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.FileUrl
+}
+
+// GetFileUrlOk returns a tuple with the FileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AnnouncementCaller) GetFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.FileUrl) {
+		return nil, false
+	}
+	return o.FileUrl, true
+}
+
+// HasFileUrl returns a boolean if a field has been set.
+func (o *AnnouncementCaller) HasFileUrl() bool {
+	if o != nil && !IsNil(o.FileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileUrl gets a reference to the given string and assigns it to the FileUrl field.
+func (o *AnnouncementCaller) SetFileUrl(v string) {
+	o.FileUrl = &v
+}
+
+func (o AnnouncementCaller) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AnnouncementCaller) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.FileId) {
+		toSerialize["fileId"] = o.FileId
+	}
+	if !IsNil(o.FileUrl) {
+		toSerialize["fileUrl"] = o.FileUrl
+	}
+	return toSerialize, nil
+}
+
+type NullableAnnouncementCaller struct {
+	value *AnnouncementCaller
+	isSet bool
+}
+
+func (v NullableAnnouncementCaller) Get() *AnnouncementCaller {
+	return v.value
+}
+
+func (v *NullableAnnouncementCaller) Set(val *AnnouncementCaller) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAnnouncementCaller) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAnnouncementCaller) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAnnouncementCaller(val *AnnouncementCaller) *NullableAnnouncementCaller {
+	return &NullableAnnouncementCaller{value: val, isSet: true}
+}
+
+func (v NullableAnnouncementCaller) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAnnouncementCaller) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/announcements.go b/pkg/infobip/models/voice/announcements.go
new file mode 100644
index 0000000..f123764
--- /dev/null
+++ b/pkg/infobip/models/voice/announcements.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Announcements type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Announcements{}
+
+// Announcements Announcements to be played when a call is answered.
+type Announcements struct {
+	Caller *AnnouncementCaller
+	Callee *AnnouncementCallee
+}
+
+// NewAnnouncements instantiates a new Announcements object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAnnouncements() *Announcements {
+	this := Announcements{}
+	return &this
+}
+
+// NewAnnouncementsWithDefaults instantiates a new Announcements object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAnnouncementsWithDefaults() *Announcements {
+	this := Announcements{}
+
+	return &this
+}
+
+// GetCaller returns the Caller field value if set, zero value otherwise.
+func (o *Announcements) GetCaller() AnnouncementCaller {
+	if o == nil || IsNil(o.Caller) {
+		var ret AnnouncementCaller
+		return ret
+	}
+	return *o.Caller
+}
+
+// GetCallerOk returns a tuple with the Caller field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Announcements) GetCallerOk() (*AnnouncementCaller, bool) {
+	if o == nil || IsNil(o.Caller) {
+		return nil, false
+	}
+	return o.Caller, true
+}
+
+// HasCaller returns a boolean if a field has been set.
+func (o *Announcements) HasCaller() bool {
+	if o != nil && !IsNil(o.Caller) {
+		return true
+	}
+
+	return false
+}
+
+// SetCaller gets a reference to the given AnnouncementCaller and assigns it to the Caller field.
+func (o *Announcements) SetCaller(v AnnouncementCaller) {
+	o.Caller = &v
+}
+
+// GetCallee returns the Callee field value if set, zero value otherwise.
+func (o *Announcements) GetCallee() AnnouncementCallee {
+	if o == nil || IsNil(o.Callee) {
+		var ret AnnouncementCallee
+		return ret
+	}
+	return *o.Callee
+}
+
+// GetCalleeOk returns a tuple with the Callee field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Announcements) GetCalleeOk() (*AnnouncementCallee, bool) {
+	if o == nil || IsNil(o.Callee) {
+		return nil, false
+	}
+	return o.Callee, true
+}
+
+// HasCallee returns a boolean if a field has been set.
+func (o *Announcements) HasCallee() bool {
+	if o != nil && !IsNil(o.Callee) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallee gets a reference to the given AnnouncementCallee and assigns it to the Callee field.
+func (o *Announcements) SetCallee(v AnnouncementCallee) {
+	o.Callee = &v
+}
+
+func (o Announcements) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Announcements) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Caller) {
+		toSerialize["caller"] = o.Caller
+	}
+	if !IsNil(o.Callee) {
+		toSerialize["callee"] = o.Callee
+	}
+	return toSerialize, nil
+}
+
+type NullableAnnouncements struct {
+	value *Announcements
+	isSet bool
+}
+
+func (v NullableAnnouncements) Get() *Announcements {
+	return v.value
+}
+
+func (v *NullableAnnouncements) Set(val *Announcements) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAnnouncements) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAnnouncements) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAnnouncements(val *Announcements) *NullableAnnouncements {
+	return &NullableAnnouncements{value: val, isSet: true}
+}
+
+func (v NullableAnnouncements) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAnnouncements) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/anonymization_type.go b/pkg/infobip/models/voice/anonymization_type.go
new file mode 100644
index 0000000..34defde
--- /dev/null
+++ b/pkg/infobip/models/voice/anonymization_type.go
@@ -0,0 +1,114 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// AnonymizationType Preferred presentation of anonymized calls.
+type AnonymizationType string
+
+// List of AnonymizationType
+const (
+	ANONYMIZATIONTYPE_NONE               AnonymizationType = "NONE"
+	ANONYMIZATIONTYPE_REMOTE_PARTY_ID    AnonymizationType = "REMOTE_PARTY_ID"
+	ANONYMIZATIONTYPE_ASSERTED_IDENTITY  AnonymizationType = "ASSERTED_IDENTITY"
+	ANONYMIZATIONTYPE_PREFERRED_IDENTITY AnonymizationType = "PREFERRED_IDENTITY"
+)
+
+// All allowed values of AnonymizationType enum
+var AllowedAnonymizationTypeEnumValues = []AnonymizationType{
+	"NONE",
+	"REMOTE_PARTY_ID",
+	"ASSERTED_IDENTITY",
+	"PREFERRED_IDENTITY",
+}
+
+func (v *AnonymizationType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := AnonymizationType(value)
+	for _, existing := range AllowedAnonymizationTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid AnonymizationType", value)
+}
+
+// NewAnonymizationTypeFromValue returns a pointer to a valid AnonymizationType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewAnonymizationTypeFromValue(v string) (*AnonymizationType, error) {
+	ev := AnonymizationType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for AnonymizationType: valid values are %v", v, AllowedAnonymizationTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v AnonymizationType) IsValid() bool {
+	for _, existing := range AllowedAnonymizationTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to AnonymizationType value
+func (v AnonymizationType) Ptr() *AnonymizationType {
+	return &v
+}
+
+type NullableAnonymizationType struct {
+	value *AnonymizationType
+	isSet bool
+}
+
+func (v NullableAnonymizationType) Get() *AnonymizationType {
+	return v.value
+}
+
+func (v *NullableAnonymizationType) Set(val *AnonymizationType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAnonymizationType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAnonymizationType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAnonymizationType(val *AnonymizationType) *NullableAnonymizationType {
+	return &NullableAnonymizationType{value: val, isSet: true}
+}
+
+func (v NullableAnonymizationType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAnonymizationType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/answer_request.go b/pkg/infobip/models/voice/answer_request.go
new file mode 100644
index 0000000..056f845
--- /dev/null
+++ b/pkg/infobip/models/voice/answer_request.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AnswerRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AnswerRequest{}
+
+// AnswerRequest struct for AnswerRequest
+type AnswerRequest struct {
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+	Recording  *CallRecordingRequest
+}
+
+// NewAnswerRequest instantiates a new AnswerRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAnswerRequest() *AnswerRequest {
+	this := AnswerRequest{}
+	return &this
+}
+
+// NewAnswerRequestWithDefaults instantiates a new AnswerRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAnswerRequestWithDefaults() *AnswerRequest {
+	this := AnswerRequest{}
+
+	return &this
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *AnswerRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AnswerRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *AnswerRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *AnswerRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *AnswerRequest) GetRecording() CallRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AnswerRequest) GetRecordingOk() (*CallRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *AnswerRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallRecordingRequest and assigns it to the Recording field.
+func (o *AnswerRequest) SetRecording(v CallRecordingRequest) {
+	o.Recording = &v
+}
+
+func (o AnswerRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AnswerRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	return toSerialize, nil
+}
+
+type NullableAnswerRequest struct {
+	value *AnswerRequest
+	isSet bool
+}
+
+func (v NullableAnswerRequest) Get() *AnswerRequest {
+	return v.value
+}
+
+func (v *NullableAnswerRequest) Set(val *AnswerRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAnswerRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAnswerRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAnswerRequest(val *AnswerRequest) *NullableAnswerRequest {
+	return &NullableAnswerRequest{value: val, isSet: true}
+}
+
+func (v NullableAnswerRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAnswerRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/api_exception.go b/pkg/infobip/models/voice/api_exception.go
new file mode 100644
index 0000000..7d0ae7b
--- /dev/null
+++ b/pkg/infobip/models/voice/api_exception.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiException type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiException{}
+
+// ApiException struct for ApiException
+type ApiException struct {
+	RequestError *ApiRequestError
+}
+
+// NewApiException instantiates a new ApiException object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiException() *ApiException {
+	this := ApiException{}
+	return &this
+}
+
+// NewApiExceptionWithDefaults instantiates a new ApiException object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiExceptionWithDefaults() *ApiException {
+	this := ApiException{}
+
+	return &this
+}
+
+// GetRequestError returns the RequestError field value if set, zero value otherwise.
+func (o *ApiException) GetRequestError() ApiRequestError {
+	if o == nil || IsNil(o.RequestError) {
+		var ret ApiRequestError
+		return ret
+	}
+	return *o.RequestError
+}
+
+// GetRequestErrorOk returns a tuple with the RequestError field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiException) GetRequestErrorOk() (*ApiRequestError, bool) {
+	if o == nil || IsNil(o.RequestError) {
+		return nil, false
+	}
+	return o.RequestError, true
+}
+
+// HasRequestError returns a boolean if a field has been set.
+func (o *ApiException) HasRequestError() bool {
+	if o != nil && !IsNil(o.RequestError) {
+		return true
+	}
+
+	return false
+}
+
+// SetRequestError gets a reference to the given ApiRequestError and assigns it to the RequestError field.
+func (o *ApiException) SetRequestError(v ApiRequestError) {
+	o.RequestError = &v
+}
+
+func (o ApiException) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiException) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.RequestError) {
+		toSerialize["requestError"] = o.RequestError
+	}
+	return toSerialize, nil
+}
+
+type NullableApiException struct {
+	value *ApiException
+	isSet bool
+}
+
+func (v NullableApiException) Get() *ApiException {
+	return v.value
+}
+
+func (v *NullableApiException) Set(val *ApiException) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiException) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiException) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiException(val *ApiException) *NullableApiException {
+	return &NullableApiException{value: val, isSet: true}
+}
+
+func (v NullableApiException) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiException) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/api_request_error.go b/pkg/infobip/models/voice/api_request_error.go
new file mode 100644
index 0000000..f4e39fb
--- /dev/null
+++ b/pkg/infobip/models/voice/api_request_error.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiRequestError type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiRequestError{}
+
+// ApiRequestError struct for ApiRequestError
+type ApiRequestError struct {
+	ServiceException *ApiRequestErrorDetails
+}
+
+// NewApiRequestError instantiates a new ApiRequestError object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiRequestError() *ApiRequestError {
+	this := ApiRequestError{}
+	return &this
+}
+
+// NewApiRequestErrorWithDefaults instantiates a new ApiRequestError object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiRequestErrorWithDefaults() *ApiRequestError {
+	this := ApiRequestError{}
+
+	return &this
+}
+
+// GetServiceException returns the ServiceException field value if set, zero value otherwise.
+func (o *ApiRequestError) GetServiceException() ApiRequestErrorDetails {
+	if o == nil || IsNil(o.ServiceException) {
+		var ret ApiRequestErrorDetails
+		return ret
+	}
+	return *o.ServiceException
+}
+
+// GetServiceExceptionOk returns a tuple with the ServiceException field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestError) GetServiceExceptionOk() (*ApiRequestErrorDetails, bool) {
+	if o == nil || IsNil(o.ServiceException) {
+		return nil, false
+	}
+	return o.ServiceException, true
+}
+
+// HasServiceException returns a boolean if a field has been set.
+func (o *ApiRequestError) HasServiceException() bool {
+	if o != nil && !IsNil(o.ServiceException) {
+		return true
+	}
+
+	return false
+}
+
+// SetServiceException gets a reference to the given ApiRequestErrorDetails and assigns it to the ServiceException field.
+func (o *ApiRequestError) SetServiceException(v ApiRequestErrorDetails) {
+	o.ServiceException = &v
+}
+
+func (o ApiRequestError) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiRequestError) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ServiceException) {
+		toSerialize["serviceException"] = o.ServiceException
+	}
+	return toSerialize, nil
+}
+
+type NullableApiRequestError struct {
+	value *ApiRequestError
+	isSet bool
+}
+
+func (v NullableApiRequestError) Get() *ApiRequestError {
+	return v.value
+}
+
+func (v *NullableApiRequestError) Set(val *ApiRequestError) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiRequestError) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiRequestError) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiRequestError(val *ApiRequestError) *NullableApiRequestError {
+	return &NullableApiRequestError{value: val, isSet: true}
+}
+
+func (v NullableApiRequestError) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiRequestError) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/api_request_error_details.go b/pkg/infobip/models/voice/api_request_error_details.go
new file mode 100644
index 0000000..8a3097b
--- /dev/null
+++ b/pkg/infobip/models/voice/api_request_error_details.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApiRequestErrorDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApiRequestErrorDetails{}
+
+// ApiRequestErrorDetails struct for ApiRequestErrorDetails
+type ApiRequestErrorDetails struct {
+	// Identifier of the error.
+	MessageId *string
+	// Detailed error description.
+	Text *string
+	// Validation errors.
+	ValidationErrors *map[string][]string
+}
+
+// NewApiRequestErrorDetails instantiates a new ApiRequestErrorDetails object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApiRequestErrorDetails() *ApiRequestErrorDetails {
+	this := ApiRequestErrorDetails{}
+	return &this
+}
+
+// NewApiRequestErrorDetailsWithDefaults instantiates a new ApiRequestErrorDetails object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApiRequestErrorDetailsWithDefaults() *ApiRequestErrorDetails {
+	this := ApiRequestErrorDetails{}
+
+	return &this
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *ApiRequestErrorDetails) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *ApiRequestErrorDetails) SetText(v string) {
+	o.Text = &v
+}
+
+// GetValidationErrors returns the ValidationErrors field value if set, zero value otherwise.
+func (o *ApiRequestErrorDetails) GetValidationErrors() map[string][]string {
+	if o == nil || IsNil(o.ValidationErrors) {
+		var ret map[string][]string
+		return ret
+	}
+	return *o.ValidationErrors
+}
+
+// GetValidationErrorsOk returns a tuple with the ValidationErrors field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApiRequestErrorDetails) GetValidationErrorsOk() (*map[string][]string, bool) {
+	if o == nil || IsNil(o.ValidationErrors) {
+		return nil, false
+	}
+	return o.ValidationErrors, true
+}
+
+// HasValidationErrors returns a boolean if a field has been set.
+func (o *ApiRequestErrorDetails) HasValidationErrors() bool {
+	if o != nil && !IsNil(o.ValidationErrors) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidationErrors gets a reference to the given map[string][]string and assigns it to the ValidationErrors field.
+func (o *ApiRequestErrorDetails) SetValidationErrors(v map[string][]string) {
+	o.ValidationErrors = &v
+}
+
+func (o ApiRequestErrorDetails) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApiRequestErrorDetails) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.ValidationErrors) {
+		toSerialize["validationErrors"] = o.ValidationErrors
+	}
+	return toSerialize, nil
+}
+
+type NullableApiRequestErrorDetails struct {
+	value *ApiRequestErrorDetails
+	isSet bool
+}
+
+func (v NullableApiRequestErrorDetails) Get() *ApiRequestErrorDetails {
+	return v.value
+}
+
+func (v *NullableApiRequestErrorDetails) Set(val *ApiRequestErrorDetails) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApiRequestErrorDetails) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApiRequestErrorDetails) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApiRequestErrorDetails(val *ApiRequestErrorDetails) *NullableApiRequestErrorDetails {
+	return &NullableApiRequestErrorDetails{value: val, isSet: true}
+}
+
+func (v NullableApiRequestErrorDetails) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApiRequestErrorDetails) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/application_transfer_request.go b/pkg/infobip/models/voice/application_transfer_request.go
new file mode 100644
index 0000000..5700869
--- /dev/null
+++ b/pkg/infobip/models/voice/application_transfer_request.go
@@ -0,0 +1,236 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ApplicationTransferRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ApplicationTransferRequest{}
+
+// ApplicationTransferRequest struct for ApplicationTransferRequest
+type ApplicationTransferRequest struct {
+	// ID of the calls configuration to which the call is to be transferred.
+	DestinationCallsConfigurationId string
+	Platform                        *Platform
+	// Time to wait, in seconds, for the receiving application to accept the transfer.
+	Timeout *int32
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+}
+
+type _ApplicationTransferRequest ApplicationTransferRequest
+
+// NewApplicationTransferRequest instantiates a new ApplicationTransferRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewApplicationTransferRequest(destinationCallsConfigurationId string) *ApplicationTransferRequest {
+	this := ApplicationTransferRequest{}
+	this.DestinationCallsConfigurationId = destinationCallsConfigurationId
+	var timeout int32 = 30
+	this.Timeout = &timeout
+	return &this
+}
+
+// NewApplicationTransferRequestWithDefaults instantiates a new ApplicationTransferRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewApplicationTransferRequestWithDefaults() *ApplicationTransferRequest {
+	this := ApplicationTransferRequest{}
+
+	var timeout int32 = 30
+	this.Timeout = &timeout
+	return &this
+}
+
+// GetDestinationCallsConfigurationId returns the DestinationCallsConfigurationId field value
+func (o *ApplicationTransferRequest) GetDestinationCallsConfigurationId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DestinationCallsConfigurationId
+}
+
+// GetDestinationCallsConfigurationIdOk returns a tuple with the DestinationCallsConfigurationId field value
+// and a boolean to check if the value has been set.
+func (o *ApplicationTransferRequest) GetDestinationCallsConfigurationIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DestinationCallsConfigurationId, true
+}
+
+// SetDestinationCallsConfigurationId sets field value
+func (o *ApplicationTransferRequest) SetDestinationCallsConfigurationId(v string) {
+	o.DestinationCallsConfigurationId = v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *ApplicationTransferRequest) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApplicationTransferRequest) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *ApplicationTransferRequest) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *ApplicationTransferRequest) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetTimeout returns the Timeout field value if set, zero value otherwise.
+func (o *ApplicationTransferRequest) GetTimeout() int32 {
+	if o == nil || IsNil(o.Timeout) {
+		var ret int32
+		return ret
+	}
+	return *o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApplicationTransferRequest) GetTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.Timeout) {
+		return nil, false
+	}
+	return o.Timeout, true
+}
+
+// HasTimeout returns a boolean if a field has been set.
+func (o *ApplicationTransferRequest) HasTimeout() bool {
+	if o != nil && !IsNil(o.Timeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetTimeout gets a reference to the given int32 and assigns it to the Timeout field.
+func (o *ApplicationTransferRequest) SetTimeout(v int32) {
+	o.Timeout = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *ApplicationTransferRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ApplicationTransferRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *ApplicationTransferRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *ApplicationTransferRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o ApplicationTransferRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ApplicationTransferRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["destinationCallsConfigurationId"] = o.DestinationCallsConfigurationId
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.Timeout) {
+		toSerialize["timeout"] = o.Timeout
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableApplicationTransferRequest struct {
+	value *ApplicationTransferRequest
+	isSet bool
+}
+
+func (v NullableApplicationTransferRequest) Get() *ApplicationTransferRequest {
+	return v.value
+}
+
+func (v *NullableApplicationTransferRequest) Set(val *ApplicationTransferRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableApplicationTransferRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableApplicationTransferRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableApplicationTransferRequest(val *ApplicationTransferRequest) *NullableApplicationTransferRequest {
+	return &NullableApplicationTransferRequest{value: val, isSet: true}
+}
+
+func (v NullableApplicationTransferRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableApplicationTransferRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/audio_callback_response.go b/pkg/infobip/models/voice/audio_callback_response.go
new file mode 100644
index 0000000..ee77e43
--- /dev/null
+++ b/pkg/infobip/models/voice/audio_callback_response.go
@@ -0,0 +1,194 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AudioCallbackResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AudioCallbackResponse{}
+
+// AudioCallbackResponse struct for AudioCallbackResponse
+type AudioCallbackResponse struct {
+	Command string
+	// Url of the audio file to be played to the caller. Required if `fileId` is not provided.
+	FileUrl *string
+	// Identification of the audio file to be played to the caller. Required if `fileUrl` is not provided.
+	FileId *string
+}
+
+type _AudioCallbackResponse AudioCallbackResponse
+
+// NewAudioCallbackResponse instantiates a new AudioCallbackResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewAudioCallbackResponse() *AudioCallbackResponse {
+	this := AudioCallbackResponse{}
+	this.Command = "audio"
+	return &this
+}
+
+// NewAudioCallbackResponseWithDefaults instantiates a new AudioCallbackResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAudioCallbackResponseWithDefaults() *AudioCallbackResponse {
+	this := AudioCallbackResponse{}
+	this.Command = "audio"
+	return &this
+}
+
+// GetCommand returns the Command field value
+func (o *AudioCallbackResponse) GetCommand() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Command
+}
+
+// GetCommandOk returns a tuple with the Command field value
+// and a boolean to check if the value has been set.
+func (o *AudioCallbackResponse) GetCommandOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Command, true
+}
+
+// SetCommand sets field value
+func (o *AudioCallbackResponse) SetCommand(v string) {
+	o.Command = v
+}
+
+// GetFileUrl returns the FileUrl field value if set, zero value otherwise.
+func (o *AudioCallbackResponse) GetFileUrl() string {
+	if o == nil || IsNil(o.FileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.FileUrl
+}
+
+// GetFileUrlOk returns a tuple with the FileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AudioCallbackResponse) GetFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.FileUrl) {
+		return nil, false
+	}
+	return o.FileUrl, true
+}
+
+// HasFileUrl returns a boolean if a field has been set.
+func (o *AudioCallbackResponse) HasFileUrl() bool {
+	if o != nil && !IsNil(o.FileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileUrl gets a reference to the given string and assigns it to the FileUrl field.
+func (o *AudioCallbackResponse) SetFileUrl(v string) {
+	o.FileUrl = &v
+}
+
+// GetFileId returns the FileId field value if set, zero value otherwise.
+func (o *AudioCallbackResponse) GetFileId() string {
+	if o == nil || IsNil(o.FileId) {
+		var ret string
+		return ret
+	}
+	return *o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AudioCallbackResponse) GetFileIdOk() (*string, bool) {
+	if o == nil || IsNil(o.FileId) {
+		return nil, false
+	}
+	return o.FileId, true
+}
+
+// HasFileId returns a boolean if a field has been set.
+func (o *AudioCallbackResponse) HasFileId() bool {
+	if o != nil && !IsNil(o.FileId) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileId gets a reference to the given string and assigns it to the FileId field.
+func (o *AudioCallbackResponse) SetFileId(v string) {
+	o.FileId = &v
+}
+
+func (o AudioCallbackResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AudioCallbackResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["command"] = o.Command
+	if !IsNil(o.FileUrl) {
+		toSerialize["fileUrl"] = o.FileUrl
+	}
+	if !IsNil(o.FileId) {
+		toSerialize["fileId"] = o.FileId
+	}
+	return toSerialize, nil
+}
+
+type NullableAudioCallbackResponse struct {
+	value *AudioCallbackResponse
+	isSet bool
+}
+
+func (v NullableAudioCallbackResponse) Get() *AudioCallbackResponse {
+	return v.value
+}
+
+func (v *NullableAudioCallbackResponse) Set(val *AudioCallbackResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAudioCallbackResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAudioCallbackResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAudioCallbackResponse(val *AudioCallbackResponse) *NullableAudioCallbackResponse {
+	return &NullableAudioCallbackResponse{value: val, isSet: true}
+}
+
+func (v NullableAudioCallbackResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAudioCallbackResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/audio_codec.go b/pkg/infobip/models/voice/audio_codec.go
new file mode 100644
index 0000000..ed6c0c9
--- /dev/null
+++ b/pkg/infobip/models/voice/audio_codec.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// AudioCodec Audio codec.
+type AudioCodec string
+
+// List of AudioCodec
+const (
+	AUDIOCODEC_PCMU AudioCodec = "PCMU"
+	AUDIOCODEC_PCMA AudioCodec = "PCMA"
+	AUDIOCODEC_G729 AudioCodec = "G729"
+)
+
+// All allowed values of AudioCodec enum
+var AllowedAudioCodecEnumValues = []AudioCodec{
+	"PCMU",
+	"PCMA",
+	"G729",
+}
+
+func (v *AudioCodec) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := AudioCodec(value)
+	for _, existing := range AllowedAudioCodecEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid AudioCodec", value)
+}
+
+// NewAudioCodecFromValue returns a pointer to a valid AudioCodec
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewAudioCodecFromValue(v string) (*AudioCodec, error) {
+	ev := AudioCodec(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for AudioCodec: valid values are %v", v, AllowedAudioCodecEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v AudioCodec) IsValid() bool {
+	for _, existing := range AllowedAudioCodecEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to AudioCodec value
+func (v AudioCodec) Ptr() *AudioCodec {
+	return &v
+}
+
+type NullableAudioCodec struct {
+	value *AudioCodec
+	isSet bool
+}
+
+func (v NullableAudioCodec) Get() *AudioCodec {
+	return v.value
+}
+
+func (v *NullableAudioCodec) Set(val *AudioCodec) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAudioCodec) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAudioCodec) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAudioCodec(val *AudioCodec) *NullableAudioCodec {
+	return &NullableAudioCodec{value: val, isSet: true}
+}
+
+func (v NullableAudioCodec) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAudioCodec) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/audio_media_properties.go b/pkg/infobip/models/voice/audio_media_properties.go
new file mode 100644
index 0000000..71b89ef
--- /dev/null
+++ b/pkg/infobip/models/voice/audio_media_properties.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the AudioMediaProperties type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &AudioMediaProperties{}
+
+// AudioMediaProperties Audio media properties.
+type AudioMediaProperties struct {
+	// Indicates whether the end user can speak.
+	Muted *bool
+	// Indicates whether the end user muted himself.
+	UserMuted *bool
+	// Indicates whether the end user can hear.
+	Deaf *bool
+}
+
+// NewAudioMediaProperties instantiates a new AudioMediaProperties object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewAudioMediaProperties() *AudioMediaProperties {
+	this := AudioMediaProperties{}
+	return &this
+}
+
+// NewAudioMediaPropertiesWithDefaults instantiates a new AudioMediaProperties object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewAudioMediaPropertiesWithDefaults() *AudioMediaProperties {
+	this := AudioMediaProperties{}
+
+	return &this
+}
+
+// GetMuted returns the Muted field value if set, zero value otherwise.
+func (o *AudioMediaProperties) GetMuted() bool {
+	if o == nil || IsNil(o.Muted) {
+		var ret bool
+		return ret
+	}
+	return *o.Muted
+}
+
+// GetMutedOk returns a tuple with the Muted field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AudioMediaProperties) GetMutedOk() (*bool, bool) {
+	if o == nil || IsNil(o.Muted) {
+		return nil, false
+	}
+	return o.Muted, true
+}
+
+// HasMuted returns a boolean if a field has been set.
+func (o *AudioMediaProperties) HasMuted() bool {
+	if o != nil && !IsNil(o.Muted) {
+		return true
+	}
+
+	return false
+}
+
+// SetMuted gets a reference to the given bool and assigns it to the Muted field.
+func (o *AudioMediaProperties) SetMuted(v bool) {
+	o.Muted = &v
+}
+
+// GetUserMuted returns the UserMuted field value if set, zero value otherwise.
+func (o *AudioMediaProperties) GetUserMuted() bool {
+	if o == nil || IsNil(o.UserMuted) {
+		var ret bool
+		return ret
+	}
+	return *o.UserMuted
+}
+
+// GetUserMutedOk returns a tuple with the UserMuted field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AudioMediaProperties) GetUserMutedOk() (*bool, bool) {
+	if o == nil || IsNil(o.UserMuted) {
+		return nil, false
+	}
+	return o.UserMuted, true
+}
+
+// HasUserMuted returns a boolean if a field has been set.
+func (o *AudioMediaProperties) HasUserMuted() bool {
+	if o != nil && !IsNil(o.UserMuted) {
+		return true
+	}
+
+	return false
+}
+
+// SetUserMuted gets a reference to the given bool and assigns it to the UserMuted field.
+func (o *AudioMediaProperties) SetUserMuted(v bool) {
+	o.UserMuted = &v
+}
+
+// GetDeaf returns the Deaf field value if set, zero value otherwise.
+func (o *AudioMediaProperties) GetDeaf() bool {
+	if o == nil || IsNil(o.Deaf) {
+		var ret bool
+		return ret
+	}
+	return *o.Deaf
+}
+
+// GetDeafOk returns a tuple with the Deaf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *AudioMediaProperties) GetDeafOk() (*bool, bool) {
+	if o == nil || IsNil(o.Deaf) {
+		return nil, false
+	}
+	return o.Deaf, true
+}
+
+// HasDeaf returns a boolean if a field has been set.
+func (o *AudioMediaProperties) HasDeaf() bool {
+	if o != nil && !IsNil(o.Deaf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeaf gets a reference to the given bool and assigns it to the Deaf field.
+func (o *AudioMediaProperties) SetDeaf(v bool) {
+	o.Deaf = &v
+}
+
+func (o AudioMediaProperties) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o AudioMediaProperties) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Muted) {
+		toSerialize["muted"] = o.Muted
+	}
+	if !IsNil(o.UserMuted) {
+		toSerialize["userMuted"] = o.UserMuted
+	}
+	if !IsNil(o.Deaf) {
+		toSerialize["deaf"] = o.Deaf
+	}
+	return toSerialize, nil
+}
+
+type NullableAudioMediaProperties struct {
+	value *AudioMediaProperties
+	isSet bool
+}
+
+func (v NullableAudioMediaProperties) Get() *AudioMediaProperties {
+	return v.value
+}
+
+func (v *NullableAudioMediaProperties) Set(val *AudioMediaProperties) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableAudioMediaProperties) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableAudioMediaProperties) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableAudioMediaProperties(val *AudioMediaProperties) *NullableAudioMediaProperties {
+	return &NullableAudioMediaProperties{value: val, isSet: true}
+}
+
+func (v NullableAudioMediaProperties) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableAudioMediaProperties) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/basic_security_config.go b/pkg/infobip/models/voice/basic_security_config.go
new file mode 100644
index 0000000..adc0347
--- /dev/null
+++ b/pkg/infobip/models/voice/basic_security_config.go
@@ -0,0 +1,152 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BasicSecurityConfig type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BasicSecurityConfig{}
+
+// BasicSecurityConfig struct for BasicSecurityConfig
+type BasicSecurityConfig struct {
+	Type CallRoutingUrlSecurityConfigType
+	// Username.
+	Username string
+	// Password.
+	Password string
+}
+
+type _BasicSecurityConfig BasicSecurityConfig
+
+// NewBasicSecurityConfig instantiates a new BasicSecurityConfig object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewBasicSecurityConfig(username string, password string) *BasicSecurityConfig {
+	this := BasicSecurityConfig{}
+	this.Type = "BASIC"
+	this.Username = username
+	this.Password = password
+	return &this
+}
+
+// NewBasicSecurityConfigWithDefaults instantiates a new BasicSecurityConfig object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBasicSecurityConfigWithDefaults() *BasicSecurityConfig {
+	this := BasicSecurityConfig{}
+	this.Type = "BASIC"
+	return &this
+}
+
+// GetUsername returns the Username field value
+func (o *BasicSecurityConfig) GetUsername() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value
+// and a boolean to check if the value has been set.
+func (o *BasicSecurityConfig) GetUsernameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Username, true
+}
+
+// SetUsername sets field value
+func (o *BasicSecurityConfig) SetUsername(v string) {
+	o.Username = v
+}
+
+// GetPassword returns the Password field value
+func (o *BasicSecurityConfig) GetPassword() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Password
+}
+
+// GetPasswordOk returns a tuple with the Password field value
+// and a boolean to check if the value has been set.
+func (o *BasicSecurityConfig) GetPasswordOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Password, true
+}
+
+// SetPassword sets field value
+func (o *BasicSecurityConfig) SetPassword(v string) {
+	o.Password = v
+}
+
+func (o BasicSecurityConfig) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BasicSecurityConfig) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["username"] = o.Username
+	toSerialize["password"] = o.Password
+	return toSerialize, nil
+}
+
+type NullableBasicSecurityConfig struct {
+	value *BasicSecurityConfig
+	isSet bool
+}
+
+func (v NullableBasicSecurityConfig) Get() *BasicSecurityConfig {
+	return v.value
+}
+
+func (v *NullableBasicSecurityConfig) Set(val *BasicSecurityConfig) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBasicSecurityConfig) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBasicSecurityConfig) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBasicSecurityConfig(val *BasicSecurityConfig) *NullableBasicSecurityConfig {
+	return &NullableBasicSecurityConfig{value: val, isSet: true}
+}
+
+func (v NullableBasicSecurityConfig) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBasicSecurityConfig) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/billing_package.go b/pkg/infobip/models/voice/billing_package.go
new file mode 100644
index 0000000..2c96860
--- /dev/null
+++ b/pkg/infobip/models/voice/billing_package.go
@@ -0,0 +1,195 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BillingPackage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BillingPackage{}
+
+// BillingPackage Billing package.
+type BillingPackage struct {
+	PackageType BillingPackageType
+	// Country code. Currently, only `USA` is supported and required for the `UNLIMITED` package type.
+	CountryCode *string
+	// ID of SIP trunk address.
+	AddressId *string
+}
+
+type _BillingPackage BillingPackage
+
+// NewBillingPackage instantiates a new BillingPackage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBillingPackage(packageType BillingPackageType) *BillingPackage {
+	this := BillingPackage{}
+	this.PackageType = packageType
+	return &this
+}
+
+// NewBillingPackageWithDefaults instantiates a new BillingPackage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBillingPackageWithDefaults() *BillingPackage {
+	this := BillingPackage{}
+
+	return &this
+}
+
+// GetPackageType returns the PackageType field value
+func (o *BillingPackage) GetPackageType() BillingPackageType {
+	if o == nil {
+		var ret BillingPackageType
+		return ret
+	}
+
+	return o.PackageType
+}
+
+// GetPackageTypeOk returns a tuple with the PackageType field value
+// and a boolean to check if the value has been set.
+func (o *BillingPackage) GetPackageTypeOk() (*BillingPackageType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PackageType, true
+}
+
+// SetPackageType sets field value
+func (o *BillingPackage) SetPackageType(v BillingPackageType) {
+	o.PackageType = v
+}
+
+// GetCountryCode returns the CountryCode field value if set, zero value otherwise.
+func (o *BillingPackage) GetCountryCode() string {
+	if o == nil || IsNil(o.CountryCode) {
+		var ret string
+		return ret
+	}
+	return *o.CountryCode
+}
+
+// GetCountryCodeOk returns a tuple with the CountryCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BillingPackage) GetCountryCodeOk() (*string, bool) {
+	if o == nil || IsNil(o.CountryCode) {
+		return nil, false
+	}
+	return o.CountryCode, true
+}
+
+// HasCountryCode returns a boolean if a field has been set.
+func (o *BillingPackage) HasCountryCode() bool {
+	if o != nil && !IsNil(o.CountryCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountryCode gets a reference to the given string and assigns it to the CountryCode field.
+func (o *BillingPackage) SetCountryCode(v string) {
+	o.CountryCode = &v
+}
+
+// GetAddressId returns the AddressId field value if set, zero value otherwise.
+func (o *BillingPackage) GetAddressId() string {
+	if o == nil || IsNil(o.AddressId) {
+		var ret string
+		return ret
+	}
+	return *o.AddressId
+}
+
+// GetAddressIdOk returns a tuple with the AddressId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BillingPackage) GetAddressIdOk() (*string, bool) {
+	if o == nil || IsNil(o.AddressId) {
+		return nil, false
+	}
+	return o.AddressId, true
+}
+
+// HasAddressId returns a boolean if a field has been set.
+func (o *BillingPackage) HasAddressId() bool {
+	if o != nil && !IsNil(o.AddressId) {
+		return true
+	}
+
+	return false
+}
+
+// SetAddressId gets a reference to the given string and assigns it to the AddressId field.
+func (o *BillingPackage) SetAddressId(v string) {
+	o.AddressId = &v
+}
+
+func (o BillingPackage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BillingPackage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["packageType"] = o.PackageType
+	if !IsNil(o.CountryCode) {
+		toSerialize["countryCode"] = o.CountryCode
+	}
+	if !IsNil(o.AddressId) {
+		toSerialize["addressId"] = o.AddressId
+	}
+	return toSerialize, nil
+}
+
+type NullableBillingPackage struct {
+	value *BillingPackage
+	isSet bool
+}
+
+func (v NullableBillingPackage) Get() *BillingPackage {
+	return v.value
+}
+
+func (v *NullableBillingPackage) Set(val *BillingPackage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBillingPackage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBillingPackage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBillingPackage(val *BillingPackage) *NullableBillingPackage {
+	return &NullableBillingPackage{value: val, isSet: true}
+}
+
+func (v NullableBillingPackage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBillingPackage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/billing_package_type.go b/pkg/infobip/models/voice/billing_package_type.go
new file mode 100644
index 0000000..de4d2ea
--- /dev/null
+++ b/pkg/infobip/models/voice/billing_package_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// BillingPackageType Billing package type.
+type BillingPackageType string
+
+// List of BillingPackageType
+const (
+	BILLINGPACKAGETYPE_METERED   BillingPackageType = "METERED"
+	BILLINGPACKAGETYPE_UNLIMITED BillingPackageType = "UNLIMITED"
+)
+
+// All allowed values of BillingPackageType enum
+var AllowedBillingPackageTypeEnumValues = []BillingPackageType{
+	"METERED",
+	"UNLIMITED",
+}
+
+func (v *BillingPackageType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := BillingPackageType(value)
+	for _, existing := range AllowedBillingPackageTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid BillingPackageType", value)
+}
+
+// NewBillingPackageTypeFromValue returns a pointer to a valid BillingPackageType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewBillingPackageTypeFromValue(v string) (*BillingPackageType, error) {
+	ev := BillingPackageType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for BillingPackageType: valid values are %v", v, AllowedBillingPackageTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v BillingPackageType) IsValid() bool {
+	for _, existing := range AllowedBillingPackageTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to BillingPackageType value
+func (v BillingPackageType) Ptr() *BillingPackageType {
+	return &v
+}
+
+type NullableBillingPackageType struct {
+	value *BillingPackageType
+	isSet bool
+}
+
+func (v NullableBillingPackageType) Get() *BillingPackageType {
+	return v.value
+}
+
+func (v *NullableBillingPackageType) Set(val *BillingPackageType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBillingPackageType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBillingPackageType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBillingPackageType(val *BillingPackageType) *NullableBillingPackageType {
+	return &NullableBillingPackageType{value: val, isSet: true}
+}
+
+func (v NullableBillingPackageType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBillingPackageType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_call.go b/pkg/infobip/models/voice/bulk_call.go
new file mode 100644
index 0000000..dcf985f
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_call.go
@@ -0,0 +1,385 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkCall type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkCall{}
+
+// BulkCall Bulk call list.
+type BulkCall struct {
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	// Unique call ID.
+	CallId *string
+	// Client-defined call ID.
+	ExternalId *string
+	// Caller identifier.
+	From     *string
+	Endpoint *BulkEndpoint
+	Status   *ActionStatus
+	// Failure reason in human-readable format.
+	Reason *string
+}
+
+// NewBulkCall instantiates a new BulkCall object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkCall() *BulkCall {
+	this := BulkCall{}
+	return &this
+}
+
+// NewBulkCallWithDefaults instantiates a new BulkCall object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkCallWithDefaults() *BulkCall {
+	this := BulkCall{}
+
+	return &this
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *BulkCall) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *BulkCall) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *BulkCall) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *BulkCall) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *BulkCall) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *BulkCall) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetCallId returns the CallId field value if set, zero value otherwise.
+func (o *BulkCall) GetCallId() string {
+	if o == nil || IsNil(o.CallId) {
+		var ret string
+		return ret
+	}
+	return *o.CallId
+}
+
+// GetCallIdOk returns a tuple with the CallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallId) {
+		return nil, false
+	}
+	return o.CallId, true
+}
+
+// HasCallId returns a boolean if a field has been set.
+func (o *BulkCall) HasCallId() bool {
+	if o != nil && !IsNil(o.CallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallId gets a reference to the given string and assigns it to the CallId field.
+func (o *BulkCall) SetCallId(v string) {
+	o.CallId = &v
+}
+
+// GetExternalId returns the ExternalId field value if set, zero value otherwise.
+func (o *BulkCall) GetExternalId() string {
+	if o == nil || IsNil(o.ExternalId) {
+		var ret string
+		return ret
+	}
+	return *o.ExternalId
+}
+
+// GetExternalIdOk returns a tuple with the ExternalId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetExternalIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ExternalId) {
+		return nil, false
+	}
+	return o.ExternalId, true
+}
+
+// HasExternalId returns a boolean if a field has been set.
+func (o *BulkCall) HasExternalId() bool {
+	if o != nil && !IsNil(o.ExternalId) {
+		return true
+	}
+
+	return false
+}
+
+// SetExternalId gets a reference to the given string and assigns it to the ExternalId field.
+func (o *BulkCall) SetExternalId(v string) {
+	o.ExternalId = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *BulkCall) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *BulkCall) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *BulkCall) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetEndpoint returns the Endpoint field value if set, zero value otherwise.
+func (o *BulkCall) GetEndpoint() BulkEndpoint {
+	if o == nil || IsNil(o.Endpoint) {
+		var ret BulkEndpoint
+		return ret
+	}
+	return *o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetEndpointOk() (*BulkEndpoint, bool) {
+	if o == nil || IsNil(o.Endpoint) {
+		return nil, false
+	}
+	return o.Endpoint, true
+}
+
+// HasEndpoint returns a boolean if a field has been set.
+func (o *BulkCall) HasEndpoint() bool {
+	if o != nil && !IsNil(o.Endpoint) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndpoint gets a reference to the given BulkEndpoint and assigns it to the Endpoint field.
+func (o *BulkCall) SetEndpoint(v BulkEndpoint) {
+	o.Endpoint = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *BulkCall) GetStatus() ActionStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret ActionStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetStatusOk() (*ActionStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *BulkCall) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given ActionStatus and assigns it to the Status field.
+func (o *BulkCall) SetStatus(v ActionStatus) {
+	o.Status = &v
+}
+
+// GetReason returns the Reason field value if set, zero value otherwise.
+func (o *BulkCall) GetReason() string {
+	if o == nil || IsNil(o.Reason) {
+		var ret string
+		return ret
+	}
+	return *o.Reason
+}
+
+// GetReasonOk returns a tuple with the Reason field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCall) GetReasonOk() (*string, bool) {
+	if o == nil || IsNil(o.Reason) {
+		return nil, false
+	}
+	return o.Reason, true
+}
+
+// HasReason returns a boolean if a field has been set.
+func (o *BulkCall) HasReason() bool {
+	if o != nil && !IsNil(o.Reason) {
+		return true
+	}
+
+	return false
+}
+
+// SetReason gets a reference to the given string and assigns it to the Reason field.
+func (o *BulkCall) SetReason(v string) {
+	o.Reason = &v
+}
+
+func (o BulkCall) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkCall) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.CallId) {
+		toSerialize["callId"] = o.CallId
+	}
+	if !IsNil(o.ExternalId) {
+		toSerialize["externalId"] = o.ExternalId
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.Endpoint) {
+		toSerialize["endpoint"] = o.Endpoint
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Reason) {
+		toSerialize["reason"] = o.Reason
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkCall struct {
+	value *BulkCall
+	isSet bool
+}
+
+func (v NullableBulkCall) Get() *BulkCall {
+	return v.value
+}
+
+func (v *NullableBulkCall) Set(val *BulkCall) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkCall) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkCall) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkCall(val *BulkCall) *NullableBulkCall {
+	return &NullableBulkCall{value: val, isSet: true}
+}
+
+func (v NullableBulkCall) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkCall) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_call_request.go b/pkg/infobip/models/voice/bulk_call_request.go
new file mode 100644
index 0000000..602bb3b
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_call_request.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkCallRequest{}
+
+// BulkCallRequest Call request list.
+type BulkCallRequest struct {
+	// Client defined call ID.
+	ExternalId *string
+	Endpoint   BulkEndpoint
+}
+
+type _BulkCallRequest BulkCallRequest
+
+// NewBulkCallRequest instantiates a new BulkCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkCallRequest(endpoint BulkEndpoint) *BulkCallRequest {
+	this := BulkCallRequest{}
+	this.Endpoint = endpoint
+	return &this
+}
+
+// NewBulkCallRequestWithDefaults instantiates a new BulkCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkCallRequestWithDefaults() *BulkCallRequest {
+	this := BulkCallRequest{}
+
+	return &this
+}
+
+// GetExternalId returns the ExternalId field value if set, zero value otherwise.
+func (o *BulkCallRequest) GetExternalId() string {
+	if o == nil || IsNil(o.ExternalId) {
+		var ret string
+		return ret
+	}
+	return *o.ExternalId
+}
+
+// GetExternalIdOk returns a tuple with the ExternalId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkCallRequest) GetExternalIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ExternalId) {
+		return nil, false
+	}
+	return o.ExternalId, true
+}
+
+// HasExternalId returns a boolean if a field has been set.
+func (o *BulkCallRequest) HasExternalId() bool {
+	if o != nil && !IsNil(o.ExternalId) {
+		return true
+	}
+
+	return false
+}
+
+// SetExternalId gets a reference to the given string and assigns it to the ExternalId field.
+func (o *BulkCallRequest) SetExternalId(v string) {
+	o.ExternalId = &v
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *BulkCallRequest) GetEndpoint() BulkEndpoint {
+	if o == nil {
+		var ret BulkEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *BulkCallRequest) GetEndpointOk() (*BulkEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *BulkCallRequest) SetEndpoint(v BulkEndpoint) {
+	o.Endpoint = v
+}
+
+func (o BulkCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ExternalId) {
+		toSerialize["externalId"] = o.ExternalId
+	}
+	toSerialize["endpoint"] = o.Endpoint
+	return toSerialize, nil
+}
+
+type NullableBulkCallRequest struct {
+	value *BulkCallRequest
+	isSet bool
+}
+
+func (v NullableBulkCallRequest) Get() *BulkCallRequest {
+	return v.value
+}
+
+func (v *NullableBulkCallRequest) Set(val *BulkCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkCallRequest(val *BulkCallRequest) *NullableBulkCallRequest {
+	return &NullableBulkCallRequest{value: val, isSet: true}
+}
+
+func (v NullableBulkCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_endpoint.go b/pkg/infobip/models/voice/bulk_endpoint.go
new file mode 100644
index 0000000..8bf6be2
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_endpoint.go
@@ -0,0 +1,111 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// BulkEndpoint Call endpoint. Represents the callee for a call.
+type BulkEndpoint struct {
+	BulkPhoneEndpoint *BulkPhoneEndpoint
+}
+
+// BulkPhoneEndpointAsBulkEndpoint is a convenience function that returns BulkPhoneEndpoint wrapped in BulkEndpoint
+func BulkPhoneEndpointAsBulkEndpoint(v *BulkPhoneEndpoint) BulkEndpoint {
+	return BulkEndpoint{
+		BulkPhoneEndpoint: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *BulkEndpoint) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PHONE'
+	if jsonDict["type"] == "PHONE" {
+		// try to unmarshal JSON data into BulkPhoneEndpoint
+		err = json.Unmarshal(data, &dst.BulkPhoneEndpoint)
+		if err == nil {
+			jsonBulkPhoneEndpoint, _ := json.Marshal(dst.BulkPhoneEndpoint)
+			if string(jsonBulkPhoneEndpoint) == "{}" { // empty struct
+				dst.BulkPhoneEndpoint = nil
+			} else {
+				return nil // data stored in dst.BulkPhoneEndpoint, return on the first match
+			}
+		} else {
+			dst.BulkPhoneEndpoint = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(BulkEndpoint)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src BulkEndpoint) MarshalJSON() ([]byte, error) {
+	if src.BulkPhoneEndpoint != nil {
+		return json.Marshal(&src.BulkPhoneEndpoint)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *BulkEndpoint) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.BulkPhoneEndpoint != nil {
+		return obj.BulkPhoneEndpoint
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableBulkEndpoint struct {
+	value *BulkEndpoint
+	isSet bool
+}
+
+func (v NullableBulkEndpoint) Get() *BulkEndpoint {
+	return v.value
+}
+
+func (v *NullableBulkEndpoint) Set(val *BulkEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkEndpoint(val *BulkEndpoint) *NullableBulkEndpoint {
+	return &NullableBulkEndpoint{value: val, isSet: true}
+}
+
+func (v NullableBulkEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_endpoint_type.go b/pkg/infobip/models/voice/bulk_endpoint_type.go
new file mode 100644
index 0000000..aff7c4a
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_endpoint_type.go
@@ -0,0 +1,108 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// BulkEndpointType the model 'BulkEndpointType'
+type BulkEndpointType string
+
+// List of BulkEndpointType
+const (
+	BULKENDPOINTTYPE_PHONE BulkEndpointType = "PHONE"
+)
+
+// All allowed values of BulkEndpointType enum
+var AllowedBulkEndpointTypeEnumValues = []BulkEndpointType{
+	"PHONE",
+}
+
+func (v *BulkEndpointType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := BulkEndpointType(value)
+	for _, existing := range AllowedBulkEndpointTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid BulkEndpointType", value)
+}
+
+// NewBulkEndpointTypeFromValue returns a pointer to a valid BulkEndpointType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewBulkEndpointTypeFromValue(v string) (*BulkEndpointType, error) {
+	ev := BulkEndpointType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for BulkEndpointType: valid values are %v", v, AllowedBulkEndpointTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v BulkEndpointType) IsValid() bool {
+	for _, existing := range AllowedBulkEndpointTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to BulkEndpointType value
+func (v BulkEndpointType) Ptr() *BulkEndpointType {
+	return &v
+}
+
+type NullableBulkEndpointType struct {
+	value *BulkEndpointType
+	isSet bool
+}
+
+func (v NullableBulkEndpointType) Get() *BulkEndpointType {
+	return v.value
+}
+
+func (v *NullableBulkEndpointType) Set(val *BulkEndpointType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkEndpointType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkEndpointType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkEndpointType(val *BulkEndpointType) *NullableBulkEndpointType {
+	return &NullableBulkEndpointType{value: val, isSet: true}
+}
+
+func (v NullableBulkEndpointType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkEndpointType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_item.go b/pkg/infobip/models/voice/bulk_item.go
new file mode 100644
index 0000000..902e9a8
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_item.go
@@ -0,0 +1,482 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkItem type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkItem{}
+
+// BulkItem Bulk item list.
+type BulkItem struct {
+	// Caller identifier. Must be a number in the [E.164](https://en.wikipedia.org/wiki/E.164) format.
+	From string
+	// Call request list.
+	CallRequests     []BulkCallRequest
+	Recording        *CallRecordingRequest
+	MachineDetection *MachineDetectionRequest
+	// Maximum call duration in seconds. Once exceeded, the call terminates automatically.
+	MaxDuration *int32
+	// Time to wait, in seconds, before the called party answers the call. Once exceeded, the call terminates automatically.
+	ConnectTimeout *int32
+	CallRate       *CallRate
+	// The call validity period in minutes. Once expired, the call is not established.
+	ValidityPeriod    *int32
+	RetryOptions      *RetryOptions
+	SchedulingOptions *SchedulingOptions
+	// Client-defined, bulk-level custom data.
+	CustomData *map[string]string
+}
+
+type _BulkItem BulkItem
+
+// NewBulkItem instantiates a new BulkItem object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkItem(from string, callRequests []BulkCallRequest) *BulkItem {
+	this := BulkItem{}
+	this.From = from
+	this.CallRequests = callRequests
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// NewBulkItemWithDefaults instantiates a new BulkItem object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkItemWithDefaults() *BulkItem {
+	this := BulkItem{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetFrom returns the From field value
+func (o *BulkItem) GetFrom() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.From
+}
+
+// GetFromOk returns a tuple with the From field value
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetFromOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.From, true
+}
+
+// SetFrom sets field value
+func (o *BulkItem) SetFrom(v string) {
+	o.From = v
+}
+
+// GetCallRequests returns the CallRequests field value
+func (o *BulkItem) GetCallRequests() []BulkCallRequest {
+	if o == nil {
+		var ret []BulkCallRequest
+		return ret
+	}
+
+	return o.CallRequests
+}
+
+// GetCallRequestsOk returns a tuple with the CallRequests field value
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetCallRequestsOk() ([]BulkCallRequest, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.CallRequests, true
+}
+
+// SetCallRequests sets field value
+func (o *BulkItem) SetCallRequests(v []BulkCallRequest) {
+	o.CallRequests = v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *BulkItem) GetRecording() CallRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetRecordingOk() (*CallRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *BulkItem) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallRecordingRequest and assigns it to the Recording field.
+func (o *BulkItem) SetRecording(v CallRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *BulkItem) GetMachineDetection() MachineDetectionRequest {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret MachineDetectionRequest
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetMachineDetectionOk() (*MachineDetectionRequest, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *BulkItem) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given MachineDetectionRequest and assigns it to the MachineDetection field.
+func (o *BulkItem) SetMachineDetection(v MachineDetectionRequest) {
+	o.MachineDetection = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *BulkItem) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *BulkItem) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *BulkItem) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetConnectTimeout returns the ConnectTimeout field value if set, zero value otherwise.
+func (o *BulkItem) GetConnectTimeout() int32 {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.ConnectTimeout
+}
+
+// GetConnectTimeoutOk returns a tuple with the ConnectTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetConnectTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		return nil, false
+	}
+	return o.ConnectTimeout, true
+}
+
+// HasConnectTimeout returns a boolean if a field has been set.
+func (o *BulkItem) HasConnectTimeout() bool {
+	if o != nil && !IsNil(o.ConnectTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectTimeout gets a reference to the given int32 and assigns it to the ConnectTimeout field.
+func (o *BulkItem) SetConnectTimeout(v int32) {
+	o.ConnectTimeout = &v
+}
+
+// GetCallRate returns the CallRate field value if set, zero value otherwise.
+func (o *BulkItem) GetCallRate() CallRate {
+	if o == nil || IsNil(o.CallRate) {
+		var ret CallRate
+		return ret
+	}
+	return *o.CallRate
+}
+
+// GetCallRateOk returns a tuple with the CallRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetCallRateOk() (*CallRate, bool) {
+	if o == nil || IsNil(o.CallRate) {
+		return nil, false
+	}
+	return o.CallRate, true
+}
+
+// HasCallRate returns a boolean if a field has been set.
+func (o *BulkItem) HasCallRate() bool {
+	if o != nil && !IsNil(o.CallRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallRate gets a reference to the given CallRate and assigns it to the CallRate field.
+func (o *BulkItem) SetCallRate(v CallRate) {
+	o.CallRate = &v
+}
+
+// GetValidityPeriod returns the ValidityPeriod field value if set, zero value otherwise.
+func (o *BulkItem) GetValidityPeriod() int32 {
+	if o == nil || IsNil(o.ValidityPeriod) {
+		var ret int32
+		return ret
+	}
+	return *o.ValidityPeriod
+}
+
+// GetValidityPeriodOk returns a tuple with the ValidityPeriod field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetValidityPeriodOk() (*int32, bool) {
+	if o == nil || IsNil(o.ValidityPeriod) {
+		return nil, false
+	}
+	return o.ValidityPeriod, true
+}
+
+// HasValidityPeriod returns a boolean if a field has been set.
+func (o *BulkItem) HasValidityPeriod() bool {
+	if o != nil && !IsNil(o.ValidityPeriod) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidityPeriod gets a reference to the given int32 and assigns it to the ValidityPeriod field.
+func (o *BulkItem) SetValidityPeriod(v int32) {
+	o.ValidityPeriod = &v
+}
+
+// GetRetryOptions returns the RetryOptions field value if set, zero value otherwise.
+func (o *BulkItem) GetRetryOptions() RetryOptions {
+	if o == nil || IsNil(o.RetryOptions) {
+		var ret RetryOptions
+		return ret
+	}
+	return *o.RetryOptions
+}
+
+// GetRetryOptionsOk returns a tuple with the RetryOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetRetryOptionsOk() (*RetryOptions, bool) {
+	if o == nil || IsNil(o.RetryOptions) {
+		return nil, false
+	}
+	return o.RetryOptions, true
+}
+
+// HasRetryOptions returns a boolean if a field has been set.
+func (o *BulkItem) HasRetryOptions() bool {
+	if o != nil && !IsNil(o.RetryOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetRetryOptions gets a reference to the given RetryOptions and assigns it to the RetryOptions field.
+func (o *BulkItem) SetRetryOptions(v RetryOptions) {
+	o.RetryOptions = &v
+}
+
+// GetSchedulingOptions returns the SchedulingOptions field value if set, zero value otherwise.
+func (o *BulkItem) GetSchedulingOptions() SchedulingOptions {
+	if o == nil || IsNil(o.SchedulingOptions) {
+		var ret SchedulingOptions
+		return ret
+	}
+	return *o.SchedulingOptions
+}
+
+// GetSchedulingOptionsOk returns a tuple with the SchedulingOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetSchedulingOptionsOk() (*SchedulingOptions, bool) {
+	if o == nil || IsNil(o.SchedulingOptions) {
+		return nil, false
+	}
+	return o.SchedulingOptions, true
+}
+
+// HasSchedulingOptions returns a boolean if a field has been set.
+func (o *BulkItem) HasSchedulingOptions() bool {
+	if o != nil && !IsNil(o.SchedulingOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSchedulingOptions gets a reference to the given SchedulingOptions and assigns it to the SchedulingOptions field.
+func (o *BulkItem) SetSchedulingOptions(v SchedulingOptions) {
+	o.SchedulingOptions = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *BulkItem) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkItem) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *BulkItem) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *BulkItem) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o BulkItem) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkItem) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["from"] = o.From
+	toSerialize["callRequests"] = o.CallRequests
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.ConnectTimeout) {
+		toSerialize["connectTimeout"] = o.ConnectTimeout
+	}
+	if !IsNil(o.CallRate) {
+		toSerialize["callRate"] = o.CallRate
+	}
+	if !IsNil(o.ValidityPeriod) {
+		toSerialize["validityPeriod"] = o.ValidityPeriod
+	}
+	if !IsNil(o.RetryOptions) {
+		toSerialize["retryOptions"] = o.RetryOptions
+	}
+	if !IsNil(o.SchedulingOptions) {
+		toSerialize["schedulingOptions"] = o.SchedulingOptions
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkItem struct {
+	value *BulkItem
+	isSet bool
+}
+
+func (v NullableBulkItem) Get() *BulkItem {
+	return v.value
+}
+
+func (v *NullableBulkItem) Set(val *BulkItem) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkItem) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkItem) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkItem(val *BulkItem) *NullableBulkItem {
+	return &NullableBulkItem{value: val, isSet: true}
+}
+
+func (v NullableBulkItem) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkItem) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_phone_endpoint.go b/pkg/infobip/models/voice/bulk_phone_endpoint.go
new file mode 100644
index 0000000..6025644
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_phone_endpoint.go
@@ -0,0 +1,126 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkPhoneEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkPhoneEndpoint{}
+
+// BulkPhoneEndpoint struct for BulkPhoneEndpoint
+type BulkPhoneEndpoint struct {
+	Type BulkEndpointType
+	// Phone number in the [E.164](https://en.wikipedia.org/wiki/E.164) format.
+	PhoneNumber string
+}
+
+type _BulkPhoneEndpoint BulkPhoneEndpoint
+
+// NewBulkPhoneEndpoint instantiates a new BulkPhoneEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewBulkPhoneEndpoint(phoneNumber string) *BulkPhoneEndpoint {
+	this := BulkPhoneEndpoint{}
+	this.Type = "PHONE"
+	this.PhoneNumber = phoneNumber
+	return &this
+}
+
+// NewBulkPhoneEndpointWithDefaults instantiates a new BulkPhoneEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkPhoneEndpointWithDefaults() *BulkPhoneEndpoint {
+	this := BulkPhoneEndpoint{}
+	this.Type = "PHONE"
+	return &this
+}
+
+// GetPhoneNumber returns the PhoneNumber field value
+func (o *BulkPhoneEndpoint) GetPhoneNumber() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value
+// and a boolean to check if the value has been set.
+func (o *BulkPhoneEndpoint) GetPhoneNumberOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PhoneNumber, true
+}
+
+// SetPhoneNumber sets field value
+func (o *BulkPhoneEndpoint) SetPhoneNumber(v string) {
+	o.PhoneNumber = v
+}
+
+func (o BulkPhoneEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkPhoneEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["phoneNumber"] = o.PhoneNumber
+	return toSerialize, nil
+}
+
+type NullableBulkPhoneEndpoint struct {
+	value *BulkPhoneEndpoint
+	isSet bool
+}
+
+func (v NullableBulkPhoneEndpoint) Get() *BulkPhoneEndpoint {
+	return v.value
+}
+
+func (v *NullableBulkPhoneEndpoint) Set(val *BulkPhoneEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkPhoneEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkPhoneEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkPhoneEndpoint(val *BulkPhoneEndpoint) *NullableBulkPhoneEndpoint {
+	return &NullableBulkPhoneEndpoint{value: val, isSet: true}
+}
+
+func (v NullableBulkPhoneEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkPhoneEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_request.go b/pkg/infobip/models/voice/bulk_request.go
new file mode 100644
index 0000000..21426fd
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkRequest{}
+
+// BulkRequest struct for BulkRequest
+type BulkRequest struct {
+	// Rescheduled timestamp of the bulk.
+	SendAt Time
+}
+
+type _BulkRequest BulkRequest
+
+// NewBulkRequest instantiates a new BulkRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkRequest(sendAt Time) *BulkRequest {
+	this := BulkRequest{}
+	this.SendAt = sendAt
+	return &this
+}
+
+// NewBulkRequestWithDefaults instantiates a new BulkRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkRequestWithDefaults() *BulkRequest {
+	this := BulkRequest{}
+
+	return &this
+}
+
+// GetSendAt returns the SendAt field value
+func (o *BulkRequest) GetSendAt() Time {
+	if o == nil {
+		var ret Time
+		return ret
+	}
+
+	return o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value
+// and a boolean to check if the value has been set.
+func (o *BulkRequest) GetSendAtOk() (*Time, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SendAt, true
+}
+
+// SetSendAt sets field value
+func (o *BulkRequest) SetSendAt(v Time) {
+	o.SendAt = v
+}
+
+func (o BulkRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["sendAt"] = o.SendAt
+	return toSerialize, nil
+}
+
+type NullableBulkRequest struct {
+	value *BulkRequest
+	isSet bool
+}
+
+func (v NullableBulkRequest) Get() *BulkRequest {
+	return v.value
+}
+
+func (v *NullableBulkRequest) Set(val *BulkRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkRequest(val *BulkRequest) *NullableBulkRequest {
+	return &NullableBulkRequest{value: val, isSet: true}
+}
+
+func (v NullableBulkRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_response.go b/pkg/infobip/models/voice/bulk_response.go
new file mode 100644
index 0000000..58e9403
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkResponse{}
+
+// BulkResponse struct for BulkResponse
+type BulkResponse struct {
+	// Unique ID of the bulk.
+	BulkId *string
+	// Timestamp when bulk is scheduled.
+	SendAt *Time
+}
+
+// NewBulkResponse instantiates a new BulkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkResponse() *BulkResponse {
+	this := BulkResponse{}
+	return &this
+}
+
+// NewBulkResponseWithDefaults instantiates a new BulkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkResponseWithDefaults() *BulkResponse {
+	this := BulkResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetSendAt returns the SendAt field value if set, zero value otherwise.
+func (o *BulkResponse) GetSendAt() Time {
+	if o == nil || IsNil(o.SendAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkResponse) GetSendAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SendAt) {
+		return nil, false
+	}
+	return o.SendAt, true
+}
+
+// HasSendAt returns a boolean if a field has been set.
+func (o *BulkResponse) HasSendAt() bool {
+	if o != nil && !IsNil(o.SendAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendAt gets a reference to the given Time and assigns it to the SendAt field.
+func (o *BulkResponse) SetSendAt(v Time) {
+	o.SendAt = &v
+}
+
+func (o BulkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.SendAt) {
+		toSerialize["sendAt"] = o.SendAt
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkResponse struct {
+	value *BulkResponse
+	isSet bool
+}
+
+func (v NullableBulkResponse) Get() *BulkResponse {
+	return v.value
+}
+
+func (v *NullableBulkResponse) Set(val *BulkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkResponse(val *BulkResponse) *NullableBulkResponse {
+	return &NullableBulkResponse{value: val, isSet: true}
+}
+
+func (v NullableBulkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_status.go b/pkg/infobip/models/voice/bulk_status.go
new file mode 100644
index 0000000..cf28efd
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_status.go
@@ -0,0 +1,202 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkStatus type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkStatus{}
+
+// BulkStatus struct for BulkStatus
+type BulkStatus struct {
+	// Unique ID of the bulk request.
+	BulkId *string
+	// Bulk request handling start time.
+	StartTime *Time
+	Status    *Status
+}
+
+// NewBulkStatus instantiates a new BulkStatus object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkStatus() *BulkStatus {
+	this := BulkStatus{}
+	return &this
+}
+
+// NewBulkStatusWithDefaults instantiates a new BulkStatus object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkStatusWithDefaults() *BulkStatus {
+	this := BulkStatus{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkStatus) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatus) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkStatus) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkStatus) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *BulkStatus) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatus) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *BulkStatus) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *BulkStatus) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *BulkStatus) GetStatus() Status {
+	if o == nil || IsNil(o.Status) {
+		var ret Status
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatus) GetStatusOk() (*Status, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *BulkStatus) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given Status and assigns it to the Status field.
+func (o *BulkStatus) SetStatus(v Status) {
+	o.Status = &v
+}
+
+func (o BulkStatus) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkStatus) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	return toSerialize, nil
+}
+
+type NullableBulkStatus struct {
+	value *BulkStatus
+	isSet bool
+}
+
+func (v NullableBulkStatus) Get() *BulkStatus {
+	return v.value
+}
+
+func (v *NullableBulkStatus) Set(val *BulkStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkStatus(val *BulkStatus) *NullableBulkStatus {
+	return &NullableBulkStatus{value: val, isSet: true}
+}
+
+func (v NullableBulkStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_status_request.go b/pkg/infobip/models/voice/bulk_status_request.go
new file mode 100644
index 0000000..d4fd406
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_status_request.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkStatusRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkStatusRequest{}
+
+// BulkStatusRequest struct for BulkStatusRequest
+type BulkStatusRequest struct {
+	Status Status
+}
+
+type _BulkStatusRequest BulkStatusRequest
+
+// NewBulkStatusRequest instantiates a new BulkStatusRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkStatusRequest(status Status) *BulkStatusRequest {
+	this := BulkStatusRequest{}
+	this.Status = status
+	return &this
+}
+
+// NewBulkStatusRequestWithDefaults instantiates a new BulkStatusRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkStatusRequestWithDefaults() *BulkStatusRequest {
+	this := BulkStatusRequest{}
+
+	return &this
+}
+
+// GetStatus returns the Status field value
+func (o *BulkStatusRequest) GetStatus() Status {
+	if o == nil {
+		var ret Status
+		return ret
+	}
+
+	return o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value
+// and a boolean to check if the value has been set.
+func (o *BulkStatusRequest) GetStatusOk() (*Status, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Status, true
+}
+
+// SetStatus sets field value
+func (o *BulkStatusRequest) SetStatus(v Status) {
+	o.Status = v
+}
+
+func (o BulkStatusRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkStatusRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["status"] = o.Status
+	return toSerialize, nil
+}
+
+type NullableBulkStatusRequest struct {
+	value *BulkStatusRequest
+	isSet bool
+}
+
+func (v NullableBulkStatusRequest) Get() *BulkStatusRequest {
+	return v.value
+}
+
+func (v *NullableBulkStatusRequest) Set(val *BulkStatusRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkStatusRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkStatusRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkStatusRequest(val *BulkStatusRequest) *NullableBulkStatusRequest {
+	return &NullableBulkStatusRequest{value: val, isSet: true}
+}
+
+func (v NullableBulkStatusRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkStatusRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/bulk_status_response.go b/pkg/infobip/models/voice/bulk_status_response.go
new file mode 100644
index 0000000..0a7e5f1
--- /dev/null
+++ b/pkg/infobip/models/voice/bulk_status_response.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the BulkStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &BulkStatusResponse{}
+
+// BulkStatusResponse struct for BulkStatusResponse
+type BulkStatusResponse struct {
+	// Unique ID of the bulk.
+	BulkId *string
+	Status Status
+}
+
+type _BulkStatusResponse BulkStatusResponse
+
+// NewBulkStatusResponse instantiates a new BulkStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewBulkStatusResponse(status Status) *BulkStatusResponse {
+	this := BulkStatusResponse{}
+	this.Status = status
+	return &this
+}
+
+// NewBulkStatusResponseWithDefaults instantiates a new BulkStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewBulkStatusResponseWithDefaults() *BulkStatusResponse {
+	this := BulkStatusResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *BulkStatusResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *BulkStatusResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *BulkStatusResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *BulkStatusResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetStatus returns the Status field value
+func (o *BulkStatusResponse) GetStatus() Status {
+	if o == nil {
+		var ret Status
+		return ret
+	}
+
+	return o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value
+// and a boolean to check if the value has been set.
+func (o *BulkStatusResponse) GetStatusOk() (*Status, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Status, true
+}
+
+// SetStatus sets field value
+func (o *BulkStatusResponse) SetStatus(v Status) {
+	o.Status = v
+}
+
+func (o BulkStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o BulkStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	toSerialize["status"] = o.Status
+	return toSerialize, nil
+}
+
+type NullableBulkStatusResponse struct {
+	value *BulkStatusResponse
+	isSet bool
+}
+
+func (v NullableBulkStatusResponse) Get() *BulkStatusResponse {
+	return v.value
+}
+
+func (v *NullableBulkStatusResponse) Set(val *BulkStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableBulkStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableBulkStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableBulkStatusResponse(val *BulkStatusResponse) *NullableBulkStatusResponse {
+	return &NullableBulkStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableBulkStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableBulkStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call.go b/pkg/infobip/models/voice/call.go
new file mode 100644
index 0000000..7946028
--- /dev/null
+++ b/pkg/infobip/models/voice/call.go
@@ -0,0 +1,745 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Call type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Call{}
+
+// Call struct for Call
+type Call struct {
+	// Unique call ID.
+	Id       *string
+	Endpoint CallEndpoint
+	// Caller ID.
+	From *string
+	// Callee ID.
+	To        *string
+	Direction *CallDirection
+	State     *CallState
+	Media     *MediaProperties
+	// Date and time for when the call has been created.
+	StartTime *Time
+	// Date and time for when the call has been answered.
+	AnswerTime *Time
+	// Date and time for when the call has been finished.
+	EndTime *Time
+	// Parent call ID.
+	ParentCallId     *string
+	MachineDetection *MachineDetectionProperties
+	// Ringing duration in seconds.
+	RingDuration *int32
+	// Current calls configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	// Current conference ID.
+	ConferenceId *string
+	// Custom data.
+	CustomData *map[string]string
+	// Dialog ID.
+	DialogId *string
+}
+
+type _Call Call
+
+// NewCall instantiates a new Call object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCall(endpoint CallEndpoint) *Call {
+	this := Call{}
+	this.Endpoint = endpoint
+	return &this
+}
+
+// NewCallWithDefaults instantiates a new Call object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallWithDefaults() *Call {
+	this := Call{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *Call) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *Call) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *Call) SetId(v string) {
+	o.Id = &v
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *Call) GetEndpoint() CallEndpoint {
+	if o == nil {
+		var ret CallEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *Call) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *Call) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *Call) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *Call) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *Call) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *Call) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *Call) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *Call) SetTo(v string) {
+	o.To = &v
+}
+
+// GetDirection returns the Direction field value if set, zero value otherwise.
+func (o *Call) GetDirection() CallDirection {
+	if o == nil || IsNil(o.Direction) {
+		var ret CallDirection
+		return ret
+	}
+	return *o.Direction
+}
+
+// GetDirectionOk returns a tuple with the Direction field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetDirectionOk() (*CallDirection, bool) {
+	if o == nil || IsNil(o.Direction) {
+		return nil, false
+	}
+	return o.Direction, true
+}
+
+// HasDirection returns a boolean if a field has been set.
+func (o *Call) HasDirection() bool {
+	if o != nil && !IsNil(o.Direction) {
+		return true
+	}
+
+	return false
+}
+
+// SetDirection gets a reference to the given CallDirection and assigns it to the Direction field.
+func (o *Call) SetDirection(v CallDirection) {
+	o.Direction = &v
+}
+
+// GetState returns the State field value if set, zero value otherwise.
+func (o *Call) GetState() CallState {
+	if o == nil || IsNil(o.State) {
+		var ret CallState
+		return ret
+	}
+	return *o.State
+}
+
+// GetStateOk returns a tuple with the State field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetStateOk() (*CallState, bool) {
+	if o == nil || IsNil(o.State) {
+		return nil, false
+	}
+	return o.State, true
+}
+
+// HasState returns a boolean if a field has been set.
+func (o *Call) HasState() bool {
+	if o != nil && !IsNil(o.State) {
+		return true
+	}
+
+	return false
+}
+
+// SetState gets a reference to the given CallState and assigns it to the State field.
+func (o *Call) SetState(v CallState) {
+	o.State = &v
+}
+
+// GetMedia returns the Media field value if set, zero value otherwise.
+func (o *Call) GetMedia() MediaProperties {
+	if o == nil || IsNil(o.Media) {
+		var ret MediaProperties
+		return ret
+	}
+	return *o.Media
+}
+
+// GetMediaOk returns a tuple with the Media field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetMediaOk() (*MediaProperties, bool) {
+	if o == nil || IsNil(o.Media) {
+		return nil, false
+	}
+	return o.Media, true
+}
+
+// HasMedia returns a boolean if a field has been set.
+func (o *Call) HasMedia() bool {
+	if o != nil && !IsNil(o.Media) {
+		return true
+	}
+
+	return false
+}
+
+// SetMedia gets a reference to the given MediaProperties and assigns it to the Media field.
+func (o *Call) SetMedia(v MediaProperties) {
+	o.Media = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *Call) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *Call) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *Call) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetAnswerTime returns the AnswerTime field value if set, zero value otherwise.
+func (o *Call) GetAnswerTime() Time {
+	if o == nil || IsNil(o.AnswerTime) {
+		var ret Time
+		return ret
+	}
+	return *o.AnswerTime
+}
+
+// GetAnswerTimeOk returns a tuple with the AnswerTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetAnswerTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.AnswerTime) {
+		return nil, false
+	}
+	return o.AnswerTime, true
+}
+
+// HasAnswerTime returns a boolean if a field has been set.
+func (o *Call) HasAnswerTime() bool {
+	if o != nil && !IsNil(o.AnswerTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnswerTime gets a reference to the given Time and assigns it to the AnswerTime field.
+func (o *Call) SetAnswerTime(v Time) {
+	o.AnswerTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *Call) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *Call) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *Call) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+// GetParentCallId returns the ParentCallId field value if set, zero value otherwise.
+func (o *Call) GetParentCallId() string {
+	if o == nil || IsNil(o.ParentCallId) {
+		var ret string
+		return ret
+	}
+	return *o.ParentCallId
+}
+
+// GetParentCallIdOk returns a tuple with the ParentCallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetParentCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ParentCallId) {
+		return nil, false
+	}
+	return o.ParentCallId, true
+}
+
+// HasParentCallId returns a boolean if a field has been set.
+func (o *Call) HasParentCallId() bool {
+	if o != nil && !IsNil(o.ParentCallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetParentCallId gets a reference to the given string and assigns it to the ParentCallId field.
+func (o *Call) SetParentCallId(v string) {
+	o.ParentCallId = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *Call) GetMachineDetection() MachineDetectionProperties {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret MachineDetectionProperties
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetMachineDetectionOk() (*MachineDetectionProperties, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *Call) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given MachineDetectionProperties and assigns it to the MachineDetection field.
+func (o *Call) SetMachineDetection(v MachineDetectionProperties) {
+	o.MachineDetection = &v
+}
+
+// GetRingDuration returns the RingDuration field value if set, zero value otherwise.
+func (o *Call) GetRingDuration() int32 {
+	if o == nil || IsNil(o.RingDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.RingDuration
+}
+
+// GetRingDurationOk returns a tuple with the RingDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetRingDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.RingDuration) {
+		return nil, false
+	}
+	return o.RingDuration, true
+}
+
+// HasRingDuration returns a boolean if a field has been set.
+func (o *Call) HasRingDuration() bool {
+	if o != nil && !IsNil(o.RingDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingDuration gets a reference to the given int32 and assigns it to the RingDuration field.
+func (o *Call) SetRingDuration(v int32) {
+	o.RingDuration = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *Call) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *Call) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *Call) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *Call) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *Call) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *Call) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetConferenceId returns the ConferenceId field value if set, zero value otherwise.
+func (o *Call) GetConferenceId() string {
+	if o == nil || IsNil(o.ConferenceId) {
+		var ret string
+		return ret
+	}
+	return *o.ConferenceId
+}
+
+// GetConferenceIdOk returns a tuple with the ConferenceId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetConferenceIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ConferenceId) {
+		return nil, false
+	}
+	return o.ConferenceId, true
+}
+
+// HasConferenceId returns a boolean if a field has been set.
+func (o *Call) HasConferenceId() bool {
+	if o != nil && !IsNil(o.ConferenceId) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceId gets a reference to the given string and assigns it to the ConferenceId field.
+func (o *Call) SetConferenceId(v string) {
+	o.ConferenceId = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *Call) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *Call) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *Call) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetDialogId returns the DialogId field value if set, zero value otherwise.
+func (o *Call) GetDialogId() string {
+	if o == nil || IsNil(o.DialogId) {
+		var ret string
+		return ret
+	}
+	return *o.DialogId
+}
+
+// GetDialogIdOk returns a tuple with the DialogId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Call) GetDialogIdOk() (*string, bool) {
+	if o == nil || IsNil(o.DialogId) {
+		return nil, false
+	}
+	return o.DialogId, true
+}
+
+// HasDialogId returns a boolean if a field has been set.
+func (o *Call) HasDialogId() bool {
+	if o != nil && !IsNil(o.DialogId) {
+		return true
+	}
+
+	return false
+}
+
+// SetDialogId gets a reference to the given string and assigns it to the DialogId field.
+func (o *Call) SetDialogId(v string) {
+	o.DialogId = &v
+}
+
+func (o Call) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Call) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	toSerialize["endpoint"] = o.Endpoint
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.Direction) {
+		toSerialize["direction"] = o.Direction
+	}
+	if !IsNil(o.State) {
+		toSerialize["state"] = o.State
+	}
+	if !IsNil(o.Media) {
+		toSerialize["media"] = o.Media
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.AnswerTime) {
+		toSerialize["answerTime"] = o.AnswerTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.ParentCallId) {
+		toSerialize["parentCallId"] = o.ParentCallId
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.RingDuration) {
+		toSerialize["ringDuration"] = o.RingDuration
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.ConferenceId) {
+		toSerialize["conferenceId"] = o.ConferenceId
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.DialogId) {
+		toSerialize["dialogId"] = o.DialogId
+	}
+	return toSerialize, nil
+}
+
+type NullableCall struct {
+	value *Call
+	isSet bool
+}
+
+func (v NullableCall) Get() *Call {
+	return v.value
+}
+
+func (v *NullableCall) Set(val *Call) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCall) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCall) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCall(val *Call) *NullableCall {
+	return &NullableCall{value: val, isSet: true}
+}
+
+func (v NullableCall) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCall) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_api.go b/pkg/infobip/models/voice/call_api.go
new file mode 100644
index 0000000..9f613cf
--- /dev/null
+++ b/pkg/infobip/models/voice/call_api.go
@@ -0,0 +1,186 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallApi type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallApi{}
+
+// CallApi Call API Action performs an HTTP request to a client’s endpoint, and (if told to) processes the response data. If collectResponse is set, the system will attempt to parse the response from the server. Our platform needs to be able to make HTTP requests to the specified endpoint.
+type CallApi struct {
+	// The URL to target
+	Request string
+	Options CallApiOptions
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _CallApi CallApi
+
+// NewCallApi instantiates a new CallApi object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallApi(request string, options CallApiOptions) *CallApi {
+	this := CallApi{}
+	this.Request = request
+	this.Options = options
+	return &this
+}
+
+// NewCallApiWithDefaults instantiates a new CallApi object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallApiWithDefaults() *CallApi {
+	this := CallApi{}
+
+	return &this
+}
+
+// GetRequest returns the Request field value
+func (o *CallApi) GetRequest() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Request
+}
+
+// GetRequestOk returns a tuple with the Request field value
+// and a boolean to check if the value has been set.
+func (o *CallApi) GetRequestOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Request, true
+}
+
+// SetRequest sets field value
+func (o *CallApi) SetRequest(v string) {
+	o.Request = v
+}
+
+// GetOptions returns the Options field value
+func (o *CallApi) GetOptions() CallApiOptions {
+	if o == nil {
+		var ret CallApiOptions
+		return ret
+	}
+
+	return o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value
+// and a boolean to check if the value has been set.
+func (o *CallApi) GetOptionsOk() (*CallApiOptions, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Options, true
+}
+
+// SetOptions sets field value
+func (o *CallApi) SetOptions(v CallApiOptions) {
+	o.Options = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *CallApi) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallApi) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *CallApi) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *CallApi) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o CallApi) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallApi) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["request"] = o.Request
+	toSerialize["options"] = o.Options
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableCallApi struct {
+	value *CallApi
+	isSet bool
+}
+
+func (v NullableCallApi) Get() *CallApi {
+	return v.value
+}
+
+func (v *NullableCallApi) Set(val *CallApi) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallApi) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallApi) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallApi(val *CallApi) *NullableCallApi {
+	return &NullableCallApi{value: val, isSet: true}
+}
+
+func (v NullableCallApi) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallApi) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_api_options.go b/pkg/infobip/models/voice/call_api_options.go
new file mode 100644
index 0000000..a3e4fcf
--- /dev/null
+++ b/pkg/infobip/models/voice/call_api_options.go
@@ -0,0 +1,232 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallApiOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallApiOptions{}
+
+// CallApiOptions struct for CallApiOptions
+type CallApiOptions struct {
+	Method HttpMethod
+	// HTTP headers
+	Headers map[string]interface{}
+	// HTTP body
+	Body *string
+	// If this field is set, the system will parse the response and save all its fields as variables inside scenario. Note: Parser ignores non-primitive fields and does not go deeper than the first level. For example, if the response is {\"letters\": \"abcd\", \"numbers\": 12345}, the system will store variables letters and numbers, with values abcd and 12345 respectively. Check the example Say action with Call Api Responses. Response that is parsed can only be in JSON or XML.
+	CollectResponse *bool
+}
+
+type _CallApiOptions CallApiOptions
+
+// NewCallApiOptions instantiates a new CallApiOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallApiOptions(method HttpMethod) *CallApiOptions {
+	this := CallApiOptions{}
+	this.Method = method
+	return &this
+}
+
+// NewCallApiOptionsWithDefaults instantiates a new CallApiOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallApiOptionsWithDefaults() *CallApiOptions {
+	this := CallApiOptions{}
+
+	return &this
+}
+
+// GetMethod returns the Method field value
+func (o *CallApiOptions) GetMethod() HttpMethod {
+	if o == nil {
+		var ret HttpMethod
+		return ret
+	}
+
+	return o.Method
+}
+
+// GetMethodOk returns a tuple with the Method field value
+// and a boolean to check if the value has been set.
+func (o *CallApiOptions) GetMethodOk() (*HttpMethod, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Method, true
+}
+
+// SetMethod sets field value
+func (o *CallApiOptions) SetMethod(v HttpMethod) {
+	o.Method = v
+}
+
+// GetHeaders returns the Headers field value if set, zero value otherwise.
+func (o *CallApiOptions) GetHeaders() map[string]interface{} {
+	if o == nil || IsNil(o.Headers) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.Headers
+}
+
+// GetHeadersOk returns a tuple with the Headers field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallApiOptions) GetHeadersOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.Headers) {
+		return map[string]interface{}{}, false
+	}
+	return o.Headers, true
+}
+
+// HasHeaders returns a boolean if a field has been set.
+func (o *CallApiOptions) HasHeaders() bool {
+	if o != nil && !IsNil(o.Headers) {
+		return true
+	}
+
+	return false
+}
+
+// SetHeaders gets a reference to the given map[string]interface{} and assigns it to the Headers field.
+func (o *CallApiOptions) SetHeaders(v map[string]interface{}) {
+	o.Headers = v
+}
+
+// GetBody returns the Body field value if set, zero value otherwise.
+func (o *CallApiOptions) GetBody() string {
+	if o == nil || IsNil(o.Body) {
+		var ret string
+		return ret
+	}
+	return *o.Body
+}
+
+// GetBodyOk returns a tuple with the Body field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallApiOptions) GetBodyOk() (*string, bool) {
+	if o == nil || IsNil(o.Body) {
+		return nil, false
+	}
+	return o.Body, true
+}
+
+// HasBody returns a boolean if a field has been set.
+func (o *CallApiOptions) HasBody() bool {
+	if o != nil && !IsNil(o.Body) {
+		return true
+	}
+
+	return false
+}
+
+// SetBody gets a reference to the given string and assigns it to the Body field.
+func (o *CallApiOptions) SetBody(v string) {
+	o.Body = &v
+}
+
+// GetCollectResponse returns the CollectResponse field value if set, zero value otherwise.
+func (o *CallApiOptions) GetCollectResponse() bool {
+	if o == nil || IsNil(o.CollectResponse) {
+		var ret bool
+		return ret
+	}
+	return *o.CollectResponse
+}
+
+// GetCollectResponseOk returns a tuple with the CollectResponse field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallApiOptions) GetCollectResponseOk() (*bool, bool) {
+	if o == nil || IsNil(o.CollectResponse) {
+		return nil, false
+	}
+	return o.CollectResponse, true
+}
+
+// HasCollectResponse returns a boolean if a field has been set.
+func (o *CallApiOptions) HasCollectResponse() bool {
+	if o != nil && !IsNil(o.CollectResponse) {
+		return true
+	}
+
+	return false
+}
+
+// SetCollectResponse gets a reference to the given bool and assigns it to the CollectResponse field.
+func (o *CallApiOptions) SetCollectResponse(v bool) {
+	o.CollectResponse = &v
+}
+
+func (o CallApiOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallApiOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["method"] = o.Method
+	if !IsNil(o.Headers) {
+		toSerialize["headers"] = o.Headers
+	}
+	if !IsNil(o.Body) {
+		toSerialize["body"] = o.Body
+	}
+	if !IsNil(o.CollectResponse) {
+		toSerialize["collectResponse"] = o.CollectResponse
+	}
+	return toSerialize, nil
+}
+
+type NullableCallApiOptions struct {
+	value *CallApiOptions
+	isSet bool
+}
+
+func (v NullableCallApiOptions) Get() *CallApiOptions {
+	return v.value
+}
+
+func (v *NullableCallApiOptions) Set(val *CallApiOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallApiOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallApiOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallApiOptions(val *CallApiOptions) *NullableCallApiOptions {
+	return &NullableCallApiOptions{value: val, isSet: true}
+}
+
+func (v NullableCallApiOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallApiOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_bulk_request.go b/pkg/infobip/models/voice/call_bulk_request.go
new file mode 100644
index 0000000..518d538
--- /dev/null
+++ b/pkg/infobip/models/voice/call_bulk_request.go
@@ -0,0 +1,223 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallBulkRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallBulkRequest{}
+
+// CallBulkRequest struct for CallBulkRequest
+type CallBulkRequest struct {
+	// Unique ID of the bulk request. If it's not set, a unique ID will be assigned to the bulk request.
+	BulkId *string
+	// Calls Configuration ID.
+	CallsConfigurationId string
+	Platform             *Platform
+	// Bulk item list.
+	Items []BulkItem
+}
+
+type _CallBulkRequest CallBulkRequest
+
+// NewCallBulkRequest instantiates a new CallBulkRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallBulkRequest(callsConfigurationId string, items []BulkItem) *CallBulkRequest {
+	this := CallBulkRequest{}
+	this.CallsConfigurationId = callsConfigurationId
+	this.Items = items
+	return &this
+}
+
+// NewCallBulkRequestWithDefaults instantiates a new CallBulkRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallBulkRequestWithDefaults() *CallBulkRequest {
+	this := CallBulkRequest{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *CallBulkRequest) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallBulkRequest) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *CallBulkRequest) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *CallBulkRequest) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value
+func (o *CallBulkRequest) GetCallsConfigurationId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value
+// and a boolean to check if the value has been set.
+func (o *CallBulkRequest) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CallsConfigurationId, true
+}
+
+// SetCallsConfigurationId sets field value
+func (o *CallBulkRequest) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *CallBulkRequest) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallBulkRequest) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *CallBulkRequest) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *CallBulkRequest) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetItems returns the Items field value
+func (o *CallBulkRequest) GetItems() []BulkItem {
+	if o == nil {
+		var ret []BulkItem
+		return ret
+	}
+
+	return o.Items
+}
+
+// GetItemsOk returns a tuple with the Items field value
+// and a boolean to check if the value has been set.
+func (o *CallBulkRequest) GetItemsOk() ([]BulkItem, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Items, true
+}
+
+// SetItems sets field value
+func (o *CallBulkRequest) SetItems(v []BulkItem) {
+	o.Items = v
+}
+
+func (o CallBulkRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallBulkRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	toSerialize["items"] = o.Items
+	return toSerialize, nil
+}
+
+type NullableCallBulkRequest struct {
+	value *CallBulkRequest
+	isSet bool
+}
+
+func (v NullableCallBulkRequest) Get() *CallBulkRequest {
+	return v.value
+}
+
+func (v *NullableCallBulkRequest) Set(val *CallBulkRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallBulkRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallBulkRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallBulkRequest(val *CallBulkRequest) *NullableCallBulkRequest {
+	return &NullableCallBulkRequest{value: val, isSet: true}
+}
+
+func (v NullableCallBulkRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallBulkRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_bulk_response.go b/pkg/infobip/models/voice/call_bulk_response.go
new file mode 100644
index 0000000..9eb4ecc
--- /dev/null
+++ b/pkg/infobip/models/voice/call_bulk_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallBulkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallBulkResponse{}
+
+// CallBulkResponse struct for CallBulkResponse
+type CallBulkResponse struct {
+	// Unique ID of the bulk request.
+	BulkId *string
+	// Bulk call list.
+	Calls []BulkCall
+}
+
+// NewCallBulkResponse instantiates a new CallBulkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallBulkResponse() *CallBulkResponse {
+	this := CallBulkResponse{}
+	return &this
+}
+
+// NewCallBulkResponseWithDefaults instantiates a new CallBulkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallBulkResponseWithDefaults() *CallBulkResponse {
+	this := CallBulkResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *CallBulkResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallBulkResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *CallBulkResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *CallBulkResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetCalls returns the Calls field value if set, zero value otherwise.
+func (o *CallBulkResponse) GetCalls() []BulkCall {
+	if o == nil || IsNil(o.Calls) {
+		var ret []BulkCall
+		return ret
+	}
+	return o.Calls
+}
+
+// GetCallsOk returns a tuple with the Calls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallBulkResponse) GetCallsOk() ([]BulkCall, bool) {
+	if o == nil || IsNil(o.Calls) {
+		return nil, false
+	}
+	return o.Calls, true
+}
+
+// HasCalls returns a boolean if a field has been set.
+func (o *CallBulkResponse) HasCalls() bool {
+	if o != nil && !IsNil(o.Calls) {
+		return true
+	}
+
+	return false
+}
+
+// SetCalls gets a reference to the given []BulkCall and assigns it to the Calls field.
+func (o *CallBulkResponse) SetCalls(v []BulkCall) {
+	o.Calls = v
+}
+
+func (o CallBulkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallBulkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.Calls) {
+		toSerialize["calls"] = o.Calls
+	}
+	return toSerialize, nil
+}
+
+type NullableCallBulkResponse struct {
+	value *CallBulkResponse
+	isSet bool
+}
+
+func (v NullableCallBulkResponse) Get() *CallBulkResponse {
+	return v.value
+}
+
+func (v *NullableCallBulkResponse) Set(val *CallBulkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallBulkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallBulkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallBulkResponse(val *CallBulkResponse) *NullableCallBulkResponse {
+	return &NullableCallBulkResponse{value: val, isSet: true}
+}
+
+func (v NullableCallBulkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallBulkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_direction.go b/pkg/infobip/models/voice/call_direction.go
new file mode 100644
index 0000000..54e666a
--- /dev/null
+++ b/pkg/infobip/models/voice/call_direction.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallDirection Call direction.
+type CallDirection string
+
+// List of CallDirection
+const (
+	CALLDIRECTION_INBOUND  CallDirection = "INBOUND"
+	CALLDIRECTION_OUTBOUND CallDirection = "OUTBOUND"
+)
+
+// All allowed values of CallDirection enum
+var AllowedCallDirectionEnumValues = []CallDirection{
+	"INBOUND",
+	"OUTBOUND",
+}
+
+func (v *CallDirection) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallDirection(value)
+	for _, existing := range AllowedCallDirectionEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallDirection", value)
+}
+
+// NewCallDirectionFromValue returns a pointer to a valid CallDirection
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallDirectionFromValue(v string) (*CallDirection, error) {
+	ev := CallDirection(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallDirection: valid values are %v", v, AllowedCallDirectionEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallDirection) IsValid() bool {
+	for _, existing := range AllowedCallDirectionEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallDirection value
+func (v CallDirection) Ptr() *CallDirection {
+	return &v
+}
+
+type NullableCallDirection struct {
+	value *CallDirection
+	isSet bool
+}
+
+func (v NullableCallDirection) Get() *CallDirection {
+	return v.value
+}
+
+func (v *NullableCallDirection) Set(val *CallDirection) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallDirection) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallDirection) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallDirection(val *CallDirection) *NullableCallDirection {
+	return &NullableCallDirection{value: val, isSet: true}
+}
+
+func (v NullableCallDirection) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallDirection) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_endpoint.go b/pkg/infobip/models/voice/call_endpoint.go
new file mode 100644
index 0000000..b80c90e
--- /dev/null
+++ b/pkg/infobip/models/voice/call_endpoint.go
@@ -0,0 +1,198 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallEndpoint Call endpoint. Represents a caller for the inbound calls and a callee for the outbound calls.
+type CallEndpoint struct {
+	PhoneEndpoint  *PhoneEndpoint
+	SipEndpoint    *SipEndpoint
+	ViberEndpoint  *ViberEndpoint
+	WebRtcEndpoint *WebRtcEndpoint
+}
+
+// PhoneEndpointAsCallEndpoint is a convenience function that returns PhoneEndpoint wrapped in CallEndpoint
+func PhoneEndpointAsCallEndpoint(v *PhoneEndpoint) CallEndpoint {
+	return CallEndpoint{
+		PhoneEndpoint: v,
+	}
+}
+
+// SipEndpointAsCallEndpoint is a convenience function that returns SipEndpoint wrapped in CallEndpoint
+func SipEndpointAsCallEndpoint(v *SipEndpoint) CallEndpoint {
+	return CallEndpoint{
+		SipEndpoint: v,
+	}
+}
+
+// ViberEndpointAsCallEndpoint is a convenience function that returns ViberEndpoint wrapped in CallEndpoint
+func ViberEndpointAsCallEndpoint(v *ViberEndpoint) CallEndpoint {
+	return CallEndpoint{
+		ViberEndpoint: v,
+	}
+}
+
+// WebRtcEndpointAsCallEndpoint is a convenience function that returns WebRtcEndpoint wrapped in CallEndpoint
+func WebRtcEndpointAsCallEndpoint(v *WebRtcEndpoint) CallEndpoint {
+	return CallEndpoint{
+		WebRtcEndpoint: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CallEndpoint) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PHONE'
+	if jsonDict["type"] == "PHONE" {
+		// try to unmarshal JSON data into PhoneEndpoint
+		err = json.Unmarshal(data, &dst.PhoneEndpoint)
+		if err == nil {
+			jsonPhoneEndpoint, _ := json.Marshal(dst.PhoneEndpoint)
+			if string(jsonPhoneEndpoint) == "{}" { // empty struct
+				dst.PhoneEndpoint = nil
+			} else {
+				return nil // data stored in dst.PhoneEndpoint, return on the first match
+			}
+		} else {
+			dst.PhoneEndpoint = nil
+		}
+	}
+	// check if the discriminator value is 'SIP'
+	if jsonDict["type"] == "SIP" {
+		// try to unmarshal JSON data into SipEndpoint
+		err = json.Unmarshal(data, &dst.SipEndpoint)
+		if err == nil {
+			jsonSipEndpoint, _ := json.Marshal(dst.SipEndpoint)
+			if string(jsonSipEndpoint) == "{}" { // empty struct
+				dst.SipEndpoint = nil
+			} else {
+				return nil // data stored in dst.SipEndpoint, return on the first match
+			}
+		} else {
+			dst.SipEndpoint = nil
+		}
+	}
+	// check if the discriminator value is 'VIBER'
+	if jsonDict["type"] == "VIBER" {
+		// try to unmarshal JSON data into ViberEndpoint
+		err = json.Unmarshal(data, &dst.ViberEndpoint)
+		if err == nil {
+			jsonViberEndpoint, _ := json.Marshal(dst.ViberEndpoint)
+			if string(jsonViberEndpoint) == "{}" { // empty struct
+				dst.ViberEndpoint = nil
+			} else {
+				return nil // data stored in dst.ViberEndpoint, return on the first match
+			}
+		} else {
+			dst.ViberEndpoint = nil
+		}
+	}
+	// check if the discriminator value is 'WEBRTC'
+	if jsonDict["type"] == "WEBRTC" {
+		// try to unmarshal JSON data into WebRtcEndpoint
+		err = json.Unmarshal(data, &dst.WebRtcEndpoint)
+		if err == nil {
+			jsonWebRtcEndpoint, _ := json.Marshal(dst.WebRtcEndpoint)
+			if string(jsonWebRtcEndpoint) == "{}" { // empty struct
+				dst.WebRtcEndpoint = nil
+			} else {
+				return nil // data stored in dst.WebRtcEndpoint, return on the first match
+			}
+		} else {
+			dst.WebRtcEndpoint = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CallEndpoint)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CallEndpoint) MarshalJSON() ([]byte, error) {
+	if src.PhoneEndpoint != nil {
+		return json.Marshal(&src.PhoneEndpoint)
+	}
+	if src.SipEndpoint != nil {
+		return json.Marshal(&src.SipEndpoint)
+	}
+	if src.ViberEndpoint != nil {
+		return json.Marshal(&src.ViberEndpoint)
+	}
+	if src.WebRtcEndpoint != nil {
+		return json.Marshal(&src.WebRtcEndpoint)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CallEndpoint) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.PhoneEndpoint != nil {
+		return obj.PhoneEndpoint
+	}
+	if obj.SipEndpoint != nil {
+		return obj.SipEndpoint
+	}
+	if obj.ViberEndpoint != nil {
+		return obj.ViberEndpoint
+	}
+	if obj.WebRtcEndpoint != nil {
+		return obj.WebRtcEndpoint
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCallEndpoint struct {
+	value *CallEndpoint
+	isSet bool
+}
+
+func (v NullableCallEndpoint) Get() *CallEndpoint {
+	return v.value
+}
+
+func (v *NullableCallEndpoint) Set(val *CallEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallEndpoint(val *CallEndpoint) *NullableCallEndpoint {
+	return &NullableCallEndpoint{value: val, isSet: true}
+}
+
+func (v NullableCallEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_endpoint_type.go b/pkg/infobip/models/voice/call_endpoint_type.go
new file mode 100644
index 0000000..1dfbe04
--- /dev/null
+++ b/pkg/infobip/models/voice/call_endpoint_type.go
@@ -0,0 +1,114 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallEndpointType the model 'CallEndpointType'
+type CallEndpointType string
+
+// List of CallEndpointType
+const (
+	CALLENDPOINTTYPE_PHONE  CallEndpointType = "PHONE"
+	CALLENDPOINTTYPE_SIP    CallEndpointType = "SIP"
+	CALLENDPOINTTYPE_WEBRTC CallEndpointType = "WEBRTC"
+	CALLENDPOINTTYPE_VIBER  CallEndpointType = "VIBER"
+)
+
+// All allowed values of CallEndpointType enum
+var AllowedCallEndpointTypeEnumValues = []CallEndpointType{
+	"PHONE",
+	"SIP",
+	"WEBRTC",
+	"VIBER",
+}
+
+func (v *CallEndpointType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallEndpointType(value)
+	for _, existing := range AllowedCallEndpointTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallEndpointType", value)
+}
+
+// NewCallEndpointTypeFromValue returns a pointer to a valid CallEndpointType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallEndpointTypeFromValue(v string) (*CallEndpointType, error) {
+	ev := CallEndpointType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallEndpointType: valid values are %v", v, AllowedCallEndpointTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallEndpointType) IsValid() bool {
+	for _, existing := range AllowedCallEndpointTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallEndpointType value
+func (v CallEndpointType) Ptr() *CallEndpointType {
+	return &v
+}
+
+type NullableCallEndpointType struct {
+	value *CallEndpointType
+	isSet bool
+}
+
+func (v NullableCallEndpointType) Get() *CallEndpointType {
+	return v.value
+}
+
+func (v *NullableCallEndpointType) Set(val *CallEndpointType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallEndpointType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallEndpointType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallEndpointType(val *CallEndpointType) *NullableCallEndpointType {
+	return &NullableCallEndpointType{value: val, isSet: true}
+}
+
+func (v NullableCallEndpointType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallEndpointType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_log.go b/pkg/infobip/models/voice/call_log.go
new file mode 100644
index 0000000..5a1bb17
--- /dev/null
+++ b/pkg/infobip/models/voice/call_log.go
@@ -0,0 +1,929 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallLog type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallLog{}
+
+// CallLog struct for CallLog
+type CallLog struct {
+	// Unique call ID.
+	CallId   *string
+	Endpoint CallEndpoint
+	// Caller ID.
+	From *string
+	// Callee ID.
+	To        *string
+	Direction *CallDirection
+	State     *CallState
+	// Date and time for when the call has been created.
+	StartTime *Time
+	// Date and time for when the call has been answered.
+	AnswerTime *Time
+	// Date and time for when the call has been finished.
+	EndTime *Time
+	// Parent call ID.
+	ParentCallId     *string
+	MachineDetection *MachineDetectionProperties
+	// Ringing duration in seconds.
+	RingDuration *int64
+	// IDs of the calls configurations used during the call.
+	CallsConfigurationIds []string
+	Platform              *Platform
+	// IDs of the conferences where the call was a participant.
+	ConferenceIds []string
+	// Call duration in seconds.
+	Duration *int64
+	// Indicates if camera was enabled during the call.
+	HasCameraVideo *bool
+	// Indicates if screen sharing was enabled during the call.
+	HasScreenshareVideo *bool
+	ErrorCode           *ErrorCodeInfo
+	// Custom data.
+	CustomData *map[string]string
+	// Dialog ID.
+	DialogId *string
+	// Sender.
+	Sender       *string
+	HangupSource *HangupSource
+}
+
+type _CallLog CallLog
+
+// NewCallLog instantiates a new CallLog object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallLog(endpoint CallEndpoint) *CallLog {
+	this := CallLog{}
+	this.Endpoint = endpoint
+	return &this
+}
+
+// NewCallLogWithDefaults instantiates a new CallLog object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallLogWithDefaults() *CallLog {
+	this := CallLog{}
+
+	return &this
+}
+
+// GetCallId returns the CallId field value if set, zero value otherwise.
+func (o *CallLog) GetCallId() string {
+	if o == nil || IsNil(o.CallId) {
+		var ret string
+		return ret
+	}
+	return *o.CallId
+}
+
+// GetCallIdOk returns a tuple with the CallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallId) {
+		return nil, false
+	}
+	return o.CallId, true
+}
+
+// HasCallId returns a boolean if a field has been set.
+func (o *CallLog) HasCallId() bool {
+	if o != nil && !IsNil(o.CallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallId gets a reference to the given string and assigns it to the CallId field.
+func (o *CallLog) SetCallId(v string) {
+	o.CallId = &v
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *CallLog) GetEndpoint() CallEndpoint {
+	if o == nil {
+		var ret CallEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *CallLog) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *CallLog) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *CallLog) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *CallLog) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *CallLog) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *CallLog) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *CallLog) SetTo(v string) {
+	o.To = &v
+}
+
+// GetDirection returns the Direction field value if set, zero value otherwise.
+func (o *CallLog) GetDirection() CallDirection {
+	if o == nil || IsNil(o.Direction) {
+		var ret CallDirection
+		return ret
+	}
+	return *o.Direction
+}
+
+// GetDirectionOk returns a tuple with the Direction field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetDirectionOk() (*CallDirection, bool) {
+	if o == nil || IsNil(o.Direction) {
+		return nil, false
+	}
+	return o.Direction, true
+}
+
+// HasDirection returns a boolean if a field has been set.
+func (o *CallLog) HasDirection() bool {
+	if o != nil && !IsNil(o.Direction) {
+		return true
+	}
+
+	return false
+}
+
+// SetDirection gets a reference to the given CallDirection and assigns it to the Direction field.
+func (o *CallLog) SetDirection(v CallDirection) {
+	o.Direction = &v
+}
+
+// GetState returns the State field value if set, zero value otherwise.
+func (o *CallLog) GetState() CallState {
+	if o == nil || IsNil(o.State) {
+		var ret CallState
+		return ret
+	}
+	return *o.State
+}
+
+// GetStateOk returns a tuple with the State field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetStateOk() (*CallState, bool) {
+	if o == nil || IsNil(o.State) {
+		return nil, false
+	}
+	return o.State, true
+}
+
+// HasState returns a boolean if a field has been set.
+func (o *CallLog) HasState() bool {
+	if o != nil && !IsNil(o.State) {
+		return true
+	}
+
+	return false
+}
+
+// SetState gets a reference to the given CallState and assigns it to the State field.
+func (o *CallLog) SetState(v CallState) {
+	o.State = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *CallLog) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *CallLog) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *CallLog) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetAnswerTime returns the AnswerTime field value if set, zero value otherwise.
+func (o *CallLog) GetAnswerTime() Time {
+	if o == nil || IsNil(o.AnswerTime) {
+		var ret Time
+		return ret
+	}
+	return *o.AnswerTime
+}
+
+// GetAnswerTimeOk returns a tuple with the AnswerTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetAnswerTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.AnswerTime) {
+		return nil, false
+	}
+	return o.AnswerTime, true
+}
+
+// HasAnswerTime returns a boolean if a field has been set.
+func (o *CallLog) HasAnswerTime() bool {
+	if o != nil && !IsNil(o.AnswerTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnswerTime gets a reference to the given Time and assigns it to the AnswerTime field.
+func (o *CallLog) SetAnswerTime(v Time) {
+	o.AnswerTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *CallLog) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *CallLog) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *CallLog) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+// GetParentCallId returns the ParentCallId field value if set, zero value otherwise.
+func (o *CallLog) GetParentCallId() string {
+	if o == nil || IsNil(o.ParentCallId) {
+		var ret string
+		return ret
+	}
+	return *o.ParentCallId
+}
+
+// GetParentCallIdOk returns a tuple with the ParentCallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetParentCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ParentCallId) {
+		return nil, false
+	}
+	return o.ParentCallId, true
+}
+
+// HasParentCallId returns a boolean if a field has been set.
+func (o *CallLog) HasParentCallId() bool {
+	if o != nil && !IsNil(o.ParentCallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetParentCallId gets a reference to the given string and assigns it to the ParentCallId field.
+func (o *CallLog) SetParentCallId(v string) {
+	o.ParentCallId = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *CallLog) GetMachineDetection() MachineDetectionProperties {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret MachineDetectionProperties
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetMachineDetectionOk() (*MachineDetectionProperties, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *CallLog) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given MachineDetectionProperties and assigns it to the MachineDetection field.
+func (o *CallLog) SetMachineDetection(v MachineDetectionProperties) {
+	o.MachineDetection = &v
+}
+
+// GetRingDuration returns the RingDuration field value if set, zero value otherwise.
+func (o *CallLog) GetRingDuration() int64 {
+	if o == nil || IsNil(o.RingDuration) {
+		var ret int64
+		return ret
+	}
+	return *o.RingDuration
+}
+
+// GetRingDurationOk returns a tuple with the RingDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetRingDurationOk() (*int64, bool) {
+	if o == nil || IsNil(o.RingDuration) {
+		return nil, false
+	}
+	return o.RingDuration, true
+}
+
+// HasRingDuration returns a boolean if a field has been set.
+func (o *CallLog) HasRingDuration() bool {
+	if o != nil && !IsNil(o.RingDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingDuration gets a reference to the given int64 and assigns it to the RingDuration field.
+func (o *CallLog) SetRingDuration(v int64) {
+	o.RingDuration = &v
+}
+
+// GetCallsConfigurationIds returns the CallsConfigurationIds field value if set, zero value otherwise.
+func (o *CallLog) GetCallsConfigurationIds() []string {
+	if o == nil || IsNil(o.CallsConfigurationIds) {
+		var ret []string
+		return ret
+	}
+	return o.CallsConfigurationIds
+}
+
+// GetCallsConfigurationIdsOk returns a tuple with the CallsConfigurationIds field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetCallsConfigurationIdsOk() ([]string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationIds) {
+		return nil, false
+	}
+	return o.CallsConfigurationIds, true
+}
+
+// HasCallsConfigurationIds returns a boolean if a field has been set.
+func (o *CallLog) HasCallsConfigurationIds() bool {
+	if o != nil && !IsNil(o.CallsConfigurationIds) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationIds gets a reference to the given []string and assigns it to the CallsConfigurationIds field.
+func (o *CallLog) SetCallsConfigurationIds(v []string) {
+	o.CallsConfigurationIds = v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *CallLog) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *CallLog) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *CallLog) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetConferenceIds returns the ConferenceIds field value if set, zero value otherwise.
+func (o *CallLog) GetConferenceIds() []string {
+	if o == nil || IsNil(o.ConferenceIds) {
+		var ret []string
+		return ret
+	}
+	return o.ConferenceIds
+}
+
+// GetConferenceIdsOk returns a tuple with the ConferenceIds field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetConferenceIdsOk() ([]string, bool) {
+	if o == nil || IsNil(o.ConferenceIds) {
+		return nil, false
+	}
+	return o.ConferenceIds, true
+}
+
+// HasConferenceIds returns a boolean if a field has been set.
+func (o *CallLog) HasConferenceIds() bool {
+	if o != nil && !IsNil(o.ConferenceIds) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceIds gets a reference to the given []string and assigns it to the ConferenceIds field.
+func (o *CallLog) SetConferenceIds(v []string) {
+	o.ConferenceIds = v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *CallLog) GetDuration() int64 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int64
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetDurationOk() (*int64, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *CallLog) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int64 and assigns it to the Duration field.
+func (o *CallLog) SetDuration(v int64) {
+	o.Duration = &v
+}
+
+// GetHasCameraVideo returns the HasCameraVideo field value if set, zero value otherwise.
+func (o *CallLog) GetHasCameraVideo() bool {
+	if o == nil || IsNil(o.HasCameraVideo) {
+		var ret bool
+		return ret
+	}
+	return *o.HasCameraVideo
+}
+
+// GetHasCameraVideoOk returns a tuple with the HasCameraVideo field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetHasCameraVideoOk() (*bool, bool) {
+	if o == nil || IsNil(o.HasCameraVideo) {
+		return nil, false
+	}
+	return o.HasCameraVideo, true
+}
+
+// HasHasCameraVideo returns a boolean if a field has been set.
+func (o *CallLog) HasHasCameraVideo() bool {
+	if o != nil && !IsNil(o.HasCameraVideo) {
+		return true
+	}
+
+	return false
+}
+
+// SetHasCameraVideo gets a reference to the given bool and assigns it to the HasCameraVideo field.
+func (o *CallLog) SetHasCameraVideo(v bool) {
+	o.HasCameraVideo = &v
+}
+
+// GetHasScreenshareVideo returns the HasScreenshareVideo field value if set, zero value otherwise.
+func (o *CallLog) GetHasScreenshareVideo() bool {
+	if o == nil || IsNil(o.HasScreenshareVideo) {
+		var ret bool
+		return ret
+	}
+	return *o.HasScreenshareVideo
+}
+
+// GetHasScreenshareVideoOk returns a tuple with the HasScreenshareVideo field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetHasScreenshareVideoOk() (*bool, bool) {
+	if o == nil || IsNil(o.HasScreenshareVideo) {
+		return nil, false
+	}
+	return o.HasScreenshareVideo, true
+}
+
+// HasHasScreenshareVideo returns a boolean if a field has been set.
+func (o *CallLog) HasHasScreenshareVideo() bool {
+	if o != nil && !IsNil(o.HasScreenshareVideo) {
+		return true
+	}
+
+	return false
+}
+
+// SetHasScreenshareVideo gets a reference to the given bool and assigns it to the HasScreenshareVideo field.
+func (o *CallLog) SetHasScreenshareVideo(v bool) {
+	o.HasScreenshareVideo = &v
+}
+
+// GetErrorCode returns the ErrorCode field value if set, zero value otherwise.
+func (o *CallLog) GetErrorCode() ErrorCodeInfo {
+	if o == nil || IsNil(o.ErrorCode) {
+		var ret ErrorCodeInfo
+		return ret
+	}
+	return *o.ErrorCode
+}
+
+// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetErrorCodeOk() (*ErrorCodeInfo, bool) {
+	if o == nil || IsNil(o.ErrorCode) {
+		return nil, false
+	}
+	return o.ErrorCode, true
+}
+
+// HasErrorCode returns a boolean if a field has been set.
+func (o *CallLog) HasErrorCode() bool {
+	if o != nil && !IsNil(o.ErrorCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorCode gets a reference to the given ErrorCodeInfo and assigns it to the ErrorCode field.
+func (o *CallLog) SetErrorCode(v ErrorCodeInfo) {
+	o.ErrorCode = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *CallLog) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *CallLog) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *CallLog) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetDialogId returns the DialogId field value if set, zero value otherwise.
+func (o *CallLog) GetDialogId() string {
+	if o == nil || IsNil(o.DialogId) {
+		var ret string
+		return ret
+	}
+	return *o.DialogId
+}
+
+// GetDialogIdOk returns a tuple with the DialogId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetDialogIdOk() (*string, bool) {
+	if o == nil || IsNil(o.DialogId) {
+		return nil, false
+	}
+	return o.DialogId, true
+}
+
+// HasDialogId returns a boolean if a field has been set.
+func (o *CallLog) HasDialogId() bool {
+	if o != nil && !IsNil(o.DialogId) {
+		return true
+	}
+
+	return false
+}
+
+// SetDialogId gets a reference to the given string and assigns it to the DialogId field.
+func (o *CallLog) SetDialogId(v string) {
+	o.DialogId = &v
+}
+
+// GetSender returns the Sender field value if set, zero value otherwise.
+func (o *CallLog) GetSender() string {
+	if o == nil || IsNil(o.Sender) {
+		var ret string
+		return ret
+	}
+	return *o.Sender
+}
+
+// GetSenderOk returns a tuple with the Sender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetSenderOk() (*string, bool) {
+	if o == nil || IsNil(o.Sender) {
+		return nil, false
+	}
+	return o.Sender, true
+}
+
+// HasSender returns a boolean if a field has been set.
+func (o *CallLog) HasSender() bool {
+	if o != nil && !IsNil(o.Sender) {
+		return true
+	}
+
+	return false
+}
+
+// SetSender gets a reference to the given string and assigns it to the Sender field.
+func (o *CallLog) SetSender(v string) {
+	o.Sender = &v
+}
+
+// GetHangupSource returns the HangupSource field value if set, zero value otherwise.
+func (o *CallLog) GetHangupSource() HangupSource {
+	if o == nil || IsNil(o.HangupSource) {
+		var ret HangupSource
+		return ret
+	}
+	return *o.HangupSource
+}
+
+// GetHangupSourceOk returns a tuple with the HangupSource field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLog) GetHangupSourceOk() (*HangupSource, bool) {
+	if o == nil || IsNil(o.HangupSource) {
+		return nil, false
+	}
+	return o.HangupSource, true
+}
+
+// HasHangupSource returns a boolean if a field has been set.
+func (o *CallLog) HasHangupSource() bool {
+	if o != nil && !IsNil(o.HangupSource) {
+		return true
+	}
+
+	return false
+}
+
+// SetHangupSource gets a reference to the given HangupSource and assigns it to the HangupSource field.
+func (o *CallLog) SetHangupSource(v HangupSource) {
+	o.HangupSource = &v
+}
+
+func (o CallLog) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallLog) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallId) {
+		toSerialize["callId"] = o.CallId
+	}
+	toSerialize["endpoint"] = o.Endpoint
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.Direction) {
+		toSerialize["direction"] = o.Direction
+	}
+	if !IsNil(o.State) {
+		toSerialize["state"] = o.State
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.AnswerTime) {
+		toSerialize["answerTime"] = o.AnswerTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.ParentCallId) {
+		toSerialize["parentCallId"] = o.ParentCallId
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.RingDuration) {
+		toSerialize["ringDuration"] = o.RingDuration
+	}
+	if !IsNil(o.CallsConfigurationIds) {
+		toSerialize["callsConfigurationIds"] = o.CallsConfigurationIds
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.ConferenceIds) {
+		toSerialize["conferenceIds"] = o.ConferenceIds
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.HasCameraVideo) {
+		toSerialize["hasCameraVideo"] = o.HasCameraVideo
+	}
+	if !IsNil(o.HasScreenshareVideo) {
+		toSerialize["hasScreenshareVideo"] = o.HasScreenshareVideo
+	}
+	if !IsNil(o.ErrorCode) {
+		toSerialize["errorCode"] = o.ErrorCode
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.DialogId) {
+		toSerialize["dialogId"] = o.DialogId
+	}
+	if !IsNil(o.Sender) {
+		toSerialize["sender"] = o.Sender
+	}
+	if !IsNil(o.HangupSource) {
+		toSerialize["hangupSource"] = o.HangupSource
+	}
+	return toSerialize, nil
+}
+
+type NullableCallLog struct {
+	value *CallLog
+	isSet bool
+}
+
+func (v NullableCallLog) Get() *CallLog {
+	return v.value
+}
+
+func (v *NullableCallLog) Set(val *CallLog) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallLog) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallLog) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallLog(val *CallLog) *NullableCallLog {
+	return &NullableCallLog{value: val, isSet: true}
+}
+
+func (v NullableCallLog) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallLog) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_log_page.go b/pkg/infobip/models/voice/call_log_page.go
new file mode 100644
index 0000000..7ae4527
--- /dev/null
+++ b/pkg/infobip/models/voice/call_log_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallLogPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallLogPage{}
+
+// CallLogPage struct for CallLogPage
+type CallLogPage struct {
+	// The list of the results for this page.
+	Results []CallLog
+	Paging  *PageInfo
+}
+
+// NewCallLogPage instantiates a new CallLogPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallLogPage() *CallLogPage {
+	this := CallLogPage{}
+	return &this
+}
+
+// NewCallLogPageWithDefaults instantiates a new CallLogPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallLogPageWithDefaults() *CallLogPage {
+	this := CallLogPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *CallLogPage) GetResults() []CallLog {
+	if o == nil || IsNil(o.Results) {
+		var ret []CallLog
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLogPage) GetResultsOk() ([]CallLog, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *CallLogPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []CallLog and assigns it to the Results field.
+func (o *CallLogPage) SetResults(v []CallLog) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *CallLogPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallLogPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *CallLogPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *CallLogPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o CallLogPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallLogPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableCallLogPage struct {
+	value *CallLogPage
+	isSet bool
+}
+
+func (v NullableCallLogPage) Get() *CallLogPage {
+	return v.value
+}
+
+func (v *NullableCallLogPage) Set(val *CallLogPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallLogPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallLogPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallLogPage(val *CallLogPage) *NullableCallLogPage {
+	return &NullableCallLogPage{value: val, isSet: true}
+}
+
+func (v NullableCallLogPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallLogPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_page.go b/pkg/infobip/models/voice/call_page.go
new file mode 100644
index 0000000..7bb5884
--- /dev/null
+++ b/pkg/infobip/models/voice/call_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallPage{}
+
+// CallPage struct for CallPage
+type CallPage struct {
+	// The list of the results for this page.
+	Results []Call
+	Paging  *PageInfo
+}
+
+// NewCallPage instantiates a new CallPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallPage() *CallPage {
+	this := CallPage{}
+	return &this
+}
+
+// NewCallPageWithDefaults instantiates a new CallPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallPageWithDefaults() *CallPage {
+	this := CallPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *CallPage) GetResults() []Call {
+	if o == nil || IsNil(o.Results) {
+		var ret []Call
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallPage) GetResultsOk() ([]Call, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *CallPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []Call and assigns it to the Results field.
+func (o *CallPage) SetResults(v []Call) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *CallPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *CallPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *CallPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o CallPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableCallPage struct {
+	value *CallPage
+	isSet bool
+}
+
+func (v NullableCallPage) Get() *CallPage {
+	return v.value
+}
+
+func (v *NullableCallPage) Set(val *CallPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallPage(val *CallPage) *NullableCallPage {
+	return &NullableCallPage{value: val, isSet: true}
+}
+
+func (v NullableCallPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_rate.go b/pkg/infobip/models/voice/call_rate.go
new file mode 100644
index 0000000..1a805d6
--- /dev/null
+++ b/pkg/infobip/models/voice/call_rate.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRate type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRate{}
+
+// CallRate Call rate defined in number of calls created per second, minute, hour, or day.
+type CallRate struct {
+	// Defines the number of calls scheduled per specified time unit.
+	MaxCalls *int32
+	TimeUnit *TimeUnit
+}
+
+// NewCallRate instantiates a new CallRate object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRate() *CallRate {
+	this := CallRate{}
+	return &this
+}
+
+// NewCallRateWithDefaults instantiates a new CallRate object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRateWithDefaults() *CallRate {
+	this := CallRate{}
+
+	return &this
+}
+
+// GetMaxCalls returns the MaxCalls field value if set, zero value otherwise.
+func (o *CallRate) GetMaxCalls() int32 {
+	if o == nil || IsNil(o.MaxCalls) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxCalls
+}
+
+// GetMaxCallsOk returns a tuple with the MaxCalls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRate) GetMaxCallsOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxCalls) {
+		return nil, false
+	}
+	return o.MaxCalls, true
+}
+
+// HasMaxCalls returns a boolean if a field has been set.
+func (o *CallRate) HasMaxCalls() bool {
+	if o != nil && !IsNil(o.MaxCalls) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxCalls gets a reference to the given int32 and assigns it to the MaxCalls field.
+func (o *CallRate) SetMaxCalls(v int32) {
+	o.MaxCalls = &v
+}
+
+// GetTimeUnit returns the TimeUnit field value if set, zero value otherwise.
+func (o *CallRate) GetTimeUnit() TimeUnit {
+	if o == nil || IsNil(o.TimeUnit) {
+		var ret TimeUnit
+		return ret
+	}
+	return *o.TimeUnit
+}
+
+// GetTimeUnitOk returns a tuple with the TimeUnit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRate) GetTimeUnitOk() (*TimeUnit, bool) {
+	if o == nil || IsNil(o.TimeUnit) {
+		return nil, false
+	}
+	return o.TimeUnit, true
+}
+
+// HasTimeUnit returns a boolean if a field has been set.
+func (o *CallRate) HasTimeUnit() bool {
+	if o != nil && !IsNil(o.TimeUnit) {
+		return true
+	}
+
+	return false
+}
+
+// SetTimeUnit gets a reference to the given TimeUnit and assigns it to the TimeUnit field.
+func (o *CallRate) SetTimeUnit(v TimeUnit) {
+	o.TimeUnit = &v
+}
+
+func (o CallRate) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRate) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MaxCalls) {
+		toSerialize["maxCalls"] = o.MaxCalls
+	}
+	if !IsNil(o.TimeUnit) {
+		toSerialize["timeUnit"] = o.TimeUnit
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRate struct {
+	value *CallRate
+	isSet bool
+}
+
+func (v NullableCallRate) Get() *CallRate {
+	return v.value
+}
+
+func (v *NullableCallRate) Set(val *CallRate) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRate) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRate) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRate(val *CallRate) *NullableCallRate {
+	return &NullableCallRate{value: val, isSet: true}
+}
+
+func (v NullableCallRate) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRate) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_recording_page.go b/pkg/infobip/models/voice/call_recording_page.go
new file mode 100644
index 0000000..f19f388
--- /dev/null
+++ b/pkg/infobip/models/voice/call_recording_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRecordingPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRecordingPage{}
+
+// CallRecordingPage struct for CallRecordingPage
+type CallRecordingPage struct {
+	// The list of the results for this page.
+	Results []Recording
+	Paging  *PageInfo
+}
+
+// NewCallRecordingPage instantiates a new CallRecordingPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRecordingPage() *CallRecordingPage {
+	this := CallRecordingPage{}
+	return &this
+}
+
+// NewCallRecordingPageWithDefaults instantiates a new CallRecordingPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRecordingPageWithDefaults() *CallRecordingPage {
+	this := CallRecordingPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *CallRecordingPage) GetResults() []Recording {
+	if o == nil || IsNil(o.Results) {
+		var ret []Recording
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRecordingPage) GetResultsOk() ([]Recording, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *CallRecordingPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []Recording and assigns it to the Results field.
+func (o *CallRecordingPage) SetResults(v []Recording) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *CallRecordingPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRecordingPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *CallRecordingPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *CallRecordingPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o CallRecordingPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRecordingPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRecordingPage struct {
+	value *CallRecordingPage
+	isSet bool
+}
+
+func (v NullableCallRecordingPage) Get() *CallRecordingPage {
+	return v.value
+}
+
+func (v *NullableCallRecordingPage) Set(val *CallRecordingPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRecordingPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRecordingPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRecordingPage(val *CallRecordingPage) *NullableCallRecordingPage {
+	return &NullableCallRecordingPage{value: val, isSet: true}
+}
+
+func (v NullableCallRecordingPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRecordingPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_recording_request.go b/pkg/infobip/models/voice/call_recording_request.go
new file mode 100644
index 0000000..5e2d998
--- /dev/null
+++ b/pkg/infobip/models/voice/call_recording_request.go
@@ -0,0 +1,193 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRecordingRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRecordingRequest{}
+
+// CallRecordingRequest struct for CallRecordingRequest
+type CallRecordingRequest struct {
+	RecordingType RecordingType
+	CustomData    *map[string]string
+	FilePrefix    *string
+}
+
+type _CallRecordingRequest CallRecordingRequest
+
+// NewCallRecordingRequest instantiates a new CallRecordingRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRecordingRequest(recordingType RecordingType) *CallRecordingRequest {
+	this := CallRecordingRequest{}
+	this.RecordingType = recordingType
+	return &this
+}
+
+// NewCallRecordingRequestWithDefaults instantiates a new CallRecordingRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRecordingRequestWithDefaults() *CallRecordingRequest {
+	this := CallRecordingRequest{}
+
+	return &this
+}
+
+// GetRecordingType returns the RecordingType field value
+func (o *CallRecordingRequest) GetRecordingType() RecordingType {
+	if o == nil {
+		var ret RecordingType
+		return ret
+	}
+
+	return o.RecordingType
+}
+
+// GetRecordingTypeOk returns a tuple with the RecordingType field value
+// and a boolean to check if the value has been set.
+func (o *CallRecordingRequest) GetRecordingTypeOk() (*RecordingType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.RecordingType, true
+}
+
+// SetRecordingType sets field value
+func (o *CallRecordingRequest) SetRecordingType(v RecordingType) {
+	o.RecordingType = v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *CallRecordingRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRecordingRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *CallRecordingRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *CallRecordingRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetFilePrefix returns the FilePrefix field value if set, zero value otherwise.
+func (o *CallRecordingRequest) GetFilePrefix() string {
+	if o == nil || IsNil(o.FilePrefix) {
+		var ret string
+		return ret
+	}
+	return *o.FilePrefix
+}
+
+// GetFilePrefixOk returns a tuple with the FilePrefix field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRecordingRequest) GetFilePrefixOk() (*string, bool) {
+	if o == nil || IsNil(o.FilePrefix) {
+		return nil, false
+	}
+	return o.FilePrefix, true
+}
+
+// HasFilePrefix returns a boolean if a field has been set.
+func (o *CallRecordingRequest) HasFilePrefix() bool {
+	if o != nil && !IsNil(o.FilePrefix) {
+		return true
+	}
+
+	return false
+}
+
+// SetFilePrefix gets a reference to the given string and assigns it to the FilePrefix field.
+func (o *CallRecordingRequest) SetFilePrefix(v string) {
+	o.FilePrefix = &v
+}
+
+func (o CallRecordingRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRecordingRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["recordingType"] = o.RecordingType
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.FilePrefix) {
+		toSerialize["filePrefix"] = o.FilePrefix
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRecordingRequest struct {
+	value *CallRecordingRequest
+	isSet bool
+}
+
+func (v NullableCallRecordingRequest) Get() *CallRecordingRequest {
+	return v.value
+}
+
+func (v *NullableCallRecordingRequest) Set(val *CallRecordingRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRecordingRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRecordingRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRecordingRequest(val *CallRecordingRequest) *NullableCallRecordingRequest {
+	return &NullableCallRecordingRequest{value: val, isSet: true}
+}
+
+func (v NullableCallRecordingRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRecordingRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_request.go b/pkg/infobip/models/voice/call_request.go
new file mode 100644
index 0000000..0f6885f
--- /dev/null
+++ b/pkg/infobip/models/voice/call_request.go
@@ -0,0 +1,474 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRequest{}
+
+// CallRequest Outbound call request.
+type CallRequest struct {
+	Endpoint CallEndpoint
+	// Caller identifier. Must be a number in the [E.164](https://en.wikipedia.org/wiki/E.164) format for calls to `PHONE`, a string for calls to `WEBRTC` or `SIP`, and a Viber Voice number for calls to `VIBER`.
+	From string
+	// Display name to show when placing calls towards WEBRTC endpoints. Can be any alphanumeric string.
+	FromDisplayName *string
+	// Time to wait, in seconds, before the called party answers the call.
+	ConnectTimeout   *int32
+	Recording        *CallRecordingRequest
+	MachineDetection *MachineDetectionRequest
+	// Max duration in seconds.
+	MaxDuration *int32
+	// Custom data.
+	CustomData *map[string]string
+	// Calls Configuration ID.
+	CallsConfigurationId string
+	Platform             *Platform
+	// ID of an existing call that initiated this leg. Required for [creating a dialog with an existing call.](#create-dialog-with-existing-calls)
+	ParentCallId *string
+}
+
+type _CallRequest CallRequest
+
+// NewCallRequest instantiates a new CallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRequest(endpoint CallEndpoint, from string, callsConfigurationId string) *CallRequest {
+	this := CallRequest{}
+	this.Endpoint = endpoint
+	this.From = from
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	this.CallsConfigurationId = callsConfigurationId
+	return &this
+}
+
+// NewCallRequestWithDefaults instantiates a new CallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRequestWithDefaults() *CallRequest {
+	this := CallRequest{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *CallRequest) GetEndpoint() CallEndpoint {
+	if o == nil {
+		var ret CallEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *CallRequest) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = v
+}
+
+// GetFrom returns the From field value
+func (o *CallRequest) GetFrom() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.From
+}
+
+// GetFromOk returns a tuple with the From field value
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetFromOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.From, true
+}
+
+// SetFrom sets field value
+func (o *CallRequest) SetFrom(v string) {
+	o.From = v
+}
+
+// GetFromDisplayName returns the FromDisplayName field value if set, zero value otherwise.
+func (o *CallRequest) GetFromDisplayName() string {
+	if o == nil || IsNil(o.FromDisplayName) {
+		var ret string
+		return ret
+	}
+	return *o.FromDisplayName
+}
+
+// GetFromDisplayNameOk returns a tuple with the FromDisplayName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetFromDisplayNameOk() (*string, bool) {
+	if o == nil || IsNil(o.FromDisplayName) {
+		return nil, false
+	}
+	return o.FromDisplayName, true
+}
+
+// HasFromDisplayName returns a boolean if a field has been set.
+func (o *CallRequest) HasFromDisplayName() bool {
+	if o != nil && !IsNil(o.FromDisplayName) {
+		return true
+	}
+
+	return false
+}
+
+// SetFromDisplayName gets a reference to the given string and assigns it to the FromDisplayName field.
+func (o *CallRequest) SetFromDisplayName(v string) {
+	o.FromDisplayName = &v
+}
+
+// GetConnectTimeout returns the ConnectTimeout field value if set, zero value otherwise.
+func (o *CallRequest) GetConnectTimeout() int32 {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.ConnectTimeout
+}
+
+// GetConnectTimeoutOk returns a tuple with the ConnectTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetConnectTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		return nil, false
+	}
+	return o.ConnectTimeout, true
+}
+
+// HasConnectTimeout returns a boolean if a field has been set.
+func (o *CallRequest) HasConnectTimeout() bool {
+	if o != nil && !IsNil(o.ConnectTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectTimeout gets a reference to the given int32 and assigns it to the ConnectTimeout field.
+func (o *CallRequest) SetConnectTimeout(v int32) {
+	o.ConnectTimeout = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *CallRequest) GetRecording() CallRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetRecordingOk() (*CallRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *CallRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallRecordingRequest and assigns it to the Recording field.
+func (o *CallRequest) SetRecording(v CallRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *CallRequest) GetMachineDetection() MachineDetectionRequest {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret MachineDetectionRequest
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetMachineDetectionOk() (*MachineDetectionRequest, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *CallRequest) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given MachineDetectionRequest and assigns it to the MachineDetection field.
+func (o *CallRequest) SetMachineDetection(v MachineDetectionRequest) {
+	o.MachineDetection = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *CallRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *CallRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *CallRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *CallRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *CallRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *CallRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value
+func (o *CallRequest) GetCallsConfigurationId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CallsConfigurationId, true
+}
+
+// SetCallsConfigurationId sets field value
+func (o *CallRequest) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *CallRequest) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *CallRequest) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *CallRequest) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetParentCallId returns the ParentCallId field value if set, zero value otherwise.
+func (o *CallRequest) GetParentCallId() string {
+	if o == nil || IsNil(o.ParentCallId) {
+		var ret string
+		return ret
+	}
+	return *o.ParentCallId
+}
+
+// GetParentCallIdOk returns a tuple with the ParentCallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRequest) GetParentCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ParentCallId) {
+		return nil, false
+	}
+	return o.ParentCallId, true
+}
+
+// HasParentCallId returns a boolean if a field has been set.
+func (o *CallRequest) HasParentCallId() bool {
+	if o != nil && !IsNil(o.ParentCallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetParentCallId gets a reference to the given string and assigns it to the ParentCallId field.
+func (o *CallRequest) SetParentCallId(v string) {
+	o.ParentCallId = &v
+}
+
+func (o CallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["endpoint"] = o.Endpoint
+	toSerialize["from"] = o.From
+	if !IsNil(o.FromDisplayName) {
+		toSerialize["fromDisplayName"] = o.FromDisplayName
+	}
+	if !IsNil(o.ConnectTimeout) {
+		toSerialize["connectTimeout"] = o.ConnectTimeout
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.ParentCallId) {
+		toSerialize["parentCallId"] = o.ParentCallId
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRequest struct {
+	value *CallRequest
+	isSet bool
+}
+
+func (v NullableCallRequest) Get() *CallRequest {
+	return v.value
+}
+
+func (v *NullableCallRequest) Set(val *CallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRequest(val *CallRequest) *NullableCallRequest {
+	return &NullableCallRequest{value: val, isSet: true}
+}
+
+func (v NullableCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_criteria.go b/pkg/infobip/models/voice/call_routing_criteria.go
new file mode 100644
index 0000000..58ec473
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_criteria.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingCriteria Criteria type.
+type CallRoutingCriteria struct {
+	CallRoutingPhoneCriteria  *CallRoutingPhoneCriteria
+	CallRoutingSipCriteria    *CallRoutingSipCriteria
+	CallRoutingWebRTCCriteria *CallRoutingWebRTCCriteria
+}
+
+// CallRoutingPhoneCriteriaAsCallRoutingCriteria is a convenience function that returns CallRoutingPhoneCriteria wrapped in CallRoutingCriteria
+func CallRoutingPhoneCriteriaAsCallRoutingCriteria(v *CallRoutingPhoneCriteria) CallRoutingCriteria {
+	return CallRoutingCriteria{
+		CallRoutingPhoneCriteria: v,
+	}
+}
+
+// CallRoutingSipCriteriaAsCallRoutingCriteria is a convenience function that returns CallRoutingSipCriteria wrapped in CallRoutingCriteria
+func CallRoutingSipCriteriaAsCallRoutingCriteria(v *CallRoutingSipCriteria) CallRoutingCriteria {
+	return CallRoutingCriteria{
+		CallRoutingSipCriteria: v,
+	}
+}
+
+// CallRoutingWebRTCCriteriaAsCallRoutingCriteria is a convenience function that returns CallRoutingWebRTCCriteria wrapped in CallRoutingCriteria
+func CallRoutingWebRTCCriteriaAsCallRoutingCriteria(v *CallRoutingWebRTCCriteria) CallRoutingCriteria {
+	return CallRoutingCriteria{
+		CallRoutingWebRTCCriteria: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CallRoutingCriteria) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PHONE'
+	if jsonDict["type"] == "PHONE" {
+		// try to unmarshal JSON data into CallRoutingPhoneCriteria
+		err = json.Unmarshal(data, &dst.CallRoutingPhoneCriteria)
+		if err == nil {
+			jsonCallRoutingPhoneCriteria, _ := json.Marshal(dst.CallRoutingPhoneCriteria)
+			if string(jsonCallRoutingPhoneCriteria) == "{}" { // empty struct
+				dst.CallRoutingPhoneCriteria = nil
+			} else {
+				return nil // data stored in dst.CallRoutingPhoneCriteria, return on the first match
+			}
+		} else {
+			dst.CallRoutingPhoneCriteria = nil
+		}
+	}
+	// check if the discriminator value is 'SIP'
+	if jsonDict["type"] == "SIP" {
+		// try to unmarshal JSON data into CallRoutingSipCriteria
+		err = json.Unmarshal(data, &dst.CallRoutingSipCriteria)
+		if err == nil {
+			jsonCallRoutingSipCriteria, _ := json.Marshal(dst.CallRoutingSipCriteria)
+			if string(jsonCallRoutingSipCriteria) == "{}" { // empty struct
+				dst.CallRoutingSipCriteria = nil
+			} else {
+				return nil // data stored in dst.CallRoutingSipCriteria, return on the first match
+			}
+		} else {
+			dst.CallRoutingSipCriteria = nil
+		}
+	}
+	// check if the discriminator value is 'WEBRTC'
+	if jsonDict["type"] == "WEBRTC" {
+		// try to unmarshal JSON data into CallRoutingWebRTCCriteria
+		err = json.Unmarshal(data, &dst.CallRoutingWebRTCCriteria)
+		if err == nil {
+			jsonCallRoutingWebRTCCriteria, _ := json.Marshal(dst.CallRoutingWebRTCCriteria)
+			if string(jsonCallRoutingWebRTCCriteria) == "{}" { // empty struct
+				dst.CallRoutingWebRTCCriteria = nil
+			} else {
+				return nil // data stored in dst.CallRoutingWebRTCCriteria, return on the first match
+			}
+		} else {
+			dst.CallRoutingWebRTCCriteria = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CallRoutingCriteria)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CallRoutingCriteria) MarshalJSON() ([]byte, error) {
+	if src.CallRoutingPhoneCriteria != nil {
+		return json.Marshal(&src.CallRoutingPhoneCriteria)
+	}
+	if src.CallRoutingSipCriteria != nil {
+		return json.Marshal(&src.CallRoutingSipCriteria)
+	}
+	if src.CallRoutingWebRTCCriteria != nil {
+		return json.Marshal(&src.CallRoutingWebRTCCriteria)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CallRoutingCriteria) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CallRoutingPhoneCriteria != nil {
+		return obj.CallRoutingPhoneCriteria
+	}
+	if obj.CallRoutingSipCriteria != nil {
+		return obj.CallRoutingSipCriteria
+	}
+	if obj.CallRoutingWebRTCCriteria != nil {
+		return obj.CallRoutingWebRTCCriteria
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCallRoutingCriteria struct {
+	value *CallRoutingCriteria
+	isSet bool
+}
+
+func (v NullableCallRoutingCriteria) Get() *CallRoutingCriteria {
+	return v.value
+}
+
+func (v *NullableCallRoutingCriteria) Set(val *CallRoutingCriteria) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingCriteria) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingCriteria) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingCriteria(val *CallRoutingCriteria) *NullableCallRoutingCriteria {
+	return &NullableCallRoutingCriteria{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingCriteria) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingCriteria) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_criteria_type.go b/pkg/infobip/models/voice/call_routing_criteria_type.go
new file mode 100644
index 0000000..5d62677
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_criteria_type.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingCriteriaType the model 'CallRoutingCriteriaType'
+type CallRoutingCriteriaType string
+
+// List of CallRoutingCriteriaType
+const (
+	CALLROUTINGCRITERIATYPE_PHONE  CallRoutingCriteriaType = "PHONE"
+	CALLROUTINGCRITERIATYPE_SIP    CallRoutingCriteriaType = "SIP"
+	CALLROUTINGCRITERIATYPE_WEBRTC CallRoutingCriteriaType = "WEBRTC"
+)
+
+// All allowed values of CallRoutingCriteriaType enum
+var AllowedCallRoutingCriteriaTypeEnumValues = []CallRoutingCriteriaType{
+	"PHONE",
+	"SIP",
+	"WEBRTC",
+}
+
+func (v *CallRoutingCriteriaType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallRoutingCriteriaType(value)
+	for _, existing := range AllowedCallRoutingCriteriaTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallRoutingCriteriaType", value)
+}
+
+// NewCallRoutingCriteriaTypeFromValue returns a pointer to a valid CallRoutingCriteriaType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallRoutingCriteriaTypeFromValue(v string) (*CallRoutingCriteriaType, error) {
+	ev := CallRoutingCriteriaType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallRoutingCriteriaType: valid values are %v", v, AllowedCallRoutingCriteriaTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallRoutingCriteriaType) IsValid() bool {
+	for _, existing := range AllowedCallRoutingCriteriaTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallRoutingCriteriaType value
+func (v CallRoutingCriteriaType) Ptr() *CallRoutingCriteriaType {
+	return &v
+}
+
+type NullableCallRoutingCriteriaType struct {
+	value *CallRoutingCriteriaType
+	isSet bool
+}
+
+func (v NullableCallRoutingCriteriaType) Get() *CallRoutingCriteriaType {
+	return v.value
+}
+
+func (v *NullableCallRoutingCriteriaType) Set(val *CallRoutingCriteriaType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingCriteriaType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingCriteriaType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingCriteriaType(val *CallRoutingCriteriaType) *NullableCallRoutingCriteriaType {
+	return &NullableCallRoutingCriteriaType{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingCriteriaType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingCriteriaType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_custom_data_entry.go b/pkg/infobip/models/voice/call_routing_custom_data_entry.go
new file mode 100644
index 0000000..74b397c
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_custom_data_entry.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingCustomDataEntry type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingCustomDataEntry{}
+
+// CallRoutingCustomDataEntry WebRTC custom data. To meet the criteria, all of the provided custom data pairs must match.
+type CallRoutingCustomDataEntry struct {
+	// Custom data key. Example: `key1`.
+	Key string
+	// Custom data value or regular expression pattern representing the value. Examples: `value1`, `value(.+)`.
+	Value *string
+}
+
+type _CallRoutingCustomDataEntry CallRoutingCustomDataEntry
+
+// NewCallRoutingCustomDataEntry instantiates a new CallRoutingCustomDataEntry object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingCustomDataEntry(key string) *CallRoutingCustomDataEntry {
+	this := CallRoutingCustomDataEntry{}
+	this.Key = key
+	return &this
+}
+
+// NewCallRoutingCustomDataEntryWithDefaults instantiates a new CallRoutingCustomDataEntry object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingCustomDataEntryWithDefaults() *CallRoutingCustomDataEntry {
+	this := CallRoutingCustomDataEntry{}
+
+	return &this
+}
+
+// GetKey returns the Key field value
+func (o *CallRoutingCustomDataEntry) GetKey() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Key
+}
+
+// GetKeyOk returns a tuple with the Key field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingCustomDataEntry) GetKeyOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Key, true
+}
+
+// SetKey sets field value
+func (o *CallRoutingCustomDataEntry) SetKey(v string) {
+	o.Key = v
+}
+
+// GetValue returns the Value field value if set, zero value otherwise.
+func (o *CallRoutingCustomDataEntry) GetValue() string {
+	if o == nil || IsNil(o.Value) {
+		var ret string
+		return ret
+	}
+	return *o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingCustomDataEntry) GetValueOk() (*string, bool) {
+	if o == nil || IsNil(o.Value) {
+		return nil, false
+	}
+	return o.Value, true
+}
+
+// HasValue returns a boolean if a field has been set.
+func (o *CallRoutingCustomDataEntry) HasValue() bool {
+	if o != nil && !IsNil(o.Value) {
+		return true
+	}
+
+	return false
+}
+
+// SetValue gets a reference to the given string and assigns it to the Value field.
+func (o *CallRoutingCustomDataEntry) SetValue(v string) {
+	o.Value = &v
+}
+
+func (o CallRoutingCustomDataEntry) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingCustomDataEntry) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["key"] = o.Key
+	if !IsNil(o.Value) {
+		toSerialize["value"] = o.Value
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingCustomDataEntry struct {
+	value *CallRoutingCustomDataEntry
+	isSet bool
+}
+
+func (v NullableCallRoutingCustomDataEntry) Get() *CallRoutingCustomDataEntry {
+	return v.value
+}
+
+func (v *NullableCallRoutingCustomDataEntry) Set(val *CallRoutingCustomDataEntry) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingCustomDataEntry) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingCustomDataEntry) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingCustomDataEntry(val *CallRoutingCustomDataEntry) *NullableCallRoutingCustomDataEntry {
+	return &NullableCallRoutingCustomDataEntry{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingCustomDataEntry) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingCustomDataEntry) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_destination.go b/pkg/infobip/models/voice/call_routing_destination.go
new file mode 100644
index 0000000..a5f8576
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_destination.go
@@ -0,0 +1,140 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingDestination List of destinations. First destination in the list is the first one to be executed. Subsequent destinations are executed only if the previous one fails.
+type CallRoutingDestination struct {
+	CallRoutingEndpointDestination *CallRoutingEndpointDestination
+	CallRoutingUrlDestination      *CallRoutingUrlDestination
+}
+
+// CallRoutingEndpointDestinationAsCallRoutingDestination is a convenience function that returns CallRoutingEndpointDestination wrapped in CallRoutingDestination
+func CallRoutingEndpointDestinationAsCallRoutingDestination(v *CallRoutingEndpointDestination) CallRoutingDestination {
+	return CallRoutingDestination{
+		CallRoutingEndpointDestination: v,
+	}
+}
+
+// CallRoutingUrlDestinationAsCallRoutingDestination is a convenience function that returns CallRoutingUrlDestination wrapped in CallRoutingDestination
+func CallRoutingUrlDestinationAsCallRoutingDestination(v *CallRoutingUrlDestination) CallRoutingDestination {
+	return CallRoutingDestination{
+		CallRoutingUrlDestination: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CallRoutingDestination) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'ENDPOINT'
+	if jsonDict["type"] == "ENDPOINT" {
+		// try to unmarshal JSON data into CallRoutingEndpointDestination
+		err = json.Unmarshal(data, &dst.CallRoutingEndpointDestination)
+		if err == nil {
+			jsonCallRoutingEndpointDestination, _ := json.Marshal(dst.CallRoutingEndpointDestination)
+			if string(jsonCallRoutingEndpointDestination) == "{}" { // empty struct
+				dst.CallRoutingEndpointDestination = nil
+			} else {
+				return nil // data stored in dst.CallRoutingEndpointDestination, return on the first match
+			}
+		} else {
+			dst.CallRoutingEndpointDestination = nil
+		}
+	}
+	// check if the discriminator value is 'URL'
+	if jsonDict["type"] == "URL" {
+		// try to unmarshal JSON data into CallRoutingUrlDestination
+		err = json.Unmarshal(data, &dst.CallRoutingUrlDestination)
+		if err == nil {
+			jsonCallRoutingUrlDestination, _ := json.Marshal(dst.CallRoutingUrlDestination)
+			if string(jsonCallRoutingUrlDestination) == "{}" { // empty struct
+				dst.CallRoutingUrlDestination = nil
+			} else {
+				return nil // data stored in dst.CallRoutingUrlDestination, return on the first match
+			}
+		} else {
+			dst.CallRoutingUrlDestination = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CallRoutingDestination)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CallRoutingDestination) MarshalJSON() ([]byte, error) {
+	if src.CallRoutingEndpointDestination != nil {
+		return json.Marshal(&src.CallRoutingEndpointDestination)
+	}
+	if src.CallRoutingUrlDestination != nil {
+		return json.Marshal(&src.CallRoutingUrlDestination)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CallRoutingDestination) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CallRoutingEndpointDestination != nil {
+		return obj.CallRoutingEndpointDestination
+	}
+	if obj.CallRoutingUrlDestination != nil {
+		return obj.CallRoutingUrlDestination
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCallRoutingDestination struct {
+	value *CallRoutingDestination
+	isSet bool
+}
+
+func (v NullableCallRoutingDestination) Get() *CallRoutingDestination {
+	return v.value
+}
+
+func (v *NullableCallRoutingDestination) Set(val *CallRoutingDestination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingDestination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingDestination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingDestination(val *CallRoutingDestination) *NullableCallRoutingDestination {
+	return &NullableCallRoutingDestination{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingDestination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingDestination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_destination_type.go b/pkg/infobip/models/voice/call_routing_destination_type.go
new file mode 100644
index 0000000..818365c
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_destination_type.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingDestinationType the model 'CallRoutingDestinationType'
+type CallRoutingDestinationType string
+
+// List of CallRoutingDestinationType
+const (
+	CALLROUTINGDESTINATIONTYPE_APPLICATION CallRoutingDestinationType = "APPLICATION"
+	CALLROUTINGDESTINATIONTYPE_ENDPOINT    CallRoutingDestinationType = "ENDPOINT"
+	CALLROUTINGDESTINATIONTYPE_URL         CallRoutingDestinationType = "URL"
+)
+
+// All allowed values of CallRoutingDestinationType enum
+var AllowedCallRoutingDestinationTypeEnumValues = []CallRoutingDestinationType{
+	"APPLICATION",
+	"ENDPOINT",
+	"URL",
+}
+
+func (v *CallRoutingDestinationType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallRoutingDestinationType(value)
+	for _, existing := range AllowedCallRoutingDestinationTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallRoutingDestinationType", value)
+}
+
+// NewCallRoutingDestinationTypeFromValue returns a pointer to a valid CallRoutingDestinationType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallRoutingDestinationTypeFromValue(v string) (*CallRoutingDestinationType, error) {
+	ev := CallRoutingDestinationType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallRoutingDestinationType: valid values are %v", v, AllowedCallRoutingDestinationTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallRoutingDestinationType) IsValid() bool {
+	for _, existing := range AllowedCallRoutingDestinationTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallRoutingDestinationType value
+func (v CallRoutingDestinationType) Ptr() *CallRoutingDestinationType {
+	return &v
+}
+
+type NullableCallRoutingDestinationType struct {
+	value *CallRoutingDestinationType
+	isSet bool
+}
+
+func (v NullableCallRoutingDestinationType) Get() *CallRoutingDestinationType {
+	return v.value
+}
+
+func (v *NullableCallRoutingDestinationType) Set(val *CallRoutingDestinationType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingDestinationType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingDestinationType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingDestinationType(val *CallRoutingDestinationType) *NullableCallRoutingDestinationType {
+	return &NullableCallRoutingDestinationType{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingDestinationType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingDestinationType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_endpoint.go b/pkg/infobip/models/voice/call_routing_endpoint.go
new file mode 100644
index 0000000..114eb3b
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_endpoint.go
@@ -0,0 +1,198 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingEndpoint Endpoint for a given destination.
+type CallRoutingEndpoint struct {
+	CallRoutingPhoneEndpoint  *CallRoutingPhoneEndpoint
+	CallRoutingSipEndpoint    *CallRoutingSipEndpoint
+	CallRoutingViberEndpoint  *CallRoutingViberEndpoint
+	CallRoutingWebRtcEndpoint *CallRoutingWebRtcEndpoint
+}
+
+// CallRoutingPhoneEndpointAsCallRoutingEndpoint is a convenience function that returns CallRoutingPhoneEndpoint wrapped in CallRoutingEndpoint
+func CallRoutingPhoneEndpointAsCallRoutingEndpoint(v *CallRoutingPhoneEndpoint) CallRoutingEndpoint {
+	return CallRoutingEndpoint{
+		CallRoutingPhoneEndpoint: v,
+	}
+}
+
+// CallRoutingSipEndpointAsCallRoutingEndpoint is a convenience function that returns CallRoutingSipEndpoint wrapped in CallRoutingEndpoint
+func CallRoutingSipEndpointAsCallRoutingEndpoint(v *CallRoutingSipEndpoint) CallRoutingEndpoint {
+	return CallRoutingEndpoint{
+		CallRoutingSipEndpoint: v,
+	}
+}
+
+// CallRoutingViberEndpointAsCallRoutingEndpoint is a convenience function that returns CallRoutingViberEndpoint wrapped in CallRoutingEndpoint
+func CallRoutingViberEndpointAsCallRoutingEndpoint(v *CallRoutingViberEndpoint) CallRoutingEndpoint {
+	return CallRoutingEndpoint{
+		CallRoutingViberEndpoint: v,
+	}
+}
+
+// CallRoutingWebRtcEndpointAsCallRoutingEndpoint is a convenience function that returns CallRoutingWebRtcEndpoint wrapped in CallRoutingEndpoint
+func CallRoutingWebRtcEndpointAsCallRoutingEndpoint(v *CallRoutingWebRtcEndpoint) CallRoutingEndpoint {
+	return CallRoutingEndpoint{
+		CallRoutingWebRtcEndpoint: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CallRoutingEndpoint) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PHONE'
+	if jsonDict["type"] == "PHONE" {
+		// try to unmarshal JSON data into CallRoutingPhoneEndpoint
+		err = json.Unmarshal(data, &dst.CallRoutingPhoneEndpoint)
+		if err == nil {
+			jsonCallRoutingPhoneEndpoint, _ := json.Marshal(dst.CallRoutingPhoneEndpoint)
+			if string(jsonCallRoutingPhoneEndpoint) == "{}" { // empty struct
+				dst.CallRoutingPhoneEndpoint = nil
+			} else {
+				return nil // data stored in dst.CallRoutingPhoneEndpoint, return on the first match
+			}
+		} else {
+			dst.CallRoutingPhoneEndpoint = nil
+		}
+	}
+	// check if the discriminator value is 'SIP'
+	if jsonDict["type"] == "SIP" {
+		// try to unmarshal JSON data into CallRoutingSipEndpoint
+		err = json.Unmarshal(data, &dst.CallRoutingSipEndpoint)
+		if err == nil {
+			jsonCallRoutingSipEndpoint, _ := json.Marshal(dst.CallRoutingSipEndpoint)
+			if string(jsonCallRoutingSipEndpoint) == "{}" { // empty struct
+				dst.CallRoutingSipEndpoint = nil
+			} else {
+				return nil // data stored in dst.CallRoutingSipEndpoint, return on the first match
+			}
+		} else {
+			dst.CallRoutingSipEndpoint = nil
+		}
+	}
+	// check if the discriminator value is 'VIBER'
+	if jsonDict["type"] == "VIBER" {
+		// try to unmarshal JSON data into CallRoutingViberEndpoint
+		err = json.Unmarshal(data, &dst.CallRoutingViberEndpoint)
+		if err == nil {
+			jsonCallRoutingViberEndpoint, _ := json.Marshal(dst.CallRoutingViberEndpoint)
+			if string(jsonCallRoutingViberEndpoint) == "{}" { // empty struct
+				dst.CallRoutingViberEndpoint = nil
+			} else {
+				return nil // data stored in dst.CallRoutingViberEndpoint, return on the first match
+			}
+		} else {
+			dst.CallRoutingViberEndpoint = nil
+		}
+	}
+	// check if the discriminator value is 'WEBRTC'
+	if jsonDict["type"] == "WEBRTC" {
+		// try to unmarshal JSON data into CallRoutingWebRtcEndpoint
+		err = json.Unmarshal(data, &dst.CallRoutingWebRtcEndpoint)
+		if err == nil {
+			jsonCallRoutingWebRtcEndpoint, _ := json.Marshal(dst.CallRoutingWebRtcEndpoint)
+			if string(jsonCallRoutingWebRtcEndpoint) == "{}" { // empty struct
+				dst.CallRoutingWebRtcEndpoint = nil
+			} else {
+				return nil // data stored in dst.CallRoutingWebRtcEndpoint, return on the first match
+			}
+		} else {
+			dst.CallRoutingWebRtcEndpoint = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CallRoutingEndpoint)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CallRoutingEndpoint) MarshalJSON() ([]byte, error) {
+	if src.CallRoutingPhoneEndpoint != nil {
+		return json.Marshal(&src.CallRoutingPhoneEndpoint)
+	}
+	if src.CallRoutingSipEndpoint != nil {
+		return json.Marshal(&src.CallRoutingSipEndpoint)
+	}
+	if src.CallRoutingViberEndpoint != nil {
+		return json.Marshal(&src.CallRoutingViberEndpoint)
+	}
+	if src.CallRoutingWebRtcEndpoint != nil {
+		return json.Marshal(&src.CallRoutingWebRtcEndpoint)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CallRoutingEndpoint) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CallRoutingPhoneEndpoint != nil {
+		return obj.CallRoutingPhoneEndpoint
+	}
+	if obj.CallRoutingSipEndpoint != nil {
+		return obj.CallRoutingSipEndpoint
+	}
+	if obj.CallRoutingViberEndpoint != nil {
+		return obj.CallRoutingViberEndpoint
+	}
+	if obj.CallRoutingWebRtcEndpoint != nil {
+		return obj.CallRoutingWebRtcEndpoint
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCallRoutingEndpoint struct {
+	value *CallRoutingEndpoint
+	isSet bool
+}
+
+func (v NullableCallRoutingEndpoint) Get() *CallRoutingEndpoint {
+	return v.value
+}
+
+func (v *NullableCallRoutingEndpoint) Set(val *CallRoutingEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingEndpoint(val *CallRoutingEndpoint) *NullableCallRoutingEndpoint {
+	return &NullableCallRoutingEndpoint{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_endpoint_destination.go b/pkg/infobip/models/voice/call_routing_endpoint_destination.go
new file mode 100644
index 0000000..7e2bebe
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_endpoint_destination.go
@@ -0,0 +1,305 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingEndpointDestination type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingEndpointDestination{}
+
+// CallRoutingEndpointDestination struct for CallRoutingEndpointDestination
+type CallRoutingEndpointDestination struct {
+	Priority *int32
+	Type     CallRoutingDestinationType
+	Weight   *int32
+	Value    CallRoutingEndpoint
+	// Time to wait, in seconds, to establish a call toward the destination endpoint. The call will be terminated if it is not answered within the specified time.
+	ConnectTimeout *int32
+	Recording      *CallRoutingRecording
+	// Sets specific delivery windows outside of which calls won't be forwarded to the destination. If defined, call forwarding is allowed only if any time window in array is satisfied.
+	AllowedTimeWindows []DeliveryTimeWindow
+}
+
+type _CallRoutingEndpointDestination CallRoutingEndpointDestination
+
+// NewCallRoutingEndpointDestination instantiates a new CallRoutingEndpointDestination object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingEndpointDestination(value CallRoutingEndpoint) *CallRoutingEndpointDestination {
+	this := CallRoutingEndpointDestination{}
+	this.Type = "ENDPOINT"
+	this.Value = value
+	return &this
+}
+
+// NewCallRoutingEndpointDestinationWithDefaults instantiates a new CallRoutingEndpointDestination object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingEndpointDestinationWithDefaults() *CallRoutingEndpointDestination {
+	this := CallRoutingEndpointDestination{}
+	this.Type = "ENDPOINT"
+	return &this
+}
+
+// GetPriority returns the Priority field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestination) GetPriority() int32 {
+	if o == nil || IsNil(o.Priority) {
+		var ret int32
+		return ret
+	}
+	return *o.Priority
+}
+
+// GetPriorityOk returns a tuple with the Priority field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestination) GetPriorityOk() (*int32, bool) {
+	if o == nil || IsNil(o.Priority) {
+		return nil, false
+	}
+	return o.Priority, true
+}
+
+// HasPriority returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestination) HasPriority() bool {
+	if o != nil && !IsNil(o.Priority) {
+		return true
+	}
+
+	return false
+}
+
+// SetPriority gets a reference to the given int32 and assigns it to the Priority field.
+func (o *CallRoutingEndpointDestination) SetPriority(v int32) {
+	o.Priority = &v
+}
+
+// GetWeight returns the Weight field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestination) GetWeight() int32 {
+	if o == nil || IsNil(o.Weight) {
+		var ret int32
+		return ret
+	}
+	return *o.Weight
+}
+
+// GetWeightOk returns a tuple with the Weight field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestination) GetWeightOk() (*int32, bool) {
+	if o == nil || IsNil(o.Weight) {
+		return nil, false
+	}
+	return o.Weight, true
+}
+
+// HasWeight returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestination) HasWeight() bool {
+	if o != nil && !IsNil(o.Weight) {
+		return true
+	}
+
+	return false
+}
+
+// SetWeight gets a reference to the given int32 and assigns it to the Weight field.
+func (o *CallRoutingEndpointDestination) SetWeight(v int32) {
+	o.Weight = &v
+}
+
+// GetValue returns the Value field value
+func (o *CallRoutingEndpointDestination) GetValue() CallRoutingEndpoint {
+	if o == nil {
+		var ret CallRoutingEndpoint
+		return ret
+	}
+
+	return o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestination) GetValueOk() (*CallRoutingEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Value, true
+}
+
+// SetValue sets field value
+func (o *CallRoutingEndpointDestination) SetValue(v CallRoutingEndpoint) {
+	o.Value = v
+}
+
+// GetConnectTimeout returns the ConnectTimeout field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestination) GetConnectTimeout() int32 {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.ConnectTimeout
+}
+
+// GetConnectTimeoutOk returns a tuple with the ConnectTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestination) GetConnectTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		return nil, false
+	}
+	return o.ConnectTimeout, true
+}
+
+// HasConnectTimeout returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestination) HasConnectTimeout() bool {
+	if o != nil && !IsNil(o.ConnectTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectTimeout gets a reference to the given int32 and assigns it to the ConnectTimeout field.
+func (o *CallRoutingEndpointDestination) SetConnectTimeout(v int32) {
+	o.ConnectTimeout = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestination) GetRecording() CallRoutingRecording {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallRoutingRecording
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestination) GetRecordingOk() (*CallRoutingRecording, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestination) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallRoutingRecording and assigns it to the Recording field.
+func (o *CallRoutingEndpointDestination) SetRecording(v CallRoutingRecording) {
+	o.Recording = &v
+}
+
+// GetAllowedTimeWindows returns the AllowedTimeWindows field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestination) GetAllowedTimeWindows() []DeliveryTimeWindow {
+	if o == nil || IsNil(o.AllowedTimeWindows) {
+		var ret []DeliveryTimeWindow
+		return ret
+	}
+	return o.AllowedTimeWindows
+}
+
+// GetAllowedTimeWindowsOk returns a tuple with the AllowedTimeWindows field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestination) GetAllowedTimeWindowsOk() ([]DeliveryTimeWindow, bool) {
+	if o == nil || IsNil(o.AllowedTimeWindows) {
+		return nil, false
+	}
+	return o.AllowedTimeWindows, true
+}
+
+// HasAllowedTimeWindows returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestination) HasAllowedTimeWindows() bool {
+	if o != nil && !IsNil(o.AllowedTimeWindows) {
+		return true
+	}
+
+	return false
+}
+
+// SetAllowedTimeWindows gets a reference to the given []DeliveryTimeWindow and assigns it to the AllowedTimeWindows field.
+func (o *CallRoutingEndpointDestination) SetAllowedTimeWindows(v []DeliveryTimeWindow) {
+	o.AllowedTimeWindows = v
+}
+
+func (o CallRoutingEndpointDestination) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingEndpointDestination) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Priority) {
+		toSerialize["priority"] = o.Priority
+	}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Weight) {
+		toSerialize["weight"] = o.Weight
+	}
+	toSerialize["value"] = o.Value
+	if !IsNil(o.ConnectTimeout) {
+		toSerialize["connectTimeout"] = o.ConnectTimeout
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.AllowedTimeWindows) {
+		toSerialize["allowedTimeWindows"] = o.AllowedTimeWindows
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingEndpointDestination struct {
+	value *CallRoutingEndpointDestination
+	isSet bool
+}
+
+func (v NullableCallRoutingEndpointDestination) Get() *CallRoutingEndpointDestination {
+	return v.value
+}
+
+func (v *NullableCallRoutingEndpointDestination) Set(val *CallRoutingEndpointDestination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingEndpointDestination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingEndpointDestination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingEndpointDestination(val *CallRoutingEndpointDestination) *NullableCallRoutingEndpointDestination {
+	return &NullableCallRoutingEndpointDestination{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingEndpointDestination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingEndpointDestination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_endpoint_destination_response.go b/pkg/infobip/models/voice/call_routing_endpoint_destination_response.go
new file mode 100644
index 0000000..6586996
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_endpoint_destination_response.go
@@ -0,0 +1,196 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingEndpointDestinationResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingEndpointDestinationResponse{}
+
+// CallRoutingEndpointDestinationResponse struct for CallRoutingEndpointDestinationResponse
+type CallRoutingEndpointDestinationResponse struct {
+	Type  CallRoutingDestinationType
+	Value CallRoutingEndpoint
+	// Time to wait, in seconds, to establish a call toward the destination endpoint. The call will be terminated if it is not answered within the specified time.
+	ConnectTimeout *int32
+	Recording      *CallRoutingRecording
+}
+
+type _CallRoutingEndpointDestinationResponse CallRoutingEndpointDestinationResponse
+
+// NewCallRoutingEndpointDestinationResponse instantiates a new CallRoutingEndpointDestinationResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingEndpointDestinationResponse(value CallRoutingEndpoint) *CallRoutingEndpointDestinationResponse {
+	this := CallRoutingEndpointDestinationResponse{}
+	this.Type = "ENDPOINT"
+	this.Value = value
+	return &this
+}
+
+// NewCallRoutingEndpointDestinationResponseWithDefaults instantiates a new CallRoutingEndpointDestinationResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingEndpointDestinationResponseWithDefaults() *CallRoutingEndpointDestinationResponse {
+	this := CallRoutingEndpointDestinationResponse{}
+	this.Type = "ENDPOINT"
+	return &this
+}
+
+// GetValue returns the Value field value
+func (o *CallRoutingEndpointDestinationResponse) GetValue() CallRoutingEndpoint {
+	if o == nil {
+		var ret CallRoutingEndpoint
+		return ret
+	}
+
+	return o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestinationResponse) GetValueOk() (*CallRoutingEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Value, true
+}
+
+// SetValue sets field value
+func (o *CallRoutingEndpointDestinationResponse) SetValue(v CallRoutingEndpoint) {
+	o.Value = v
+}
+
+// GetConnectTimeout returns the ConnectTimeout field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestinationResponse) GetConnectTimeout() int32 {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.ConnectTimeout
+}
+
+// GetConnectTimeoutOk returns a tuple with the ConnectTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestinationResponse) GetConnectTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		return nil, false
+	}
+	return o.ConnectTimeout, true
+}
+
+// HasConnectTimeout returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestinationResponse) HasConnectTimeout() bool {
+	if o != nil && !IsNil(o.ConnectTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectTimeout gets a reference to the given int32 and assigns it to the ConnectTimeout field.
+func (o *CallRoutingEndpointDestinationResponse) SetConnectTimeout(v int32) {
+	o.ConnectTimeout = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *CallRoutingEndpointDestinationResponse) GetRecording() CallRoutingRecording {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallRoutingRecording
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingEndpointDestinationResponse) GetRecordingOk() (*CallRoutingRecording, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *CallRoutingEndpointDestinationResponse) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallRoutingRecording and assigns it to the Recording field.
+func (o *CallRoutingEndpointDestinationResponse) SetRecording(v CallRoutingRecording) {
+	o.Recording = &v
+}
+
+func (o CallRoutingEndpointDestinationResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingEndpointDestinationResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["value"] = o.Value
+	if !IsNil(o.ConnectTimeout) {
+		toSerialize["connectTimeout"] = o.ConnectTimeout
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingEndpointDestinationResponse struct {
+	value *CallRoutingEndpointDestinationResponse
+	isSet bool
+}
+
+func (v NullableCallRoutingEndpointDestinationResponse) Get() *CallRoutingEndpointDestinationResponse {
+	return v.value
+}
+
+func (v *NullableCallRoutingEndpointDestinationResponse) Set(val *CallRoutingEndpointDestinationResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingEndpointDestinationResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingEndpointDestinationResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingEndpointDestinationResponse(val *CallRoutingEndpointDestinationResponse) *NullableCallRoutingEndpointDestinationResponse {
+	return &NullableCallRoutingEndpointDestinationResponse{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingEndpointDestinationResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingEndpointDestinationResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_endpoint_type.go b/pkg/infobip/models/voice/call_routing_endpoint_type.go
new file mode 100644
index 0000000..ab807b5
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_endpoint_type.go
@@ -0,0 +1,114 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingEndpointType the model 'CallRoutingEndpointType'
+type CallRoutingEndpointType string
+
+// List of CallRoutingEndpointType
+const (
+	CALLROUTINGENDPOINTTYPE_PHONE  CallRoutingEndpointType = "PHONE"
+	CALLROUTINGENDPOINTTYPE_SIP    CallRoutingEndpointType = "SIP"
+	CALLROUTINGENDPOINTTYPE_WEBRTC CallRoutingEndpointType = "WEBRTC"
+	CALLROUTINGENDPOINTTYPE_VIBER  CallRoutingEndpointType = "VIBER"
+)
+
+// All allowed values of CallRoutingEndpointType enum
+var AllowedCallRoutingEndpointTypeEnumValues = []CallRoutingEndpointType{
+	"PHONE",
+	"SIP",
+	"WEBRTC",
+	"VIBER",
+}
+
+func (v *CallRoutingEndpointType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallRoutingEndpointType(value)
+	for _, existing := range AllowedCallRoutingEndpointTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallRoutingEndpointType", value)
+}
+
+// NewCallRoutingEndpointTypeFromValue returns a pointer to a valid CallRoutingEndpointType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallRoutingEndpointTypeFromValue(v string) (*CallRoutingEndpointType, error) {
+	ev := CallRoutingEndpointType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallRoutingEndpointType: valid values are %v", v, AllowedCallRoutingEndpointTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallRoutingEndpointType) IsValid() bool {
+	for _, existing := range AllowedCallRoutingEndpointTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallRoutingEndpointType value
+func (v CallRoutingEndpointType) Ptr() *CallRoutingEndpointType {
+	return &v
+}
+
+type NullableCallRoutingEndpointType struct {
+	value *CallRoutingEndpointType
+	isSet bool
+}
+
+func (v NullableCallRoutingEndpointType) Get() *CallRoutingEndpointType {
+	return v.value
+}
+
+func (v *NullableCallRoutingEndpointType) Set(val *CallRoutingEndpointType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingEndpointType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingEndpointType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingEndpointType(val *CallRoutingEndpointType) *NullableCallRoutingEndpointType {
+	return &NullableCallRoutingEndpointType{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingEndpointType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingEndpointType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_phone_criteria.go b/pkg/infobip/models/voice/call_routing_phone_criteria.go
new file mode 100644
index 0000000..3931ead
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_phone_criteria.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingPhoneCriteria type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingPhoneCriteria{}
+
+// CallRoutingPhoneCriteria struct for CallRoutingPhoneCriteria
+type CallRoutingPhoneCriteria struct {
+	Type CallRoutingCriteriaType
+	// Phone number or regular expression pattern representing the phone number. Examples: `41793026727`, `41793(.+)`.
+	From *string
+}
+
+type _CallRoutingPhoneCriteria CallRoutingPhoneCriteria
+
+// NewCallRoutingPhoneCriteria instantiates a new CallRoutingPhoneCriteria object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingPhoneCriteria() *CallRoutingPhoneCriteria {
+	this := CallRoutingPhoneCriteria{}
+	this.Type = "PHONE"
+	return &this
+}
+
+// NewCallRoutingPhoneCriteriaWithDefaults instantiates a new CallRoutingPhoneCriteria object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingPhoneCriteriaWithDefaults() *CallRoutingPhoneCriteria {
+	this := CallRoutingPhoneCriteria{}
+	this.Type = "PHONE"
+	return &this
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *CallRoutingPhoneCriteria) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingPhoneCriteria) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *CallRoutingPhoneCriteria) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *CallRoutingPhoneCriteria) SetFrom(v string) {
+	o.From = &v
+}
+
+func (o CallRoutingPhoneCriteria) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingPhoneCriteria) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingPhoneCriteria struct {
+	value *CallRoutingPhoneCriteria
+	isSet bool
+}
+
+func (v NullableCallRoutingPhoneCriteria) Get() *CallRoutingPhoneCriteria {
+	return v.value
+}
+
+func (v *NullableCallRoutingPhoneCriteria) Set(val *CallRoutingPhoneCriteria) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingPhoneCriteria) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingPhoneCriteria) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingPhoneCriteria(val *CallRoutingPhoneCriteria) *NullableCallRoutingPhoneCriteria {
+	return &NullableCallRoutingPhoneCriteria{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingPhoneCriteria) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingPhoneCriteria) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_phone_endpoint.go b/pkg/infobip/models/voice/call_routing_phone_endpoint.go
new file mode 100644
index 0000000..c3b24f7
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_phone_endpoint.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingPhoneEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingPhoneEndpoint{}
+
+// CallRoutingPhoneEndpoint struct for CallRoutingPhoneEndpoint
+type CallRoutingPhoneEndpoint struct {
+	Type CallRoutingEndpointType
+	// Phone number in the [E.164](https://en.wikipedia.org/wiki/E.164) format. Defaults to `to` value used in inbound call.
+	PhoneNumber *string
+}
+
+type _CallRoutingPhoneEndpoint CallRoutingPhoneEndpoint
+
+// NewCallRoutingPhoneEndpoint instantiates a new CallRoutingPhoneEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingPhoneEndpoint() *CallRoutingPhoneEndpoint {
+	this := CallRoutingPhoneEndpoint{}
+	this.Type = "PHONE"
+	return &this
+}
+
+// NewCallRoutingPhoneEndpointWithDefaults instantiates a new CallRoutingPhoneEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingPhoneEndpointWithDefaults() *CallRoutingPhoneEndpoint {
+	this := CallRoutingPhoneEndpoint{}
+	this.Type = "PHONE"
+	return &this
+}
+
+// GetPhoneNumber returns the PhoneNumber field value if set, zero value otherwise.
+func (o *CallRoutingPhoneEndpoint) GetPhoneNumber() string {
+	if o == nil || IsNil(o.PhoneNumber) {
+		var ret string
+		return ret
+	}
+	return *o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingPhoneEndpoint) GetPhoneNumberOk() (*string, bool) {
+	if o == nil || IsNil(o.PhoneNumber) {
+		return nil, false
+	}
+	return o.PhoneNumber, true
+}
+
+// HasPhoneNumber returns a boolean if a field has been set.
+func (o *CallRoutingPhoneEndpoint) HasPhoneNumber() bool {
+	if o != nil && !IsNil(o.PhoneNumber) {
+		return true
+	}
+
+	return false
+}
+
+// SetPhoneNumber gets a reference to the given string and assigns it to the PhoneNumber field.
+func (o *CallRoutingPhoneEndpoint) SetPhoneNumber(v string) {
+	o.PhoneNumber = &v
+}
+
+func (o CallRoutingPhoneEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingPhoneEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.PhoneNumber) {
+		toSerialize["phoneNumber"] = o.PhoneNumber
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingPhoneEndpoint struct {
+	value *CallRoutingPhoneEndpoint
+	isSet bool
+}
+
+func (v NullableCallRoutingPhoneEndpoint) Get() *CallRoutingPhoneEndpoint {
+	return v.value
+}
+
+func (v *NullableCallRoutingPhoneEndpoint) Set(val *CallRoutingPhoneEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingPhoneEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingPhoneEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingPhoneEndpoint(val *CallRoutingPhoneEndpoint) *NullableCallRoutingPhoneEndpoint {
+	return &NullableCallRoutingPhoneEndpoint{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingPhoneEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingPhoneEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_recording.go b/pkg/infobip/models/voice/call_routing_recording.go
new file mode 100644
index 0000000..8c8406c
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_recording.go
@@ -0,0 +1,231 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingRecording type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingRecording{}
+
+// CallRoutingRecording If set, captures the call session from an established call to a given destination.
+type CallRoutingRecording struct {
+	RecordingType        CallRoutingRecordingType
+	RecordingComposition *CallRoutingRecordingComposition
+	// Client-defined data visible when a recording is downloaded.
+	CustomData *map[string]string
+	// Custom name for the recording's zip file. Applicable only when SFTP server is enabled on [Voice settings page](https://portal.infobip.com/apps/voice/recording/settings). For recordings without composition, `callId` and `fileId` will be appended to the `filePrefix` value. For recordings with composition, `fileId` will be appended to the `filePrefix` value.
+	FilePrefix *string
+}
+
+type _CallRoutingRecording CallRoutingRecording
+
+// NewCallRoutingRecording instantiates a new CallRoutingRecording object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingRecording(recordingType CallRoutingRecordingType) *CallRoutingRecording {
+	this := CallRoutingRecording{}
+	this.RecordingType = recordingType
+	return &this
+}
+
+// NewCallRoutingRecordingWithDefaults instantiates a new CallRoutingRecording object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingRecordingWithDefaults() *CallRoutingRecording {
+	this := CallRoutingRecording{}
+
+	return &this
+}
+
+// GetRecordingType returns the RecordingType field value
+func (o *CallRoutingRecording) GetRecordingType() CallRoutingRecordingType {
+	if o == nil {
+		var ret CallRoutingRecordingType
+		return ret
+	}
+
+	return o.RecordingType
+}
+
+// GetRecordingTypeOk returns a tuple with the RecordingType field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRecording) GetRecordingTypeOk() (*CallRoutingRecordingType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.RecordingType, true
+}
+
+// SetRecordingType sets field value
+func (o *CallRoutingRecording) SetRecordingType(v CallRoutingRecordingType) {
+	o.RecordingType = v
+}
+
+// GetRecordingComposition returns the RecordingComposition field value if set, zero value otherwise.
+func (o *CallRoutingRecording) GetRecordingComposition() CallRoutingRecordingComposition {
+	if o == nil || IsNil(o.RecordingComposition) {
+		var ret CallRoutingRecordingComposition
+		return ret
+	}
+	return *o.RecordingComposition
+}
+
+// GetRecordingCompositionOk returns a tuple with the RecordingComposition field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRecording) GetRecordingCompositionOk() (*CallRoutingRecordingComposition, bool) {
+	if o == nil || IsNil(o.RecordingComposition) {
+		return nil, false
+	}
+	return o.RecordingComposition, true
+}
+
+// HasRecordingComposition returns a boolean if a field has been set.
+func (o *CallRoutingRecording) HasRecordingComposition() bool {
+	if o != nil && !IsNil(o.RecordingComposition) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordingComposition gets a reference to the given CallRoutingRecordingComposition and assigns it to the RecordingComposition field.
+func (o *CallRoutingRecording) SetRecordingComposition(v CallRoutingRecordingComposition) {
+	o.RecordingComposition = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *CallRoutingRecording) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRecording) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *CallRoutingRecording) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *CallRoutingRecording) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetFilePrefix returns the FilePrefix field value if set, zero value otherwise.
+func (o *CallRoutingRecording) GetFilePrefix() string {
+	if o == nil || IsNil(o.FilePrefix) {
+		var ret string
+		return ret
+	}
+	return *o.FilePrefix
+}
+
+// GetFilePrefixOk returns a tuple with the FilePrefix field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRecording) GetFilePrefixOk() (*string, bool) {
+	if o == nil || IsNil(o.FilePrefix) {
+		return nil, false
+	}
+	return o.FilePrefix, true
+}
+
+// HasFilePrefix returns a boolean if a field has been set.
+func (o *CallRoutingRecording) HasFilePrefix() bool {
+	if o != nil && !IsNil(o.FilePrefix) {
+		return true
+	}
+
+	return false
+}
+
+// SetFilePrefix gets a reference to the given string and assigns it to the FilePrefix field.
+func (o *CallRoutingRecording) SetFilePrefix(v string) {
+	o.FilePrefix = &v
+}
+
+func (o CallRoutingRecording) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingRecording) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["recordingType"] = o.RecordingType
+	if !IsNil(o.RecordingComposition) {
+		toSerialize["recordingComposition"] = o.RecordingComposition
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.FilePrefix) {
+		toSerialize["filePrefix"] = o.FilePrefix
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingRecording struct {
+	value *CallRoutingRecording
+	isSet bool
+}
+
+func (v NullableCallRoutingRecording) Get() *CallRoutingRecording {
+	return v.value
+}
+
+func (v *NullableCallRoutingRecording) Set(val *CallRoutingRecording) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingRecording) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingRecording) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingRecording(val *CallRoutingRecording) *NullableCallRoutingRecording {
+	return &NullableCallRoutingRecording{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingRecording) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingRecording) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_recording_composition.go b/pkg/infobip/models/voice/call_routing_recording_composition.go
new file mode 100644
index 0000000..a2b03fd
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_recording_composition.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingRecordingComposition type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingRecordingComposition{}
+
+// CallRoutingRecordingComposition Sets recording composition options.
+type CallRoutingRecordingComposition struct {
+	// Indicates whether to create a single recording of both participants. If set to `true`, both participants are merged into a single audio or video file. Otherwise, both participants will have their own individual audio or video file.
+	Enabled bool
+}
+
+type _CallRoutingRecordingComposition CallRoutingRecordingComposition
+
+// NewCallRoutingRecordingComposition instantiates a new CallRoutingRecordingComposition object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingRecordingComposition(enabled bool) *CallRoutingRecordingComposition {
+	this := CallRoutingRecordingComposition{}
+	this.Enabled = enabled
+	return &this
+}
+
+// NewCallRoutingRecordingCompositionWithDefaults instantiates a new CallRoutingRecordingComposition object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingRecordingCompositionWithDefaults() *CallRoutingRecordingComposition {
+	this := CallRoutingRecordingComposition{}
+
+	return &this
+}
+
+// GetEnabled returns the Enabled field value
+func (o *CallRoutingRecordingComposition) GetEnabled() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRecordingComposition) GetEnabledOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Enabled, true
+}
+
+// SetEnabled sets field value
+func (o *CallRoutingRecordingComposition) SetEnabled(v bool) {
+	o.Enabled = v
+}
+
+func (o CallRoutingRecordingComposition) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingRecordingComposition) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["enabled"] = o.Enabled
+	return toSerialize, nil
+}
+
+type NullableCallRoutingRecordingComposition struct {
+	value *CallRoutingRecordingComposition
+	isSet bool
+}
+
+func (v NullableCallRoutingRecordingComposition) Get() *CallRoutingRecordingComposition {
+	return v.value
+}
+
+func (v *NullableCallRoutingRecordingComposition) Set(val *CallRoutingRecordingComposition) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingRecordingComposition) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingRecordingComposition) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingRecordingComposition(val *CallRoutingRecordingComposition) *NullableCallRoutingRecordingComposition {
+	return &NullableCallRoutingRecordingComposition{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingRecordingComposition) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingRecordingComposition) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_recording_type.go b/pkg/infobip/models/voice/call_routing_recording_type.go
new file mode 100644
index 0000000..1296545
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_recording_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingRecordingType Recording type.
+type CallRoutingRecordingType string
+
+// List of CallRoutingRecordingType
+const (
+	CALLROUTINGRECORDINGTYPE_AUDIO           CallRoutingRecordingType = "AUDIO"
+	CALLROUTINGRECORDINGTYPE_AUDIO_AND_VIDEO CallRoutingRecordingType = "AUDIO_AND_VIDEO"
+)
+
+// All allowed values of CallRoutingRecordingType enum
+var AllowedCallRoutingRecordingTypeEnumValues = []CallRoutingRecordingType{
+	"AUDIO",
+	"AUDIO_AND_VIDEO",
+}
+
+func (v *CallRoutingRecordingType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallRoutingRecordingType(value)
+	for _, existing := range AllowedCallRoutingRecordingTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallRoutingRecordingType", value)
+}
+
+// NewCallRoutingRecordingTypeFromValue returns a pointer to a valid CallRoutingRecordingType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallRoutingRecordingTypeFromValue(v string) (*CallRoutingRecordingType, error) {
+	ev := CallRoutingRecordingType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallRoutingRecordingType: valid values are %v", v, AllowedCallRoutingRecordingTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallRoutingRecordingType) IsValid() bool {
+	for _, existing := range AllowedCallRoutingRecordingTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallRoutingRecordingType value
+func (v CallRoutingRecordingType) Ptr() *CallRoutingRecordingType {
+	return &v
+}
+
+type NullableCallRoutingRecordingType struct {
+	value *CallRoutingRecordingType
+	isSet bool
+}
+
+func (v NullableCallRoutingRecordingType) Get() *CallRoutingRecordingType {
+	return v.value
+}
+
+func (v *NullableCallRoutingRecordingType) Set(val *CallRoutingRecordingType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingRecordingType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingRecordingType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingRecordingType(val *CallRoutingRecordingType) *NullableCallRoutingRecordingType {
+	return &NullableCallRoutingRecordingType{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingRecordingType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingRecordingType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_route_request.go b/pkg/infobip/models/voice/call_routing_route_request.go
new file mode 100644
index 0000000..d913508
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_route_request.go
@@ -0,0 +1,187 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingRouteRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingRouteRequest{}
+
+// CallRoutingRouteRequest Route request object.
+type CallRoutingRouteRequest struct {
+	// Route name.
+	Name string
+	// List of criteria used to match a route. For a route to match, any criterion should be met.
+	Criteria []CallRoutingSearchCriteria
+	// List of destinations. First destination in the list is the first one to be executed. Subsequent destinations are executed only if the previous one fails.
+	Destinations []CallRoutingDestination
+}
+
+type _CallRoutingRouteRequest CallRoutingRouteRequest
+
+// NewCallRoutingRouteRequest instantiates a new CallRoutingRouteRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingRouteRequest(name string, destinations []CallRoutingDestination) *CallRoutingRouteRequest {
+	this := CallRoutingRouteRequest{}
+	this.Name = name
+	this.Destinations = destinations
+	return &this
+}
+
+// NewCallRoutingRouteRequestWithDefaults instantiates a new CallRoutingRouteRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingRouteRequestWithDefaults() *CallRoutingRouteRequest {
+	this := CallRoutingRouteRequest{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *CallRoutingRouteRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *CallRoutingRouteRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetCriteria returns the Criteria field value if set, zero value otherwise.
+func (o *CallRoutingRouteRequest) GetCriteria() []CallRoutingSearchCriteria {
+	if o == nil || IsNil(o.Criteria) {
+		var ret []CallRoutingSearchCriteria
+		return ret
+	}
+	return o.Criteria
+}
+
+// GetCriteriaOk returns a tuple with the Criteria field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteRequest) GetCriteriaOk() ([]CallRoutingSearchCriteria, bool) {
+	if o == nil || IsNil(o.Criteria) {
+		return nil, false
+	}
+	return o.Criteria, true
+}
+
+// HasCriteria returns a boolean if a field has been set.
+func (o *CallRoutingRouteRequest) HasCriteria() bool {
+	if o != nil && !IsNil(o.Criteria) {
+		return true
+	}
+
+	return false
+}
+
+// SetCriteria gets a reference to the given []CallRoutingSearchCriteria and assigns it to the Criteria field.
+func (o *CallRoutingRouteRequest) SetCriteria(v []CallRoutingSearchCriteria) {
+	o.Criteria = v
+}
+
+// GetDestinations returns the Destinations field value
+func (o *CallRoutingRouteRequest) GetDestinations() []CallRoutingDestination {
+	if o == nil {
+		var ret []CallRoutingDestination
+		return ret
+	}
+
+	return o.Destinations
+}
+
+// GetDestinationsOk returns a tuple with the Destinations field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteRequest) GetDestinationsOk() ([]CallRoutingDestination, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Destinations, true
+}
+
+// SetDestinations sets field value
+func (o *CallRoutingRouteRequest) SetDestinations(v []CallRoutingDestination) {
+	o.Destinations = v
+}
+
+func (o CallRoutingRouteRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingRouteRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Criteria) {
+		toSerialize["criteria"] = o.Criteria
+	}
+	toSerialize["destinations"] = o.Destinations
+	return toSerialize, nil
+}
+
+type NullableCallRoutingRouteRequest struct {
+	value *CallRoutingRouteRequest
+	isSet bool
+}
+
+func (v NullableCallRoutingRouteRequest) Get() *CallRoutingRouteRequest {
+	return v.value
+}
+
+func (v *NullableCallRoutingRouteRequest) Set(val *CallRoutingRouteRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingRouteRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingRouteRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingRouteRequest(val *CallRoutingRouteRequest) *NullableCallRoutingRouteRequest {
+	return &NullableCallRoutingRouteRequest{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingRouteRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingRouteRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_route_response.go b/pkg/infobip/models/voice/call_routing_route_response.go
new file mode 100644
index 0000000..19b9056
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_route_response.go
@@ -0,0 +1,215 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingRouteResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingRouteResponse{}
+
+// CallRoutingRouteResponse Route response object.
+type CallRoutingRouteResponse struct {
+	// Unique identifier of a route.
+	Id string
+	// Route name.
+	Name string
+	// List of criteria that should match route. For a route to match, any criterion should be met.
+	Criteria []CallRoutingSearchCriteria
+	// List of destinations. First destination in the list is the first one to be executed. Subsequent destinations are executed only if the previous one fails.
+	Destinations []CallRoutingDestination
+}
+
+type _CallRoutingRouteResponse CallRoutingRouteResponse
+
+// NewCallRoutingRouteResponse instantiates a new CallRoutingRouteResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingRouteResponse(id string, name string, destinations []CallRoutingDestination) *CallRoutingRouteResponse {
+	this := CallRoutingRouteResponse{}
+	this.Id = id
+	this.Name = name
+	this.Destinations = destinations
+	return &this
+}
+
+// NewCallRoutingRouteResponseWithDefaults instantiates a new CallRoutingRouteResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingRouteResponseWithDefaults() *CallRoutingRouteResponse {
+	this := CallRoutingRouteResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value
+func (o *CallRoutingRouteResponse) GetId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteResponse) GetIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Id, true
+}
+
+// SetId sets field value
+func (o *CallRoutingRouteResponse) SetId(v string) {
+	o.Id = v
+}
+
+// GetName returns the Name field value
+func (o *CallRoutingRouteResponse) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteResponse) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *CallRoutingRouteResponse) SetName(v string) {
+	o.Name = v
+}
+
+// GetCriteria returns the Criteria field value if set, zero value otherwise.
+func (o *CallRoutingRouteResponse) GetCriteria() []CallRoutingSearchCriteria {
+	if o == nil || IsNil(o.Criteria) {
+		var ret []CallRoutingSearchCriteria
+		return ret
+	}
+	return o.Criteria
+}
+
+// GetCriteriaOk returns a tuple with the Criteria field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteResponse) GetCriteriaOk() ([]CallRoutingSearchCriteria, bool) {
+	if o == nil || IsNil(o.Criteria) {
+		return nil, false
+	}
+	return o.Criteria, true
+}
+
+// HasCriteria returns a boolean if a field has been set.
+func (o *CallRoutingRouteResponse) HasCriteria() bool {
+	if o != nil && !IsNil(o.Criteria) {
+		return true
+	}
+
+	return false
+}
+
+// SetCriteria gets a reference to the given []CallRoutingSearchCriteria and assigns it to the Criteria field.
+func (o *CallRoutingRouteResponse) SetCriteria(v []CallRoutingSearchCriteria) {
+	o.Criteria = v
+}
+
+// GetDestinations returns the Destinations field value
+func (o *CallRoutingRouteResponse) GetDestinations() []CallRoutingDestination {
+	if o == nil {
+		var ret []CallRoutingDestination
+		return ret
+	}
+
+	return o.Destinations
+}
+
+// GetDestinationsOk returns a tuple with the Destinations field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteResponse) GetDestinationsOk() ([]CallRoutingDestination, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Destinations, true
+}
+
+// SetDestinations sets field value
+func (o *CallRoutingRouteResponse) SetDestinations(v []CallRoutingDestination) {
+	o.Destinations = v
+}
+
+func (o CallRoutingRouteResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingRouteResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["id"] = o.Id
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Criteria) {
+		toSerialize["criteria"] = o.Criteria
+	}
+	toSerialize["destinations"] = o.Destinations
+	return toSerialize, nil
+}
+
+type NullableCallRoutingRouteResponse struct {
+	value *CallRoutingRouteResponse
+	isSet bool
+}
+
+func (v NullableCallRoutingRouteResponse) Get() *CallRoutingRouteResponse {
+	return v.value
+}
+
+func (v *NullableCallRoutingRouteResponse) Set(val *CallRoutingRouteResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingRouteResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingRouteResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingRouteResponse(val *CallRoutingRouteResponse) *NullableCallRoutingRouteResponse {
+	return &NullableCallRoutingRouteResponse{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingRouteResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingRouteResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_route_response_page.go b/pkg/infobip/models/voice/call_routing_route_response_page.go
new file mode 100644
index 0000000..94a6aa5
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_route_response_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingRouteResponsePage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingRouteResponsePage{}
+
+// CallRoutingRouteResponsePage Routes response object.
+type CallRoutingRouteResponsePage struct {
+	// The list of the results for this page.
+	Results []CallRoutingRouteResponse
+	Paging  *PageInfo
+}
+
+// NewCallRoutingRouteResponsePage instantiates a new CallRoutingRouteResponsePage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingRouteResponsePage() *CallRoutingRouteResponsePage {
+	this := CallRoutingRouteResponsePage{}
+	return &this
+}
+
+// NewCallRoutingRouteResponsePageWithDefaults instantiates a new CallRoutingRouteResponsePage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingRouteResponsePageWithDefaults() *CallRoutingRouteResponsePage {
+	this := CallRoutingRouteResponsePage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *CallRoutingRouteResponsePage) GetResults() []CallRoutingRouteResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []CallRoutingRouteResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteResponsePage) GetResultsOk() ([]CallRoutingRouteResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *CallRoutingRouteResponsePage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []CallRoutingRouteResponse and assigns it to the Results field.
+func (o *CallRoutingRouteResponsePage) SetResults(v []CallRoutingRouteResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *CallRoutingRouteResponsePage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingRouteResponsePage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *CallRoutingRouteResponsePage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *CallRoutingRouteResponsePage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o CallRoutingRouteResponsePage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingRouteResponsePage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingRouteResponsePage struct {
+	value *CallRoutingRouteResponsePage
+	isSet bool
+}
+
+func (v NullableCallRoutingRouteResponsePage) Get() *CallRoutingRouteResponsePage {
+	return v.value
+}
+
+func (v *NullableCallRoutingRouteResponsePage) Set(val *CallRoutingRouteResponsePage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingRouteResponsePage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingRouteResponsePage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingRouteResponsePage(val *CallRoutingRouteResponsePage) *NullableCallRoutingRouteResponsePage {
+	return &NullableCallRoutingRouteResponsePage{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingRouteResponsePage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingRouteResponsePage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_search_criteria.go b/pkg/infobip/models/voice/call_routing_search_criteria.go
new file mode 100644
index 0000000..cfff0f3
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_search_criteria.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingSearchCriteria type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingSearchCriteria{}
+
+// CallRoutingSearchCriteria List of criteria that should match route. For a route to match, any criterion should be met.
+type CallRoutingSearchCriteria struct {
+	// Phone number or regular expression pattern representing the phone number. Applies to all search criteria types except `WEBRTC`. Examples: `41793026727`, `41793(.+)`.
+	To    *string
+	Value *CallRoutingCriteria
+}
+
+// NewCallRoutingSearchCriteria instantiates a new CallRoutingSearchCriteria object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingSearchCriteria() *CallRoutingSearchCriteria {
+	this := CallRoutingSearchCriteria{}
+	return &this
+}
+
+// NewCallRoutingSearchCriteriaWithDefaults instantiates a new CallRoutingSearchCriteria object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingSearchCriteriaWithDefaults() *CallRoutingSearchCriteria {
+	this := CallRoutingSearchCriteria{}
+
+	return &this
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *CallRoutingSearchCriteria) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSearchCriteria) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *CallRoutingSearchCriteria) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *CallRoutingSearchCriteria) SetTo(v string) {
+	o.To = &v
+}
+
+// GetValue returns the Value field value if set, zero value otherwise.
+func (o *CallRoutingSearchCriteria) GetValue() CallRoutingCriteria {
+	if o == nil || IsNil(o.Value) {
+		var ret CallRoutingCriteria
+		return ret
+	}
+	return *o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSearchCriteria) GetValueOk() (*CallRoutingCriteria, bool) {
+	if o == nil || IsNil(o.Value) {
+		return nil, false
+	}
+	return o.Value, true
+}
+
+// HasValue returns a boolean if a field has been set.
+func (o *CallRoutingSearchCriteria) HasValue() bool {
+	if o != nil && !IsNil(o.Value) {
+		return true
+	}
+
+	return false
+}
+
+// SetValue gets a reference to the given CallRoutingCriteria and assigns it to the Value field.
+func (o *CallRoutingSearchCriteria) SetValue(v CallRoutingCriteria) {
+	o.Value = &v
+}
+
+func (o CallRoutingSearchCriteria) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingSearchCriteria) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.Value) {
+		toSerialize["value"] = o.Value
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingSearchCriteria struct {
+	value *CallRoutingSearchCriteria
+	isSet bool
+}
+
+func (v NullableCallRoutingSearchCriteria) Get() *CallRoutingSearchCriteria {
+	return v.value
+}
+
+func (v *NullableCallRoutingSearchCriteria) Set(val *CallRoutingSearchCriteria) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingSearchCriteria) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingSearchCriteria) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingSearchCriteria(val *CallRoutingSearchCriteria) *NullableCallRoutingSearchCriteria {
+	return &NullableCallRoutingSearchCriteria{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingSearchCriteria) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingSearchCriteria) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_sip_criteria.go b/pkg/infobip/models/voice/call_routing_sip_criteria.go
new file mode 100644
index 0000000..2e7fd18
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_sip_criteria.go
@@ -0,0 +1,207 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingSipCriteria type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingSipCriteria{}
+
+// CallRoutingSipCriteria struct for CallRoutingSipCriteria
+type CallRoutingSipCriteria struct {
+	Type CallRoutingCriteriaType
+	// ID of the SIP trunk. Example: `60d345fd3a799ec`
+	SipTrunkId *string
+	// SIP trunk username or regular expression pattern representing username. Examples: `41793026727`, `41793(.+)`.
+	Username *string
+	// SIP headers. To meet the criteria, all of the provided headers must match.
+	Headers []CallRoutingSipHeader
+}
+
+type _CallRoutingSipCriteria CallRoutingSipCriteria
+
+// NewCallRoutingSipCriteria instantiates a new CallRoutingSipCriteria object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingSipCriteria() *CallRoutingSipCriteria {
+	this := CallRoutingSipCriteria{}
+	this.Type = "SIP"
+	return &this
+}
+
+// NewCallRoutingSipCriteriaWithDefaults instantiates a new CallRoutingSipCriteria object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingSipCriteriaWithDefaults() *CallRoutingSipCriteria {
+	this := CallRoutingSipCriteria{}
+	this.Type = "SIP"
+	return &this
+}
+
+// GetSipTrunkId returns the SipTrunkId field value if set, zero value otherwise.
+func (o *CallRoutingSipCriteria) GetSipTrunkId() string {
+	if o == nil || IsNil(o.SipTrunkId) {
+		var ret string
+		return ret
+	}
+	return *o.SipTrunkId
+}
+
+// GetSipTrunkIdOk returns a tuple with the SipTrunkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipCriteria) GetSipTrunkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.SipTrunkId) {
+		return nil, false
+	}
+	return o.SipTrunkId, true
+}
+
+// HasSipTrunkId returns a boolean if a field has been set.
+func (o *CallRoutingSipCriteria) HasSipTrunkId() bool {
+	if o != nil && !IsNil(o.SipTrunkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipTrunkId gets a reference to the given string and assigns it to the SipTrunkId field.
+func (o *CallRoutingSipCriteria) SetSipTrunkId(v string) {
+	o.SipTrunkId = &v
+}
+
+// GetUsername returns the Username field value if set, zero value otherwise.
+func (o *CallRoutingSipCriteria) GetUsername() string {
+	if o == nil || IsNil(o.Username) {
+		var ret string
+		return ret
+	}
+	return *o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipCriteria) GetUsernameOk() (*string, bool) {
+	if o == nil || IsNil(o.Username) {
+		return nil, false
+	}
+	return o.Username, true
+}
+
+// HasUsername returns a boolean if a field has been set.
+func (o *CallRoutingSipCriteria) HasUsername() bool {
+	if o != nil && !IsNil(o.Username) {
+		return true
+	}
+
+	return false
+}
+
+// SetUsername gets a reference to the given string and assigns it to the Username field.
+func (o *CallRoutingSipCriteria) SetUsername(v string) {
+	o.Username = &v
+}
+
+// GetHeaders returns the Headers field value if set, zero value otherwise.
+func (o *CallRoutingSipCriteria) GetHeaders() []CallRoutingSipHeader {
+	if o == nil || IsNil(o.Headers) {
+		var ret []CallRoutingSipHeader
+		return ret
+	}
+	return o.Headers
+}
+
+// GetHeadersOk returns a tuple with the Headers field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipCriteria) GetHeadersOk() ([]CallRoutingSipHeader, bool) {
+	if o == nil || IsNil(o.Headers) {
+		return nil, false
+	}
+	return o.Headers, true
+}
+
+// HasHeaders returns a boolean if a field has been set.
+func (o *CallRoutingSipCriteria) HasHeaders() bool {
+	if o != nil && !IsNil(o.Headers) {
+		return true
+	}
+
+	return false
+}
+
+// SetHeaders gets a reference to the given []CallRoutingSipHeader and assigns it to the Headers field.
+func (o *CallRoutingSipCriteria) SetHeaders(v []CallRoutingSipHeader) {
+	o.Headers = v
+}
+
+func (o CallRoutingSipCriteria) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingSipCriteria) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.SipTrunkId) {
+		toSerialize["sipTrunkId"] = o.SipTrunkId
+	}
+	if !IsNil(o.Username) {
+		toSerialize["username"] = o.Username
+	}
+	if !IsNil(o.Headers) {
+		toSerialize["headers"] = o.Headers
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingSipCriteria struct {
+	value *CallRoutingSipCriteria
+	isSet bool
+}
+
+func (v NullableCallRoutingSipCriteria) Get() *CallRoutingSipCriteria {
+	return v.value
+}
+
+func (v *NullableCallRoutingSipCriteria) Set(val *CallRoutingSipCriteria) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingSipCriteria) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingSipCriteria) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingSipCriteria(val *CallRoutingSipCriteria) *NullableCallRoutingSipCriteria {
+	return &NullableCallRoutingSipCriteria{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingSipCriteria) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingSipCriteria) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_sip_endpoint.go b/pkg/infobip/models/voice/call_routing_sip_endpoint.go
new file mode 100644
index 0000000..ae0e2b7
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_sip_endpoint.go
@@ -0,0 +1,198 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingSipEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingSipEndpoint{}
+
+// CallRoutingSipEndpoint struct for CallRoutingSipEndpoint
+type CallRoutingSipEndpoint struct {
+	Type CallRoutingEndpointType
+	// Username sent to a selected SIP trunk. When not defined, Infobip DID number is used instead.
+	Username *string
+	// Unique identifier of a SIP trunk.
+	SipTrunkId string
+	// Custom headers. Only headers starting with `X-Client-` prefix will be propagated.
+	CustomHeaders *map[string]string
+}
+
+type _CallRoutingSipEndpoint CallRoutingSipEndpoint
+
+// NewCallRoutingSipEndpoint instantiates a new CallRoutingSipEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingSipEndpoint(sipTrunkId string) *CallRoutingSipEndpoint {
+	this := CallRoutingSipEndpoint{}
+	this.Type = "SIP"
+	this.SipTrunkId = sipTrunkId
+	return &this
+}
+
+// NewCallRoutingSipEndpointWithDefaults instantiates a new CallRoutingSipEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingSipEndpointWithDefaults() *CallRoutingSipEndpoint {
+	this := CallRoutingSipEndpoint{}
+	this.Type = "SIP"
+	return &this
+}
+
+// GetUsername returns the Username field value if set, zero value otherwise.
+func (o *CallRoutingSipEndpoint) GetUsername() string {
+	if o == nil || IsNil(o.Username) {
+		var ret string
+		return ret
+	}
+	return *o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipEndpoint) GetUsernameOk() (*string, bool) {
+	if o == nil || IsNil(o.Username) {
+		return nil, false
+	}
+	return o.Username, true
+}
+
+// HasUsername returns a boolean if a field has been set.
+func (o *CallRoutingSipEndpoint) HasUsername() bool {
+	if o != nil && !IsNil(o.Username) {
+		return true
+	}
+
+	return false
+}
+
+// SetUsername gets a reference to the given string and assigns it to the Username field.
+func (o *CallRoutingSipEndpoint) SetUsername(v string) {
+	o.Username = &v
+}
+
+// GetSipTrunkId returns the SipTrunkId field value
+func (o *CallRoutingSipEndpoint) GetSipTrunkId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.SipTrunkId
+}
+
+// GetSipTrunkIdOk returns a tuple with the SipTrunkId field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipEndpoint) GetSipTrunkIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SipTrunkId, true
+}
+
+// SetSipTrunkId sets field value
+func (o *CallRoutingSipEndpoint) SetSipTrunkId(v string) {
+	o.SipTrunkId = v
+}
+
+// GetCustomHeaders returns the CustomHeaders field value if set, zero value otherwise.
+func (o *CallRoutingSipEndpoint) GetCustomHeaders() map[string]string {
+	if o == nil || IsNil(o.CustomHeaders) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomHeaders
+}
+
+// GetCustomHeadersOk returns a tuple with the CustomHeaders field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipEndpoint) GetCustomHeadersOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomHeaders) {
+		return nil, false
+	}
+	return o.CustomHeaders, true
+}
+
+// HasCustomHeaders returns a boolean if a field has been set.
+func (o *CallRoutingSipEndpoint) HasCustomHeaders() bool {
+	if o != nil && !IsNil(o.CustomHeaders) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomHeaders gets a reference to the given map[string]string and assigns it to the CustomHeaders field.
+func (o *CallRoutingSipEndpoint) SetCustomHeaders(v map[string]string) {
+	o.CustomHeaders = &v
+}
+
+func (o CallRoutingSipEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingSipEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Username) {
+		toSerialize["username"] = o.Username
+	}
+	toSerialize["sipTrunkId"] = o.SipTrunkId
+	if !IsNil(o.CustomHeaders) {
+		toSerialize["customHeaders"] = o.CustomHeaders
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingSipEndpoint struct {
+	value *CallRoutingSipEndpoint
+	isSet bool
+}
+
+func (v NullableCallRoutingSipEndpoint) Get() *CallRoutingSipEndpoint {
+	return v.value
+}
+
+func (v *NullableCallRoutingSipEndpoint) Set(val *CallRoutingSipEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingSipEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingSipEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingSipEndpoint(val *CallRoutingSipEndpoint) *NullableCallRoutingSipEndpoint {
+	return &NullableCallRoutingSipEndpoint{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingSipEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingSipEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_sip_header.go b/pkg/infobip/models/voice/call_routing_sip_header.go
new file mode 100644
index 0000000..971de22
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_sip_header.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingSipHeader type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingSipHeader{}
+
+// CallRoutingSipHeader SIP headers. To meet the criteria, all of the provided headers must match.
+type CallRoutingSipHeader struct {
+	// SIP header name starting with `X-`. Example: `X-Identity`.
+	HeaderName string
+	// SIP header value or regular expression pattern representing the value. Examples: `john.doe`, `john(.+)`.
+	HeaderValue *string
+}
+
+type _CallRoutingSipHeader CallRoutingSipHeader
+
+// NewCallRoutingSipHeader instantiates a new CallRoutingSipHeader object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingSipHeader(headerName string) *CallRoutingSipHeader {
+	this := CallRoutingSipHeader{}
+	this.HeaderName = headerName
+	return &this
+}
+
+// NewCallRoutingSipHeaderWithDefaults instantiates a new CallRoutingSipHeader object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingSipHeaderWithDefaults() *CallRoutingSipHeader {
+	this := CallRoutingSipHeader{}
+
+	return &this
+}
+
+// GetHeaderName returns the HeaderName field value
+func (o *CallRoutingSipHeader) GetHeaderName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.HeaderName
+}
+
+// GetHeaderNameOk returns a tuple with the HeaderName field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipHeader) GetHeaderNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.HeaderName, true
+}
+
+// SetHeaderName sets field value
+func (o *CallRoutingSipHeader) SetHeaderName(v string) {
+	o.HeaderName = v
+}
+
+// GetHeaderValue returns the HeaderValue field value if set, zero value otherwise.
+func (o *CallRoutingSipHeader) GetHeaderValue() string {
+	if o == nil || IsNil(o.HeaderValue) {
+		var ret string
+		return ret
+	}
+	return *o.HeaderValue
+}
+
+// GetHeaderValueOk returns a tuple with the HeaderValue field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingSipHeader) GetHeaderValueOk() (*string, bool) {
+	if o == nil || IsNil(o.HeaderValue) {
+		return nil, false
+	}
+	return o.HeaderValue, true
+}
+
+// HasHeaderValue returns a boolean if a field has been set.
+func (o *CallRoutingSipHeader) HasHeaderValue() bool {
+	if o != nil && !IsNil(o.HeaderValue) {
+		return true
+	}
+
+	return false
+}
+
+// SetHeaderValue gets a reference to the given string and assigns it to the HeaderValue field.
+func (o *CallRoutingSipHeader) SetHeaderValue(v string) {
+	o.HeaderValue = &v
+}
+
+func (o CallRoutingSipHeader) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingSipHeader) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["headerName"] = o.HeaderName
+	if !IsNil(o.HeaderValue) {
+		toSerialize["headerValue"] = o.HeaderValue
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingSipHeader struct {
+	value *CallRoutingSipHeader
+	isSet bool
+}
+
+func (v NullableCallRoutingSipHeader) Get() *CallRoutingSipHeader {
+	return v.value
+}
+
+func (v *NullableCallRoutingSipHeader) Set(val *CallRoutingSipHeader) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingSipHeader) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingSipHeader) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingSipHeader(val *CallRoutingSipHeader) *NullableCallRoutingSipHeader {
+	return &NullableCallRoutingSipHeader{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingSipHeader) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingSipHeader) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_url_destination.go b/pkg/infobip/models/voice/call_routing_url_destination.go
new file mode 100644
index 0000000..7db326c
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_url_destination.go
@@ -0,0 +1,232 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingUrlDestination type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingUrlDestination{}
+
+// CallRoutingUrlDestination struct for CallRoutingUrlDestination
+type CallRoutingUrlDestination struct {
+	Priority *int32
+	Type     CallRoutingDestinationType
+	Weight   *int32
+	// URL endpoint which provides next destination to be tried in a route as a response to `POST` HTTP request sent by the Infobip Platform. Returned destination must be of `ENDPOINT_DESTINATION` type.
+	Url            string
+	SecurityConfig *SecurityConfig
+}
+
+type _CallRoutingUrlDestination CallRoutingUrlDestination
+
+// NewCallRoutingUrlDestination instantiates a new CallRoutingUrlDestination object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingUrlDestination(url string) *CallRoutingUrlDestination {
+	this := CallRoutingUrlDestination{}
+	this.Type = "URL"
+	this.Url = url
+	return &this
+}
+
+// NewCallRoutingUrlDestinationWithDefaults instantiates a new CallRoutingUrlDestination object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingUrlDestinationWithDefaults() *CallRoutingUrlDestination {
+	this := CallRoutingUrlDestination{}
+	this.Type = "URL"
+	return &this
+}
+
+// GetPriority returns the Priority field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestination) GetPriority() int32 {
+	if o == nil || IsNil(o.Priority) {
+		var ret int32
+		return ret
+	}
+	return *o.Priority
+}
+
+// GetPriorityOk returns a tuple with the Priority field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestination) GetPriorityOk() (*int32, bool) {
+	if o == nil || IsNil(o.Priority) {
+		return nil, false
+	}
+	return o.Priority, true
+}
+
+// HasPriority returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestination) HasPriority() bool {
+	if o != nil && !IsNil(o.Priority) {
+		return true
+	}
+
+	return false
+}
+
+// SetPriority gets a reference to the given int32 and assigns it to the Priority field.
+func (o *CallRoutingUrlDestination) SetPriority(v int32) {
+	o.Priority = &v
+}
+
+// GetWeight returns the Weight field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestination) GetWeight() int32 {
+	if o == nil || IsNil(o.Weight) {
+		var ret int32
+		return ret
+	}
+	return *o.Weight
+}
+
+// GetWeightOk returns a tuple with the Weight field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestination) GetWeightOk() (*int32, bool) {
+	if o == nil || IsNil(o.Weight) {
+		return nil, false
+	}
+	return o.Weight, true
+}
+
+// HasWeight returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestination) HasWeight() bool {
+	if o != nil && !IsNil(o.Weight) {
+		return true
+	}
+
+	return false
+}
+
+// SetWeight gets a reference to the given int32 and assigns it to the Weight field.
+func (o *CallRoutingUrlDestination) SetWeight(v int32) {
+	o.Weight = &v
+}
+
+// GetUrl returns the Url field value
+func (o *CallRoutingUrlDestination) GetUrl() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestination) GetUrlOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Url, true
+}
+
+// SetUrl sets field value
+func (o *CallRoutingUrlDestination) SetUrl(v string) {
+	o.Url = v
+}
+
+// GetSecurityConfig returns the SecurityConfig field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestination) GetSecurityConfig() SecurityConfig {
+	if o == nil || IsNil(o.SecurityConfig) {
+		var ret SecurityConfig
+		return ret
+	}
+	return *o.SecurityConfig
+}
+
+// GetSecurityConfigOk returns a tuple with the SecurityConfig field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestination) GetSecurityConfigOk() (*SecurityConfig, bool) {
+	if o == nil || IsNil(o.SecurityConfig) {
+		return nil, false
+	}
+	return o.SecurityConfig, true
+}
+
+// HasSecurityConfig returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestination) HasSecurityConfig() bool {
+	if o != nil && !IsNil(o.SecurityConfig) {
+		return true
+	}
+
+	return false
+}
+
+// SetSecurityConfig gets a reference to the given SecurityConfig and assigns it to the SecurityConfig field.
+func (o *CallRoutingUrlDestination) SetSecurityConfig(v SecurityConfig) {
+	o.SecurityConfig = &v
+}
+
+func (o CallRoutingUrlDestination) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingUrlDestination) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Priority) {
+		toSerialize["priority"] = o.Priority
+	}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Weight) {
+		toSerialize["weight"] = o.Weight
+	}
+	toSerialize["url"] = o.Url
+	if !IsNil(o.SecurityConfig) {
+		toSerialize["securityConfig"] = o.SecurityConfig
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingUrlDestination struct {
+	value *CallRoutingUrlDestination
+	isSet bool
+}
+
+func (v NullableCallRoutingUrlDestination) Get() *CallRoutingUrlDestination {
+	return v.value
+}
+
+func (v *NullableCallRoutingUrlDestination) Set(val *CallRoutingUrlDestination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingUrlDestination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingUrlDestination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingUrlDestination(val *CallRoutingUrlDestination) *NullableCallRoutingUrlDestination {
+	return &NullableCallRoutingUrlDestination{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingUrlDestination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingUrlDestination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_url_destination_http_request.go b/pkg/infobip/models/voice/call_routing_url_destination_http_request.go
new file mode 100644
index 0000000..4330321
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_url_destination_http_request.go
@@ -0,0 +1,318 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingUrlDestinationHttpRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingUrlDestinationHttpRequest{}
+
+// CallRoutingUrlDestinationHttpRequest struct for CallRoutingUrlDestinationHttpRequest
+type CallRoutingUrlDestinationHttpRequest struct {
+	// Identifier of the application that originated the call.
+	ApplicationId *string
+	// Identifier of the route that is used to process the call.
+	RouteId *string
+	// Identifier of the call that is being processed.
+	CallId *string
+	// Phone number from which the call originated from.
+	From *string
+	// Destination phone number of the call.
+	To *string
+	// Timestamp representing start time of the call.
+	StartTime *Time
+}
+
+// NewCallRoutingUrlDestinationHttpRequest instantiates a new CallRoutingUrlDestinationHttpRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallRoutingUrlDestinationHttpRequest() *CallRoutingUrlDestinationHttpRequest {
+	this := CallRoutingUrlDestinationHttpRequest{}
+	var applicationId string = "CALL_ROUTING"
+	this.ApplicationId = &applicationId
+	return &this
+}
+
+// NewCallRoutingUrlDestinationHttpRequestWithDefaults instantiates a new CallRoutingUrlDestinationHttpRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingUrlDestinationHttpRequestWithDefaults() *CallRoutingUrlDestinationHttpRequest {
+	this := CallRoutingUrlDestinationHttpRequest{}
+
+	var applicationId string = "CALL_ROUTING"
+	this.ApplicationId = &applicationId
+	return &this
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestinationHttpRequest) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *CallRoutingUrlDestinationHttpRequest) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+// GetRouteId returns the RouteId field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestinationHttpRequest) GetRouteId() string {
+	if o == nil || IsNil(o.RouteId) {
+		var ret string
+		return ret
+	}
+	return *o.RouteId
+}
+
+// GetRouteIdOk returns a tuple with the RouteId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) GetRouteIdOk() (*string, bool) {
+	if o == nil || IsNil(o.RouteId) {
+		return nil, false
+	}
+	return o.RouteId, true
+}
+
+// HasRouteId returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) HasRouteId() bool {
+	if o != nil && !IsNil(o.RouteId) {
+		return true
+	}
+
+	return false
+}
+
+// SetRouteId gets a reference to the given string and assigns it to the RouteId field.
+func (o *CallRoutingUrlDestinationHttpRequest) SetRouteId(v string) {
+	o.RouteId = &v
+}
+
+// GetCallId returns the CallId field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestinationHttpRequest) GetCallId() string {
+	if o == nil || IsNil(o.CallId) {
+		var ret string
+		return ret
+	}
+	return *o.CallId
+}
+
+// GetCallIdOk returns a tuple with the CallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) GetCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallId) {
+		return nil, false
+	}
+	return o.CallId, true
+}
+
+// HasCallId returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) HasCallId() bool {
+	if o != nil && !IsNil(o.CallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallId gets a reference to the given string and assigns it to the CallId field.
+func (o *CallRoutingUrlDestinationHttpRequest) SetCallId(v string) {
+	o.CallId = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestinationHttpRequest) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *CallRoutingUrlDestinationHttpRequest) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestinationHttpRequest) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *CallRoutingUrlDestinationHttpRequest) SetTo(v string) {
+	o.To = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *CallRoutingUrlDestinationHttpRequest) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *CallRoutingUrlDestinationHttpRequest) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *CallRoutingUrlDestinationHttpRequest) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+func (o CallRoutingUrlDestinationHttpRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingUrlDestinationHttpRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	if !IsNil(o.RouteId) {
+		toSerialize["routeId"] = o.RouteId
+	}
+	if !IsNil(o.CallId) {
+		toSerialize["callId"] = o.CallId
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingUrlDestinationHttpRequest struct {
+	value *CallRoutingUrlDestinationHttpRequest
+	isSet bool
+}
+
+func (v NullableCallRoutingUrlDestinationHttpRequest) Get() *CallRoutingUrlDestinationHttpRequest {
+	return v.value
+}
+
+func (v *NullableCallRoutingUrlDestinationHttpRequest) Set(val *CallRoutingUrlDestinationHttpRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingUrlDestinationHttpRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingUrlDestinationHttpRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingUrlDestinationHttpRequest(val *CallRoutingUrlDestinationHttpRequest) *NullableCallRoutingUrlDestinationHttpRequest {
+	return &NullableCallRoutingUrlDestinationHttpRequest{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingUrlDestinationHttpRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingUrlDestinationHttpRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_url_destination_response.go b/pkg/infobip/models/voice/call_routing_url_destination_response.go
new file mode 100644
index 0000000..231a8ff
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_url_destination_response.go
@@ -0,0 +1,111 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingUrlDestinationResponse struct for CallRoutingUrlDestinationResponse
+type CallRoutingUrlDestinationResponse struct {
+	CallRoutingEndpointDestinationResponse *CallRoutingEndpointDestinationResponse
+}
+
+// CallRoutingEndpointDestinationResponseAsCallRoutingUrlDestinationResponse is a convenience function that returns CallRoutingEndpointDestinationResponse wrapped in CallRoutingUrlDestinationResponse
+func CallRoutingEndpointDestinationResponseAsCallRoutingUrlDestinationResponse(v *CallRoutingEndpointDestinationResponse) CallRoutingUrlDestinationResponse {
+	return CallRoutingUrlDestinationResponse{
+		CallRoutingEndpointDestinationResponse: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CallRoutingUrlDestinationResponse) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'ENDPOINT'
+	if jsonDict["type"] == "ENDPOINT" {
+		// try to unmarshal JSON data into CallRoutingEndpointDestinationResponse
+		err = json.Unmarshal(data, &dst.CallRoutingEndpointDestinationResponse)
+		if err == nil {
+			jsonCallRoutingEndpointDestinationResponse, _ := json.Marshal(dst.CallRoutingEndpointDestinationResponse)
+			if string(jsonCallRoutingEndpointDestinationResponse) == "{}" { // empty struct
+				dst.CallRoutingEndpointDestinationResponse = nil
+			} else {
+				return nil // data stored in dst.CallRoutingEndpointDestinationResponse, return on the first match
+			}
+		} else {
+			dst.CallRoutingEndpointDestinationResponse = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CallRoutingUrlDestinationResponse)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CallRoutingUrlDestinationResponse) MarshalJSON() ([]byte, error) {
+	if src.CallRoutingEndpointDestinationResponse != nil {
+		return json.Marshal(&src.CallRoutingEndpointDestinationResponse)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CallRoutingUrlDestinationResponse) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CallRoutingEndpointDestinationResponse != nil {
+		return obj.CallRoutingEndpointDestinationResponse
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCallRoutingUrlDestinationResponse struct {
+	value *CallRoutingUrlDestinationResponse
+	isSet bool
+}
+
+func (v NullableCallRoutingUrlDestinationResponse) Get() *CallRoutingUrlDestinationResponse {
+	return v.value
+}
+
+func (v *NullableCallRoutingUrlDestinationResponse) Set(val *CallRoutingUrlDestinationResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingUrlDestinationResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingUrlDestinationResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingUrlDestinationResponse(val *CallRoutingUrlDestinationResponse) *NullableCallRoutingUrlDestinationResponse {
+	return &NullableCallRoutingUrlDestinationResponse{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingUrlDestinationResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingUrlDestinationResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_url_security_config_type.go b/pkg/infobip/models/voice/call_routing_url_security_config_type.go
new file mode 100644
index 0000000..1daeba8
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_url_security_config_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallRoutingUrlSecurityConfigType the model 'CallRoutingUrlSecurityConfigType'
+type CallRoutingUrlSecurityConfigType string
+
+// List of CallRoutingUrlSecurityConfigType
+const (
+	CALLROUTINGURLSECURITYCONFIGTYPE_BASIC CallRoutingUrlSecurityConfigType = "BASIC"
+	CALLROUTINGURLSECURITYCONFIGTYPE_HMAC  CallRoutingUrlSecurityConfigType = "HMAC"
+)
+
+// All allowed values of CallRoutingUrlSecurityConfigType enum
+var AllowedCallRoutingUrlSecurityConfigTypeEnumValues = []CallRoutingUrlSecurityConfigType{
+	"BASIC",
+	"HMAC",
+}
+
+func (v *CallRoutingUrlSecurityConfigType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallRoutingUrlSecurityConfigType(value)
+	for _, existing := range AllowedCallRoutingUrlSecurityConfigTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallRoutingUrlSecurityConfigType", value)
+}
+
+// NewCallRoutingUrlSecurityConfigTypeFromValue returns a pointer to a valid CallRoutingUrlSecurityConfigType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallRoutingUrlSecurityConfigTypeFromValue(v string) (*CallRoutingUrlSecurityConfigType, error) {
+	ev := CallRoutingUrlSecurityConfigType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallRoutingUrlSecurityConfigType: valid values are %v", v, AllowedCallRoutingUrlSecurityConfigTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallRoutingUrlSecurityConfigType) IsValid() bool {
+	for _, existing := range AllowedCallRoutingUrlSecurityConfigTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallRoutingUrlSecurityConfigType value
+func (v CallRoutingUrlSecurityConfigType) Ptr() *CallRoutingUrlSecurityConfigType {
+	return &v
+}
+
+type NullableCallRoutingUrlSecurityConfigType struct {
+	value *CallRoutingUrlSecurityConfigType
+	isSet bool
+}
+
+func (v NullableCallRoutingUrlSecurityConfigType) Get() *CallRoutingUrlSecurityConfigType {
+	return v.value
+}
+
+func (v *NullableCallRoutingUrlSecurityConfigType) Set(val *CallRoutingUrlSecurityConfigType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingUrlSecurityConfigType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingUrlSecurityConfigType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingUrlSecurityConfigType(val *CallRoutingUrlSecurityConfigType) *NullableCallRoutingUrlSecurityConfigType {
+	return &NullableCallRoutingUrlSecurityConfigType{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingUrlSecurityConfigType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingUrlSecurityConfigType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_viber_endpoint.go b/pkg/infobip/models/voice/call_routing_viber_endpoint.go
new file mode 100644
index 0000000..61d536f
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_viber_endpoint.go
@@ -0,0 +1,170 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingViberEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingViberEndpoint{}
+
+// CallRoutingViberEndpoint struct for CallRoutingViberEndpoint
+type CallRoutingViberEndpoint struct {
+	Type CallRoutingEndpointType
+	// Viber registered phone number. Defaults to `from` value used in inbound call.
+	From *string
+	// Phone number in the [E.164](https://en.wikipedia.org/wiki/E.164) format. Defaults to `to` value used in inbound call.
+	PhoneNumber *string
+}
+
+type _CallRoutingViberEndpoint CallRoutingViberEndpoint
+
+// NewCallRoutingViberEndpoint instantiates a new CallRoutingViberEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingViberEndpoint() *CallRoutingViberEndpoint {
+	this := CallRoutingViberEndpoint{}
+	this.Type = "VIBER"
+	return &this
+}
+
+// NewCallRoutingViberEndpointWithDefaults instantiates a new CallRoutingViberEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingViberEndpointWithDefaults() *CallRoutingViberEndpoint {
+	this := CallRoutingViberEndpoint{}
+	this.Type = "VIBER"
+	return &this
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *CallRoutingViberEndpoint) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingViberEndpoint) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *CallRoutingViberEndpoint) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *CallRoutingViberEndpoint) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetPhoneNumber returns the PhoneNumber field value if set, zero value otherwise.
+func (o *CallRoutingViberEndpoint) GetPhoneNumber() string {
+	if o == nil || IsNil(o.PhoneNumber) {
+		var ret string
+		return ret
+	}
+	return *o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingViberEndpoint) GetPhoneNumberOk() (*string, bool) {
+	if o == nil || IsNil(o.PhoneNumber) {
+		return nil, false
+	}
+	return o.PhoneNumber, true
+}
+
+// HasPhoneNumber returns a boolean if a field has been set.
+func (o *CallRoutingViberEndpoint) HasPhoneNumber() bool {
+	if o != nil && !IsNil(o.PhoneNumber) {
+		return true
+	}
+
+	return false
+}
+
+// SetPhoneNumber gets a reference to the given string and assigns it to the PhoneNumber field.
+func (o *CallRoutingViberEndpoint) SetPhoneNumber(v string) {
+	o.PhoneNumber = &v
+}
+
+func (o CallRoutingViberEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingViberEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.PhoneNumber) {
+		toSerialize["phoneNumber"] = o.PhoneNumber
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingViberEndpoint struct {
+	value *CallRoutingViberEndpoint
+	isSet bool
+}
+
+func (v NullableCallRoutingViberEndpoint) Get() *CallRoutingViberEndpoint {
+	return v.value
+}
+
+func (v *NullableCallRoutingViberEndpoint) Set(val *CallRoutingViberEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingViberEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingViberEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingViberEndpoint(val *CallRoutingViberEndpoint) *NullableCallRoutingViberEndpoint {
+	return &NullableCallRoutingViberEndpoint{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingViberEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingViberEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_web_rtc_criteria.go b/pkg/infobip/models/voice/call_routing_web_rtc_criteria.go
new file mode 100644
index 0000000..a258ef6
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_web_rtc_criteria.go
@@ -0,0 +1,170 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingWebRTCCriteria type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingWebRTCCriteria{}
+
+// CallRoutingWebRTCCriteria struct for CallRoutingWebRTCCriteria
+type CallRoutingWebRTCCriteria struct {
+	Type CallRoutingCriteriaType
+	// WebRTC identity or regular expression pattern representing identity. Examples: `WebRTC_user`, `WebRTC_(.+)`.
+	Identity *string
+	// WebRTC custom data. To meet the criteria, all of the provided custom data pairs must match.
+	CustomData []CallRoutingCustomDataEntry
+}
+
+type _CallRoutingWebRTCCriteria CallRoutingWebRTCCriteria
+
+// NewCallRoutingWebRTCCriteria instantiates a new CallRoutingWebRTCCriteria object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingWebRTCCriteria() *CallRoutingWebRTCCriteria {
+	this := CallRoutingWebRTCCriteria{}
+	this.Type = "WEBRTC"
+	return &this
+}
+
+// NewCallRoutingWebRTCCriteriaWithDefaults instantiates a new CallRoutingWebRTCCriteria object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingWebRTCCriteriaWithDefaults() *CallRoutingWebRTCCriteria {
+	this := CallRoutingWebRTCCriteria{}
+	this.Type = "WEBRTC"
+	return &this
+}
+
+// GetIdentity returns the Identity field value if set, zero value otherwise.
+func (o *CallRoutingWebRTCCriteria) GetIdentity() string {
+	if o == nil || IsNil(o.Identity) {
+		var ret string
+		return ret
+	}
+	return *o.Identity
+}
+
+// GetIdentityOk returns a tuple with the Identity field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingWebRTCCriteria) GetIdentityOk() (*string, bool) {
+	if o == nil || IsNil(o.Identity) {
+		return nil, false
+	}
+	return o.Identity, true
+}
+
+// HasIdentity returns a boolean if a field has been set.
+func (o *CallRoutingWebRTCCriteria) HasIdentity() bool {
+	if o != nil && !IsNil(o.Identity) {
+		return true
+	}
+
+	return false
+}
+
+// SetIdentity gets a reference to the given string and assigns it to the Identity field.
+func (o *CallRoutingWebRTCCriteria) SetIdentity(v string) {
+	o.Identity = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *CallRoutingWebRTCCriteria) GetCustomData() []CallRoutingCustomDataEntry {
+	if o == nil || IsNil(o.CustomData) {
+		var ret []CallRoutingCustomDataEntry
+		return ret
+	}
+	return o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingWebRTCCriteria) GetCustomDataOk() ([]CallRoutingCustomDataEntry, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *CallRoutingWebRTCCriteria) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given []CallRoutingCustomDataEntry and assigns it to the CustomData field.
+func (o *CallRoutingWebRTCCriteria) SetCustomData(v []CallRoutingCustomDataEntry) {
+	o.CustomData = v
+}
+
+func (o CallRoutingWebRTCCriteria) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingWebRTCCriteria) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Identity) {
+		toSerialize["identity"] = o.Identity
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingWebRTCCriteria struct {
+	value *CallRoutingWebRTCCriteria
+	isSet bool
+}
+
+func (v NullableCallRoutingWebRTCCriteria) Get() *CallRoutingWebRTCCriteria {
+	return v.value
+}
+
+func (v *NullableCallRoutingWebRTCCriteria) Set(val *CallRoutingWebRTCCriteria) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingWebRTCCriteria) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingWebRTCCriteria) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingWebRTCCriteria(val *CallRoutingWebRTCCriteria) *NullableCallRoutingWebRTCCriteria {
+	return &NullableCallRoutingWebRTCCriteria{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingWebRTCCriteria) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingWebRTCCriteria) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_routing_web_rtc_endpoint.go b/pkg/infobip/models/voice/call_routing_web_rtc_endpoint.go
new file mode 100644
index 0000000..251ae79
--- /dev/null
+++ b/pkg/infobip/models/voice/call_routing_web_rtc_endpoint.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallRoutingWebRtcEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallRoutingWebRtcEndpoint{}
+
+// CallRoutingWebRtcEndpoint struct for CallRoutingWebRtcEndpoint
+type CallRoutingWebRtcEndpoint struct {
+	Type CallRoutingEndpointType
+	// The unique identity used to present a user on the Infobip WebRTC platform. Defaults to `to` value used in inbound call.
+	Identity *string
+}
+
+type _CallRoutingWebRtcEndpoint CallRoutingWebRtcEndpoint
+
+// NewCallRoutingWebRtcEndpoint instantiates a new CallRoutingWebRtcEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCallRoutingWebRtcEndpoint() *CallRoutingWebRtcEndpoint {
+	this := CallRoutingWebRtcEndpoint{}
+	this.Type = "WEBRTC"
+	return &this
+}
+
+// NewCallRoutingWebRtcEndpointWithDefaults instantiates a new CallRoutingWebRtcEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallRoutingWebRtcEndpointWithDefaults() *CallRoutingWebRtcEndpoint {
+	this := CallRoutingWebRtcEndpoint{}
+	this.Type = "WEBRTC"
+	return &this
+}
+
+// GetIdentity returns the Identity field value if set, zero value otherwise.
+func (o *CallRoutingWebRtcEndpoint) GetIdentity() string {
+	if o == nil || IsNil(o.Identity) {
+		var ret string
+		return ret
+	}
+	return *o.Identity
+}
+
+// GetIdentityOk returns a tuple with the Identity field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallRoutingWebRtcEndpoint) GetIdentityOk() (*string, bool) {
+	if o == nil || IsNil(o.Identity) {
+		return nil, false
+	}
+	return o.Identity, true
+}
+
+// HasIdentity returns a boolean if a field has been set.
+func (o *CallRoutingWebRtcEndpoint) HasIdentity() bool {
+	if o != nil && !IsNil(o.Identity) {
+		return true
+	}
+
+	return false
+}
+
+// SetIdentity gets a reference to the given string and assigns it to the Identity field.
+func (o *CallRoutingWebRtcEndpoint) SetIdentity(v string) {
+	o.Identity = &v
+}
+
+func (o CallRoutingWebRtcEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallRoutingWebRtcEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	if !IsNil(o.Identity) {
+		toSerialize["identity"] = o.Identity
+	}
+	return toSerialize, nil
+}
+
+type NullableCallRoutingWebRtcEndpoint struct {
+	value *CallRoutingWebRtcEndpoint
+	isSet bool
+}
+
+func (v NullableCallRoutingWebRtcEndpoint) Get() *CallRoutingWebRtcEndpoint {
+	return v.value
+}
+
+func (v *NullableCallRoutingWebRtcEndpoint) Set(val *CallRoutingWebRtcEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallRoutingWebRtcEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallRoutingWebRtcEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallRoutingWebRtcEndpoint(val *CallRoutingWebRtcEndpoint) *NullableCallRoutingWebRtcEndpoint {
+	return &NullableCallRoutingWebRtcEndpoint{value: val, isSet: true}
+}
+
+func (v NullableCallRoutingWebRtcEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallRoutingWebRtcEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_say_request.go b/pkg/infobip/models/voice/call_say_request.go
new file mode 100644
index 0000000..3ec20c2
--- /dev/null
+++ b/pkg/infobip/models/voice/call_say_request.go
@@ -0,0 +1,332 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallSayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallSayRequest{}
+
+// CallSayRequest Call say request.
+type CallSayRequest struct {
+	// Text to read. Use the Speech Synthesis Markup Language (SSML) in a request to fine-tune your output.
+	Text     string
+	Language Language
+	// Speech rate. Must be within `[0.5 - 2.0]` range, default value is `1`.
+	SpeechRate *float64
+	// Number of times to read the text.
+	LoopCount   *int32
+	Preferences *VoicePreferences
+	StopOn      *Termination
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+}
+
+type _CallSayRequest CallSayRequest
+
+// NewCallSayRequest instantiates a new CallSayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallSayRequest(text string, language Language) *CallSayRequest {
+	this := CallSayRequest{}
+	this.Text = text
+	this.Language = language
+	return &this
+}
+
+// NewCallSayRequestWithDefaults instantiates a new CallSayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallSayRequestWithDefaults() *CallSayRequest {
+	this := CallSayRequest{}
+
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *CallSayRequest) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *CallSayRequest) SetText(v string) {
+	o.Text = v
+}
+
+// GetLanguage returns the Language field value
+func (o *CallSayRequest) GetLanguage() Language {
+	if o == nil {
+		var ret Language
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetLanguageOk() (*Language, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *CallSayRequest) SetLanguage(v Language) {
+	o.Language = v
+}
+
+// GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
+func (o *CallSayRequest) GetSpeechRate() float64 {
+	if o == nil || IsNil(o.SpeechRate) {
+		var ret float64
+		return ret
+	}
+	return *o.SpeechRate
+}
+
+// GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetSpeechRateOk() (*float64, bool) {
+	if o == nil || IsNil(o.SpeechRate) {
+		return nil, false
+	}
+	return o.SpeechRate, true
+}
+
+// HasSpeechRate returns a boolean if a field has been set.
+func (o *CallSayRequest) HasSpeechRate() bool {
+	if o != nil && !IsNil(o.SpeechRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
+func (o *CallSayRequest) SetSpeechRate(v float64) {
+	o.SpeechRate = &v
+}
+
+// GetLoopCount returns the LoopCount field value if set, zero value otherwise.
+func (o *CallSayRequest) GetLoopCount() int32 {
+	if o == nil || IsNil(o.LoopCount) {
+		var ret int32
+		return ret
+	}
+	return *o.LoopCount
+}
+
+// GetLoopCountOk returns a tuple with the LoopCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetLoopCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.LoopCount) {
+		return nil, false
+	}
+	return o.LoopCount, true
+}
+
+// HasLoopCount returns a boolean if a field has been set.
+func (o *CallSayRequest) HasLoopCount() bool {
+	if o != nil && !IsNil(o.LoopCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetLoopCount gets a reference to the given int32 and assigns it to the LoopCount field.
+func (o *CallSayRequest) SetLoopCount(v int32) {
+	o.LoopCount = &v
+}
+
+// GetPreferences returns the Preferences field value if set, zero value otherwise.
+func (o *CallSayRequest) GetPreferences() VoicePreferences {
+	if o == nil || IsNil(o.Preferences) {
+		var ret VoicePreferences
+		return ret
+	}
+	return *o.Preferences
+}
+
+// GetPreferencesOk returns a tuple with the Preferences field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetPreferencesOk() (*VoicePreferences, bool) {
+	if o == nil || IsNil(o.Preferences) {
+		return nil, false
+	}
+	return o.Preferences, true
+}
+
+// HasPreferences returns a boolean if a field has been set.
+func (o *CallSayRequest) HasPreferences() bool {
+	if o != nil && !IsNil(o.Preferences) {
+		return true
+	}
+
+	return false
+}
+
+// SetPreferences gets a reference to the given VoicePreferences and assigns it to the Preferences field.
+func (o *CallSayRequest) SetPreferences(v VoicePreferences) {
+	o.Preferences = &v
+}
+
+// GetStopOn returns the StopOn field value if set, zero value otherwise.
+func (o *CallSayRequest) GetStopOn() Termination {
+	if o == nil || IsNil(o.StopOn) {
+		var ret Termination
+		return ret
+	}
+	return *o.StopOn
+}
+
+// GetStopOnOk returns a tuple with the StopOn field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetStopOnOk() (*Termination, bool) {
+	if o == nil || IsNil(o.StopOn) {
+		return nil, false
+	}
+	return o.StopOn, true
+}
+
+// HasStopOn returns a boolean if a field has been set.
+func (o *CallSayRequest) HasStopOn() bool {
+	if o != nil && !IsNil(o.StopOn) {
+		return true
+	}
+
+	return false
+}
+
+// SetStopOn gets a reference to the given Termination and assigns it to the StopOn field.
+func (o *CallSayRequest) SetStopOn(v Termination) {
+	o.StopOn = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *CallSayRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallSayRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *CallSayRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *CallSayRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o CallSayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallSayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["text"] = o.Text
+	toSerialize["language"] = o.Language
+	if !IsNil(o.SpeechRate) {
+		toSerialize["speechRate"] = o.SpeechRate
+	}
+	if !IsNil(o.LoopCount) {
+		toSerialize["loopCount"] = o.LoopCount
+	}
+	if !IsNil(o.Preferences) {
+		toSerialize["preferences"] = o.Preferences
+	}
+	if !IsNil(o.StopOn) {
+		toSerialize["stopOn"] = o.StopOn
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableCallSayRequest struct {
+	value *CallSayRequest
+	isSet bool
+}
+
+func (v NullableCallSayRequest) Get() *CallSayRequest {
+	return v.value
+}
+
+func (v *NullableCallSayRequest) Set(val *CallSayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallSayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallSayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallSayRequest(val *CallSayRequest) *NullableCallSayRequest {
+	return &NullableCallSayRequest{value: val, isSet: true}
+}
+
+func (v NullableCallSayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallSayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_state.go b/pkg/infobip/models/voice/call_state.go
new file mode 100644
index 0000000..db45987
--- /dev/null
+++ b/pkg/infobip/models/voice/call_state.go
@@ -0,0 +1,126 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallState Call state.
+type CallState string
+
+// List of CallState
+const (
+	CALLSTATE_CALLING         CallState = "CALLING"
+	CALLSTATE_RINGING         CallState = "RINGING"
+	CALLSTATE_PRE_ESTABLISHED CallState = "PRE_ESTABLISHED"
+	CALLSTATE_ESTABLISHED     CallState = "ESTABLISHED"
+	CALLSTATE_FINISHED        CallState = "FINISHED"
+	CALLSTATE_FAILED          CallState = "FAILED"
+	CALLSTATE_CANCELLED       CallState = "CANCELLED"
+	CALLSTATE_NO_ANSWER       CallState = "NO_ANSWER"
+	CALLSTATE_BUSY            CallState = "BUSY"
+	CALLSTATE_DISCONNECTED    CallState = "DISCONNECTED"
+)
+
+// All allowed values of CallState enum
+var AllowedCallStateEnumValues = []CallState{
+	"CALLING",
+	"RINGING",
+	"PRE_ESTABLISHED",
+	"ESTABLISHED",
+	"FINISHED",
+	"FAILED",
+	"CANCELLED",
+	"NO_ANSWER",
+	"BUSY",
+	"DISCONNECTED",
+}
+
+func (v *CallState) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CallState(value)
+	for _, existing := range AllowedCallStateEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CallState", value)
+}
+
+// NewCallStateFromValue returns a pointer to a valid CallState
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCallStateFromValue(v string) (*CallState, error) {
+	ev := CallState(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CallState: valid values are %v", v, AllowedCallStateEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CallState) IsValid() bool {
+	for _, existing := range AllowedCallStateEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CallState value
+func (v CallState) Ptr() *CallState {
+	return &v
+}
+
+type NullableCallState struct {
+	value *CallState
+	isSet bool
+}
+
+func (v NullableCallState) Get() *CallState {
+	return v.value
+}
+
+func (v *NullableCallState) Set(val *CallState) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallState) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallState) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallState(val *CallState) *NullableCallState {
+	return &NullableCallState{value: val, isSet: true}
+}
+
+func (v NullableCallState) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallState) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/call_transfer.go b/pkg/infobip/models/voice/call_transfer.go
new file mode 100644
index 0000000..ad7719a
--- /dev/null
+++ b/pkg/infobip/models/voice/call_transfer.go
@@ -0,0 +1,224 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallTransfer type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallTransfer{}
+
+// CallTransfer Call transfers object enables transferring the ongoing call to another recipient(s) and establish a communication between your original recipient and additional one.
+type CallTransfer struct {
+	// Maximum duration of the transferred call, specified in seconds.
+	CallTransferMaxDuration *int32
+	// Criteria for establishing call transfer, if `dtmf` is evaluated.
+	Equals *string
+	// Phone number of the recipient that will receive transferred call. Must be written in E.164 standard (Example: 41793026727).
+	TransferTo string
+	// Specifies what to evaluate. Can be `dtmf` or `anyDtmf`.
+	If string
+}
+
+type _CallTransfer CallTransfer
+
+// NewCallTransfer instantiates a new CallTransfer object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallTransfer(transferTo string, if_ string) *CallTransfer {
+	this := CallTransfer{}
+	this.TransferTo = transferTo
+	this.If = if_
+	return &this
+}
+
+// NewCallTransferWithDefaults instantiates a new CallTransfer object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallTransferWithDefaults() *CallTransfer {
+	this := CallTransfer{}
+
+	return &this
+}
+
+// GetCallTransferMaxDuration returns the CallTransferMaxDuration field value if set, zero value otherwise.
+func (o *CallTransfer) GetCallTransferMaxDuration() int32 {
+	if o == nil || IsNil(o.CallTransferMaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.CallTransferMaxDuration
+}
+
+// GetCallTransferMaxDurationOk returns a tuple with the CallTransferMaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallTransfer) GetCallTransferMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.CallTransferMaxDuration) {
+		return nil, false
+	}
+	return o.CallTransferMaxDuration, true
+}
+
+// HasCallTransferMaxDuration returns a boolean if a field has been set.
+func (o *CallTransfer) HasCallTransferMaxDuration() bool {
+	if o != nil && !IsNil(o.CallTransferMaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallTransferMaxDuration gets a reference to the given int32 and assigns it to the CallTransferMaxDuration field.
+func (o *CallTransfer) SetCallTransferMaxDuration(v int32) {
+	o.CallTransferMaxDuration = &v
+}
+
+// GetEquals returns the Equals field value if set, zero value otherwise.
+func (o *CallTransfer) GetEquals() string {
+	if o == nil || IsNil(o.Equals) {
+		var ret string
+		return ret
+	}
+	return *o.Equals
+}
+
+// GetEqualsOk returns a tuple with the Equals field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallTransfer) GetEqualsOk() (*string, bool) {
+	if o == nil || IsNil(o.Equals) {
+		return nil, false
+	}
+	return o.Equals, true
+}
+
+// HasEquals returns a boolean if a field has been set.
+func (o *CallTransfer) HasEquals() bool {
+	if o != nil && !IsNil(o.Equals) {
+		return true
+	}
+
+	return false
+}
+
+// SetEquals gets a reference to the given string and assigns it to the Equals field.
+func (o *CallTransfer) SetEquals(v string) {
+	o.Equals = &v
+}
+
+// GetTransferTo returns the TransferTo field value
+func (o *CallTransfer) GetTransferTo() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.TransferTo
+}
+
+// GetTransferToOk returns a tuple with the TransferTo field value
+// and a boolean to check if the value has been set.
+func (o *CallTransfer) GetTransferToOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.TransferTo, true
+}
+
+// SetTransferTo sets field value
+func (o *CallTransfer) SetTransferTo(v string) {
+	o.TransferTo = v
+}
+
+// GetIf returns the If field value
+func (o *CallTransfer) GetIf() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.If
+}
+
+// GetIfOk returns a tuple with the If field value
+// and a boolean to check if the value has been set.
+func (o *CallTransfer) GetIfOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.If, true
+}
+
+// SetIf sets field value
+func (o *CallTransfer) SetIf(v string) {
+	o.If = v
+}
+
+func (o CallTransfer) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallTransfer) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallTransferMaxDuration) {
+		toSerialize["callTransferMaxDuration"] = o.CallTransferMaxDuration
+	}
+	if !IsNil(o.Equals) {
+		toSerialize["equals"] = o.Equals
+	}
+	toSerialize["transferTo"] = o.TransferTo
+	toSerialize["if"] = o.If
+	return toSerialize, nil
+}
+
+type NullableCallTransfer struct {
+	value *CallTransfer
+	isSet bool
+}
+
+func (v NullableCallTransfer) Get() *CallTransfer {
+	return v.value
+}
+
+func (v *NullableCallTransfer) Set(val *CallTransfer) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallTransfer) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallTransfer) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallTransfer(val *CallTransfer) *NullableCallTransfer {
+	return &NullableCallTransfer{value: val, isSet: true}
+}
+
+func (v NullableCallTransfer) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallTransfer) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/callback_response.go b/pkg/infobip/models/voice/callback_response.go
new file mode 100644
index 0000000..a573b41
--- /dev/null
+++ b/pkg/infobip/models/voice/callback_response.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CallbackResponse struct for CallbackResponse
+type CallbackResponse struct {
+	AudioCallbackResponse       *AudioCallbackResponse
+	CaptureDtmfCallbackResponse *CaptureDtmfCallbackResponse
+	DialCallbackResponse        *DialCallbackResponse
+}
+
+// AudioCallbackResponseAsCallbackResponse is a convenience function that returns AudioCallbackResponse wrapped in CallbackResponse
+func AudioCallbackResponseAsCallbackResponse(v *AudioCallbackResponse) CallbackResponse {
+	return CallbackResponse{
+		AudioCallbackResponse: v,
+	}
+}
+
+// CaptureDtmfCallbackResponseAsCallbackResponse is a convenience function that returns CaptureDtmfCallbackResponse wrapped in CallbackResponse
+func CaptureDtmfCallbackResponseAsCallbackResponse(v *CaptureDtmfCallbackResponse) CallbackResponse {
+	return CallbackResponse{
+		CaptureDtmfCallbackResponse: v,
+	}
+}
+
+// DialCallbackResponseAsCallbackResponse is a convenience function that returns DialCallbackResponse wrapped in CallbackResponse
+func DialCallbackResponseAsCallbackResponse(v *DialCallbackResponse) CallbackResponse {
+	return CallbackResponse{
+		DialCallbackResponse: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CallbackResponse) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'audio'
+	if jsonDict["command"] == "audio" {
+		// try to unmarshal JSON data into AudioCallbackResponse
+		err = json.Unmarshal(data, &dst.AudioCallbackResponse)
+		if err == nil {
+			jsonAudioCallbackResponse, _ := json.Marshal(dst.AudioCallbackResponse)
+			if string(jsonAudioCallbackResponse) == "{}" { // empty struct
+				dst.AudioCallbackResponse = nil
+			} else {
+				return nil // data stored in dst.AudioCallbackResponse, return on the first match
+			}
+		} else {
+			dst.AudioCallbackResponse = nil
+		}
+	}
+	// check if the discriminator value is 'captureDtmf'
+	if jsonDict["command"] == "captureDtmf" {
+		// try to unmarshal JSON data into CaptureDtmfCallbackResponse
+		err = json.Unmarshal(data, &dst.CaptureDtmfCallbackResponse)
+		if err == nil {
+			jsonCaptureDtmfCallbackResponse, _ := json.Marshal(dst.CaptureDtmfCallbackResponse)
+			if string(jsonCaptureDtmfCallbackResponse) == "{}" { // empty struct
+				dst.CaptureDtmfCallbackResponse = nil
+			} else {
+				return nil // data stored in dst.CaptureDtmfCallbackResponse, return on the first match
+			}
+		} else {
+			dst.CaptureDtmfCallbackResponse = nil
+		}
+	}
+	// check if the discriminator value is 'dial'
+	if jsonDict["command"] == "dial" {
+		// try to unmarshal JSON data into DialCallbackResponse
+		err = json.Unmarshal(data, &dst.DialCallbackResponse)
+		if err == nil {
+			jsonDialCallbackResponse, _ := json.Marshal(dst.DialCallbackResponse)
+			if string(jsonDialCallbackResponse) == "{}" { // empty struct
+				dst.DialCallbackResponse = nil
+			} else {
+				return nil // data stored in dst.DialCallbackResponse, return on the first match
+			}
+		} else {
+			dst.DialCallbackResponse = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CallbackResponse)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CallbackResponse) MarshalJSON() ([]byte, error) {
+	if src.AudioCallbackResponse != nil {
+		return json.Marshal(&src.AudioCallbackResponse)
+	}
+	if src.CaptureDtmfCallbackResponse != nil {
+		return json.Marshal(&src.CaptureDtmfCallbackResponse)
+	}
+	if src.DialCallbackResponse != nil {
+		return json.Marshal(&src.DialCallbackResponse)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CallbackResponse) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.AudioCallbackResponse != nil {
+		return obj.AudioCallbackResponse
+	}
+	if obj.CaptureDtmfCallbackResponse != nil {
+		return obj.CaptureDtmfCallbackResponse
+	}
+	if obj.DialCallbackResponse != nil {
+		return obj.DialCallbackResponse
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCallbackResponse struct {
+	value *CallbackResponse
+	isSet bool
+}
+
+func (v NullableCallbackResponse) Get() *CallbackResponse {
+	return v.value
+}
+
+func (v *NullableCallbackResponse) Set(val *CallbackResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallbackResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallbackResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallbackResponse(val *CallbackResponse) *NullableCallbackResponse {
+	return &NullableCallbackResponse{value: val, isSet: true}
+}
+
+func (v NullableCallbackResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallbackResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/calls_configuration_create_request.go b/pkg/infobip/models/voice/calls_configuration_create_request.go
new file mode 100644
index 0000000..4056bbd
--- /dev/null
+++ b/pkg/infobip/models/voice/calls_configuration_create_request.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallsConfigurationCreateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallsConfigurationCreateRequest{}
+
+// CallsConfigurationCreateRequest struct for CallsConfigurationCreateRequest
+type CallsConfigurationCreateRequest struct {
+	// Calls configuration ID. If not provided, system will generate random ID, which will be returned in response.
+	Id *string
+	// Calls configuration name.
+	Name *string
+}
+
+// NewCallsConfigurationCreateRequest instantiates a new CallsConfigurationCreateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallsConfigurationCreateRequest() *CallsConfigurationCreateRequest {
+	this := CallsConfigurationCreateRequest{}
+	return &this
+}
+
+// NewCallsConfigurationCreateRequestWithDefaults instantiates a new CallsConfigurationCreateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallsConfigurationCreateRequestWithDefaults() *CallsConfigurationCreateRequest {
+	this := CallsConfigurationCreateRequest{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *CallsConfigurationCreateRequest) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationCreateRequest) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *CallsConfigurationCreateRequest) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *CallsConfigurationCreateRequest) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *CallsConfigurationCreateRequest) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationCreateRequest) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *CallsConfigurationCreateRequest) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *CallsConfigurationCreateRequest) SetName(v string) {
+	o.Name = &v
+}
+
+func (o CallsConfigurationCreateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallsConfigurationCreateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	return toSerialize, nil
+}
+
+type NullableCallsConfigurationCreateRequest struct {
+	value *CallsConfigurationCreateRequest
+	isSet bool
+}
+
+func (v NullableCallsConfigurationCreateRequest) Get() *CallsConfigurationCreateRequest {
+	return v.value
+}
+
+func (v *NullableCallsConfigurationCreateRequest) Set(val *CallsConfigurationCreateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallsConfigurationCreateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallsConfigurationCreateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallsConfigurationCreateRequest(val *CallsConfigurationCreateRequest) *NullableCallsConfigurationCreateRequest {
+	return &NullableCallsConfigurationCreateRequest{value: val, isSet: true}
+}
+
+func (v NullableCallsConfigurationCreateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallsConfigurationCreateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/calls_configuration_page.go b/pkg/infobip/models/voice/calls_configuration_page.go
new file mode 100644
index 0000000..8443b8b
--- /dev/null
+++ b/pkg/infobip/models/voice/calls_configuration_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallsConfigurationPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallsConfigurationPage{}
+
+// CallsConfigurationPage struct for CallsConfigurationPage
+type CallsConfigurationPage struct {
+	// The list of the results for this page.
+	Results []CallsConfigurationResponse
+	Paging  *PageInfo
+}
+
+// NewCallsConfigurationPage instantiates a new CallsConfigurationPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallsConfigurationPage() *CallsConfigurationPage {
+	this := CallsConfigurationPage{}
+	return &this
+}
+
+// NewCallsConfigurationPageWithDefaults instantiates a new CallsConfigurationPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallsConfigurationPageWithDefaults() *CallsConfigurationPage {
+	this := CallsConfigurationPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *CallsConfigurationPage) GetResults() []CallsConfigurationResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []CallsConfigurationResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationPage) GetResultsOk() ([]CallsConfigurationResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *CallsConfigurationPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []CallsConfigurationResponse and assigns it to the Results field.
+func (o *CallsConfigurationPage) SetResults(v []CallsConfigurationResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *CallsConfigurationPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *CallsConfigurationPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *CallsConfigurationPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o CallsConfigurationPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallsConfigurationPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableCallsConfigurationPage struct {
+	value *CallsConfigurationPage
+	isSet bool
+}
+
+func (v NullableCallsConfigurationPage) Get() *CallsConfigurationPage {
+	return v.value
+}
+
+func (v *NullableCallsConfigurationPage) Set(val *CallsConfigurationPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallsConfigurationPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallsConfigurationPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallsConfigurationPage(val *CallsConfigurationPage) *NullableCallsConfigurationPage {
+	return &NullableCallsConfigurationPage{value: val, isSet: true}
+}
+
+func (v NullableCallsConfigurationPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallsConfigurationPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/calls_configuration_response.go b/pkg/infobip/models/voice/calls_configuration_response.go
new file mode 100644
index 0000000..fe8b6f9
--- /dev/null
+++ b/pkg/infobip/models/voice/calls_configuration_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallsConfigurationResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallsConfigurationResponse{}
+
+// CallsConfigurationResponse struct for CallsConfigurationResponse
+type CallsConfigurationResponse struct {
+	// Calls configuration ID.
+	Id *string
+	// Calls configuration name.
+	Name *string
+}
+
+// NewCallsConfigurationResponse instantiates a new CallsConfigurationResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallsConfigurationResponse() *CallsConfigurationResponse {
+	this := CallsConfigurationResponse{}
+	return &this
+}
+
+// NewCallsConfigurationResponseWithDefaults instantiates a new CallsConfigurationResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallsConfigurationResponseWithDefaults() *CallsConfigurationResponse {
+	this := CallsConfigurationResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *CallsConfigurationResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *CallsConfigurationResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *CallsConfigurationResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *CallsConfigurationResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *CallsConfigurationResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *CallsConfigurationResponse) SetName(v string) {
+	o.Name = &v
+}
+
+func (o CallsConfigurationResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallsConfigurationResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	return toSerialize, nil
+}
+
+type NullableCallsConfigurationResponse struct {
+	value *CallsConfigurationResponse
+	isSet bool
+}
+
+func (v NullableCallsConfigurationResponse) Get() *CallsConfigurationResponse {
+	return v.value
+}
+
+func (v *NullableCallsConfigurationResponse) Set(val *CallsConfigurationResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallsConfigurationResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallsConfigurationResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallsConfigurationResponse(val *CallsConfigurationResponse) *NullableCallsConfigurationResponse {
+	return &NullableCallsConfigurationResponse{value: val, isSet: true}
+}
+
+func (v NullableCallsConfigurationResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallsConfigurationResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/calls_configuration_update_request.go b/pkg/infobip/models/voice/calls_configuration_update_request.go
new file mode 100644
index 0000000..be60001
--- /dev/null
+++ b/pkg/infobip/models/voice/calls_configuration_update_request.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallsConfigurationUpdateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallsConfigurationUpdateRequest{}
+
+// CallsConfigurationUpdateRequest struct for CallsConfigurationUpdateRequest
+type CallsConfigurationUpdateRequest struct {
+	// Calls configuration name.
+	Name *string
+}
+
+// NewCallsConfigurationUpdateRequest instantiates a new CallsConfigurationUpdateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallsConfigurationUpdateRequest() *CallsConfigurationUpdateRequest {
+	this := CallsConfigurationUpdateRequest{}
+	return &this
+}
+
+// NewCallsConfigurationUpdateRequestWithDefaults instantiates a new CallsConfigurationUpdateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallsConfigurationUpdateRequestWithDefaults() *CallsConfigurationUpdateRequest {
+	this := CallsConfigurationUpdateRequest{}
+
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *CallsConfigurationUpdateRequest) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsConfigurationUpdateRequest) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *CallsConfigurationUpdateRequest) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *CallsConfigurationUpdateRequest) SetName(v string) {
+	o.Name = &v
+}
+
+func (o CallsConfigurationUpdateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallsConfigurationUpdateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	return toSerialize, nil
+}
+
+type NullableCallsConfigurationUpdateRequest struct {
+	value *CallsConfigurationUpdateRequest
+	isSet bool
+}
+
+func (v NullableCallsConfigurationUpdateRequest) Get() *CallsConfigurationUpdateRequest {
+	return v.value
+}
+
+func (v *NullableCallsConfigurationUpdateRequest) Set(val *CallsConfigurationUpdateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallsConfigurationUpdateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallsConfigurationUpdateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallsConfigurationUpdateRequest(val *CallsConfigurationUpdateRequest) *NullableCallsConfigurationUpdateRequest {
+	return &NullableCallsConfigurationUpdateRequest{value: val, isSet: true}
+}
+
+func (v NullableCallsConfigurationUpdateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallsConfigurationUpdateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/calls_recording.go b/pkg/infobip/models/voice/calls_recording.go
new file mode 100644
index 0000000..ac7271d
--- /dev/null
+++ b/pkg/infobip/models/voice/calls_recording.go
@@ -0,0 +1,170 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CallsRecording type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CallsRecording{}
+
+// CallsRecording Recording configuration of a Number Masking call.
+type CallsRecording struct {
+	// Indicates whether call recording is enabled from the callee perspective.
+	Enabled *bool
+	// Flag that indicates will callee announcement be included in recording file. If not set, it will be `true`.
+	RecordCalleeAnnouncement *bool
+}
+
+// NewCallsRecording instantiates a new CallsRecording object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCallsRecording() *CallsRecording {
+	this := CallsRecording{}
+	var recordCalleeAnnouncement bool = true
+	this.RecordCalleeAnnouncement = &recordCalleeAnnouncement
+	return &this
+}
+
+// NewCallsRecordingWithDefaults instantiates a new CallsRecording object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCallsRecordingWithDefaults() *CallsRecording {
+	this := CallsRecording{}
+
+	var recordCalleeAnnouncement bool = true
+	this.RecordCalleeAnnouncement = &recordCalleeAnnouncement
+	return &this
+}
+
+// GetEnabled returns the Enabled field value if set, zero value otherwise.
+func (o *CallsRecording) GetEnabled() bool {
+	if o == nil || IsNil(o.Enabled) {
+		var ret bool
+		return ret
+	}
+	return *o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsRecording) GetEnabledOk() (*bool, bool) {
+	if o == nil || IsNil(o.Enabled) {
+		return nil, false
+	}
+	return o.Enabled, true
+}
+
+// HasEnabled returns a boolean if a field has been set.
+func (o *CallsRecording) HasEnabled() bool {
+	if o != nil && !IsNil(o.Enabled) {
+		return true
+	}
+
+	return false
+}
+
+// SetEnabled gets a reference to the given bool and assigns it to the Enabled field.
+func (o *CallsRecording) SetEnabled(v bool) {
+	o.Enabled = &v
+}
+
+// GetRecordCalleeAnnouncement returns the RecordCalleeAnnouncement field value if set, zero value otherwise.
+func (o *CallsRecording) GetRecordCalleeAnnouncement() bool {
+	if o == nil || IsNil(o.RecordCalleeAnnouncement) {
+		var ret bool
+		return ret
+	}
+	return *o.RecordCalleeAnnouncement
+}
+
+// GetRecordCalleeAnnouncementOk returns a tuple with the RecordCalleeAnnouncement field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CallsRecording) GetRecordCalleeAnnouncementOk() (*bool, bool) {
+	if o == nil || IsNil(o.RecordCalleeAnnouncement) {
+		return nil, false
+	}
+	return o.RecordCalleeAnnouncement, true
+}
+
+// HasRecordCalleeAnnouncement returns a boolean if a field has been set.
+func (o *CallsRecording) HasRecordCalleeAnnouncement() bool {
+	if o != nil && !IsNil(o.RecordCalleeAnnouncement) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordCalleeAnnouncement gets a reference to the given bool and assigns it to the RecordCalleeAnnouncement field.
+func (o *CallsRecording) SetRecordCalleeAnnouncement(v bool) {
+	o.RecordCalleeAnnouncement = &v
+}
+
+func (o CallsRecording) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CallsRecording) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Enabled) {
+		toSerialize["enabled"] = o.Enabled
+	}
+	if !IsNil(o.RecordCalleeAnnouncement) {
+		toSerialize["recordCalleeAnnouncement"] = o.RecordCalleeAnnouncement
+	}
+	return toSerialize, nil
+}
+
+type NullableCallsRecording struct {
+	value *CallsRecording
+	isSet bool
+}
+
+func (v NullableCallsRecording) Get() *CallsRecording {
+	return v.value
+}
+
+func (v *NullableCallsRecording) Set(val *CallsRecording) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCallsRecording) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCallsRecording) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCallsRecording(val *CallsRecording) *NullableCallsRecording {
+	return &NullableCallsRecording{value: val, isSet: true}
+}
+
+func (v NullableCallsRecording) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCallsRecording) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/capture.go b/pkg/infobip/models/voice/capture.go
new file mode 100644
index 0000000..a9198e9
--- /dev/null
+++ b/pkg/infobip/models/voice/capture.go
@@ -0,0 +1,286 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Capture type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Capture{}
+
+// Capture Capture action performs speech recognition of a specified duration. The recognized text can be used in other actions of the scenario.
+type Capture struct {
+	// Variable name. If speech recognition matches one of the specified keyPhrases, a variable with this name will be set to match the keyphrase. Otherwise, this variable will be an empty string. Together with this variable, an implicit variable that contains the full text of the captured speech will be created. The name of this variable is constructed by adding _Full suffix to the variable name.
+	Capture string
+	// Number of seconds used for capturing speech or digits failover. Minimum value is 1 and maximum value is 30. Can be overriden with speechOptions.maxSilence.
+	Timeout       int32
+	SpeechOptions SpeechOptions
+	DtmfOptions   *DtmfOptions
+	SendToReports *SendToReports
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Capture Capture
+
+// NewCapture instantiates a new Capture object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCapture(capture string, timeout int32, speechOptions SpeechOptions) *Capture {
+	this := Capture{}
+	this.Capture = capture
+	this.Timeout = timeout
+	this.SpeechOptions = speechOptions
+	return &this
+}
+
+// NewCaptureWithDefaults instantiates a new Capture object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCaptureWithDefaults() *Capture {
+	this := Capture{}
+
+	return &this
+}
+
+// GetCapture returns the Capture field value
+func (o *Capture) GetCapture() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Capture
+}
+
+// GetCaptureOk returns a tuple with the Capture field value
+// and a boolean to check if the value has been set.
+func (o *Capture) GetCaptureOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Capture, true
+}
+
+// SetCapture sets field value
+func (o *Capture) SetCapture(v string) {
+	o.Capture = v
+}
+
+// GetTimeout returns the Timeout field value
+func (o *Capture) GetTimeout() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value
+// and a boolean to check if the value has been set.
+func (o *Capture) GetTimeoutOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Timeout, true
+}
+
+// SetTimeout sets field value
+func (o *Capture) SetTimeout(v int32) {
+	o.Timeout = v
+}
+
+// GetSpeechOptions returns the SpeechOptions field value
+func (o *Capture) GetSpeechOptions() SpeechOptions {
+	if o == nil {
+		var ret SpeechOptions
+		return ret
+	}
+
+	return o.SpeechOptions
+}
+
+// GetSpeechOptionsOk returns a tuple with the SpeechOptions field value
+// and a boolean to check if the value has been set.
+func (o *Capture) GetSpeechOptionsOk() (*SpeechOptions, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SpeechOptions, true
+}
+
+// SetSpeechOptions sets field value
+func (o *Capture) SetSpeechOptions(v SpeechOptions) {
+	o.SpeechOptions = v
+}
+
+// GetDtmfOptions returns the DtmfOptions field value if set, zero value otherwise.
+func (o *Capture) GetDtmfOptions() DtmfOptions {
+	if o == nil || IsNil(o.DtmfOptions) {
+		var ret DtmfOptions
+		return ret
+	}
+	return *o.DtmfOptions
+}
+
+// GetDtmfOptionsOk returns a tuple with the DtmfOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Capture) GetDtmfOptionsOk() (*DtmfOptions, bool) {
+	if o == nil || IsNil(o.DtmfOptions) {
+		return nil, false
+	}
+	return o.DtmfOptions, true
+}
+
+// HasDtmfOptions returns a boolean if a field has been set.
+func (o *Capture) HasDtmfOptions() bool {
+	if o != nil && !IsNil(o.DtmfOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmfOptions gets a reference to the given DtmfOptions and assigns it to the DtmfOptions field.
+func (o *Capture) SetDtmfOptions(v DtmfOptions) {
+	o.DtmfOptions = &v
+}
+
+// GetSendToReports returns the SendToReports field value if set, zero value otherwise.
+func (o *Capture) GetSendToReports() SendToReports {
+	if o == nil || IsNil(o.SendToReports) {
+		var ret SendToReports
+		return ret
+	}
+	return *o.SendToReports
+}
+
+// GetSendToReportsOk returns a tuple with the SendToReports field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Capture) GetSendToReportsOk() (*SendToReports, bool) {
+	if o == nil || IsNil(o.SendToReports) {
+		return nil, false
+	}
+	return o.SendToReports, true
+}
+
+// HasSendToReports returns a boolean if a field has been set.
+func (o *Capture) HasSendToReports() bool {
+	if o != nil && !IsNil(o.SendToReports) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendToReports gets a reference to the given SendToReports and assigns it to the SendToReports field.
+func (o *Capture) SetSendToReports(v SendToReports) {
+	o.SendToReports = &v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Capture) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Capture) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Capture) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Capture) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Capture) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Capture) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["capture"] = o.Capture
+	toSerialize["timeout"] = o.Timeout
+	toSerialize["speechOptions"] = o.SpeechOptions
+	if !IsNil(o.DtmfOptions) {
+		toSerialize["dtmfOptions"] = o.DtmfOptions
+	}
+	if !IsNil(o.SendToReports) {
+		toSerialize["sendToReports"] = o.SendToReports
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableCapture struct {
+	value *Capture
+	isSet bool
+}
+
+func (v NullableCapture) Get() *Capture {
+	return v.value
+}
+
+func (v *NullableCapture) Set(val *Capture) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCapture) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCapture) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCapture(val *Capture) *NullableCapture {
+	return &NullableCapture{value: val, isSet: true}
+}
+
+func (v NullableCapture) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCapture) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/capture_dtmf_callback_response.go b/pkg/infobip/models/voice/capture_dtmf_callback_response.go
new file mode 100644
index 0000000..d530059
--- /dev/null
+++ b/pkg/infobip/models/voice/capture_dtmf_callback_response.go
@@ -0,0 +1,371 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CaptureDtmfCallbackResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CaptureDtmfCallbackResponse{}
+
+// CaptureDtmfCallbackResponse struct for CaptureDtmfCallbackResponse
+type CaptureDtmfCallbackResponse struct {
+	Command string
+	// ID of an audio file to play. Required if `fileUrl` is not provided.
+	FileId *string
+	// URL of an audio file to play. Required if `fileId` is not provided.
+	FileUrl *string
+	// Maximum number of digits to capture.
+	MaxLength int32
+	// The duration, in milliseconds, to wait for the first DTMF digit response.
+	Timeout int32
+	// Duration, in milliseconds, to wait for a DTMF digit in-between individual digit inputs. If not set, `digitTimeout` will use the same duration as `timeout`.
+	DigitTimeout *int32
+	// Digit used to end input if less than `maxLength` digits have been pressed.
+	Terminator *string
+	// Whether to convert the collected number into international format or not.
+	AddCountryCode *bool
+}
+
+type _CaptureDtmfCallbackResponse CaptureDtmfCallbackResponse
+
+// NewCaptureDtmfCallbackResponse instantiates a new CaptureDtmfCallbackResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCaptureDtmfCallbackResponse(maxLength int32, timeout int32) *CaptureDtmfCallbackResponse {
+	this := CaptureDtmfCallbackResponse{}
+	this.Command = "captureDtmf"
+	this.MaxLength = maxLength
+	this.Timeout = timeout
+	var terminator string = "#"
+	this.Terminator = &terminator
+	var addCountryCode bool = false
+	this.AddCountryCode = &addCountryCode
+	return &this
+}
+
+// NewCaptureDtmfCallbackResponseWithDefaults instantiates a new CaptureDtmfCallbackResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCaptureDtmfCallbackResponseWithDefaults() *CaptureDtmfCallbackResponse {
+	this := CaptureDtmfCallbackResponse{}
+	this.Command = "captureDtmf"
+	var maxLength int32 = 15
+	this.MaxLength = maxLength
+	var terminator string = "#"
+	this.Terminator = &terminator
+	var addCountryCode bool = false
+	this.AddCountryCode = &addCountryCode
+	return &this
+}
+
+// GetCommand returns the Command field value
+func (o *CaptureDtmfCallbackResponse) GetCommand() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Command
+}
+
+// GetCommandOk returns a tuple with the Command field value
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetCommandOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Command, true
+}
+
+// SetCommand sets field value
+func (o *CaptureDtmfCallbackResponse) SetCommand(v string) {
+	o.Command = v
+}
+
+// GetFileId returns the FileId field value if set, zero value otherwise.
+func (o *CaptureDtmfCallbackResponse) GetFileId() string {
+	if o == nil || IsNil(o.FileId) {
+		var ret string
+		return ret
+	}
+	return *o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetFileIdOk() (*string, bool) {
+	if o == nil || IsNil(o.FileId) {
+		return nil, false
+	}
+	return o.FileId, true
+}
+
+// HasFileId returns a boolean if a field has been set.
+func (o *CaptureDtmfCallbackResponse) HasFileId() bool {
+	if o != nil && !IsNil(o.FileId) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileId gets a reference to the given string and assigns it to the FileId field.
+func (o *CaptureDtmfCallbackResponse) SetFileId(v string) {
+	o.FileId = &v
+}
+
+// GetFileUrl returns the FileUrl field value if set, zero value otherwise.
+func (o *CaptureDtmfCallbackResponse) GetFileUrl() string {
+	if o == nil || IsNil(o.FileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.FileUrl
+}
+
+// GetFileUrlOk returns a tuple with the FileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.FileUrl) {
+		return nil, false
+	}
+	return o.FileUrl, true
+}
+
+// HasFileUrl returns a boolean if a field has been set.
+func (o *CaptureDtmfCallbackResponse) HasFileUrl() bool {
+	if o != nil && !IsNil(o.FileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileUrl gets a reference to the given string and assigns it to the FileUrl field.
+func (o *CaptureDtmfCallbackResponse) SetFileUrl(v string) {
+	o.FileUrl = &v
+}
+
+// GetMaxLength returns the MaxLength field value
+func (o *CaptureDtmfCallbackResponse) GetMaxLength() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.MaxLength
+}
+
+// GetMaxLengthOk returns a tuple with the MaxLength field value
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetMaxLengthOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MaxLength, true
+}
+
+// SetMaxLength sets field value
+func (o *CaptureDtmfCallbackResponse) SetMaxLength(v int32) {
+	o.MaxLength = v
+}
+
+// GetTimeout returns the Timeout field value
+func (o *CaptureDtmfCallbackResponse) GetTimeout() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetTimeoutOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Timeout, true
+}
+
+// SetTimeout sets field value
+func (o *CaptureDtmfCallbackResponse) SetTimeout(v int32) {
+	o.Timeout = v
+}
+
+// GetDigitTimeout returns the DigitTimeout field value if set, zero value otherwise.
+func (o *CaptureDtmfCallbackResponse) GetDigitTimeout() int32 {
+	if o == nil || IsNil(o.DigitTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.DigitTimeout
+}
+
+// GetDigitTimeoutOk returns a tuple with the DigitTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetDigitTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.DigitTimeout) {
+		return nil, false
+	}
+	return o.DigitTimeout, true
+}
+
+// HasDigitTimeout returns a boolean if a field has been set.
+func (o *CaptureDtmfCallbackResponse) HasDigitTimeout() bool {
+	if o != nil && !IsNil(o.DigitTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetDigitTimeout gets a reference to the given int32 and assigns it to the DigitTimeout field.
+func (o *CaptureDtmfCallbackResponse) SetDigitTimeout(v int32) {
+	o.DigitTimeout = &v
+}
+
+// GetTerminator returns the Terminator field value if set, zero value otherwise.
+func (o *CaptureDtmfCallbackResponse) GetTerminator() string {
+	if o == nil || IsNil(o.Terminator) {
+		var ret string
+		return ret
+	}
+	return *o.Terminator
+}
+
+// GetTerminatorOk returns a tuple with the Terminator field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetTerminatorOk() (*string, bool) {
+	if o == nil || IsNil(o.Terminator) {
+		return nil, false
+	}
+	return o.Terminator, true
+}
+
+// HasTerminator returns a boolean if a field has been set.
+func (o *CaptureDtmfCallbackResponse) HasTerminator() bool {
+	if o != nil && !IsNil(o.Terminator) {
+		return true
+	}
+
+	return false
+}
+
+// SetTerminator gets a reference to the given string and assigns it to the Terminator field.
+func (o *CaptureDtmfCallbackResponse) SetTerminator(v string) {
+	o.Terminator = &v
+}
+
+// GetAddCountryCode returns the AddCountryCode field value if set, zero value otherwise.
+func (o *CaptureDtmfCallbackResponse) GetAddCountryCode() bool {
+	if o == nil || IsNil(o.AddCountryCode) {
+		var ret bool
+		return ret
+	}
+	return *o.AddCountryCode
+}
+
+// GetAddCountryCodeOk returns a tuple with the AddCountryCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CaptureDtmfCallbackResponse) GetAddCountryCodeOk() (*bool, bool) {
+	if o == nil || IsNil(o.AddCountryCode) {
+		return nil, false
+	}
+	return o.AddCountryCode, true
+}
+
+// HasAddCountryCode returns a boolean if a field has been set.
+func (o *CaptureDtmfCallbackResponse) HasAddCountryCode() bool {
+	if o != nil && !IsNil(o.AddCountryCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetAddCountryCode gets a reference to the given bool and assigns it to the AddCountryCode field.
+func (o *CaptureDtmfCallbackResponse) SetAddCountryCode(v bool) {
+	o.AddCountryCode = &v
+}
+
+func (o CaptureDtmfCallbackResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CaptureDtmfCallbackResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["command"] = o.Command
+	if !IsNil(o.FileId) {
+		toSerialize["fileId"] = o.FileId
+	}
+	if !IsNil(o.FileUrl) {
+		toSerialize["fileUrl"] = o.FileUrl
+	}
+	toSerialize["maxLength"] = o.MaxLength
+	toSerialize["timeout"] = o.Timeout
+	if !IsNil(o.DigitTimeout) {
+		toSerialize["digitTimeout"] = o.DigitTimeout
+	}
+	if !IsNil(o.Terminator) {
+		toSerialize["terminator"] = o.Terminator
+	}
+	if !IsNil(o.AddCountryCode) {
+		toSerialize["addCountryCode"] = o.AddCountryCode
+	}
+	return toSerialize, nil
+}
+
+type NullableCaptureDtmfCallbackResponse struct {
+	value *CaptureDtmfCallbackResponse
+	isSet bool
+}
+
+func (v NullableCaptureDtmfCallbackResponse) Get() *CaptureDtmfCallbackResponse {
+	return v.value
+}
+
+func (v *NullableCaptureDtmfCallbackResponse) Set(val *CaptureDtmfCallbackResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCaptureDtmfCallbackResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCaptureDtmfCallbackResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCaptureDtmfCallbackResponse(val *CaptureDtmfCallbackResponse) *NullableCaptureDtmfCallbackResponse {
+	return &NullableCaptureDtmfCallbackResponse{value: val, isSet: true}
+}
+
+func (v NullableCaptureDtmfCallbackResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCaptureDtmfCallbackResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/case_object.go b/pkg/infobip/models/voice/case_object.go
new file mode 100644
index 0000000..edfd470
--- /dev/null
+++ b/pkg/infobip/models/voice/case_object.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CaseObject type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CaseObject{}
+
+// CaseObject struct for CaseObject
+type CaseObject struct {
+	// Array of actions to execute if none of the conditions above are met.
+	Default []map[string]interface{}
+}
+
+type _CaseObject CaseObject
+
+// NewCaseObject instantiates a new CaseObject object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCaseObject(default_ []map[string]interface{}) *CaseObject {
+	this := CaseObject{}
+	this.Default = default_
+	return &this
+}
+
+// NewCaseObjectWithDefaults instantiates a new CaseObject object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCaseObjectWithDefaults() *CaseObject {
+	this := CaseObject{}
+
+	return &this
+}
+
+// GetDefault returns the Default field value
+func (o *CaseObject) GetDefault() []map[string]interface{} {
+	if o == nil {
+		var ret []map[string]interface{}
+		return ret
+	}
+
+	return o.Default
+}
+
+// GetDefaultOk returns a tuple with the Default field value
+// and a boolean to check if the value has been set.
+func (o *CaseObject) GetDefaultOk() ([]map[string]interface{}, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Default, true
+}
+
+// SetDefault sets field value
+func (o *CaseObject) SetDefault(v []map[string]interface{}) {
+	o.Default = v
+}
+
+func (o CaseObject) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CaseObject) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["__default"] = o.Default
+	return toSerialize, nil
+}
+
+type NullableCaseObject struct {
+	value *CaseObject
+	isSet bool
+}
+
+func (v NullableCaseObject) Get() *CaseObject {
+	return v.value
+}
+
+func (v *NullableCaseObject) Set(val *CaseObject) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCaseObject) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCaseObject) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCaseObject(val *CaseObject) *NullableCaseObject {
+	return &NullableCaseObject{value: val, isSet: true}
+}
+
+func (v NullableCaseObject) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCaseObject) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/cisco_webex_provider.go b/pkg/infobip/models/voice/cisco_webex_provider.go
new file mode 100644
index 0000000..59a3284
--- /dev/null
+++ b/pkg/infobip/models/voice/cisco_webex_provider.go
@@ -0,0 +1,126 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CiscoWebexProvider type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CiscoWebexProvider{}
+
+// CiscoWebexProvider struct for CiscoWebexProvider
+type CiscoWebexProvider struct {
+	Type ProviderTrunkType
+	// Cisco organization ID.
+	CiscoUUID string
+}
+
+type _CiscoWebexProvider CiscoWebexProvider
+
+// NewCiscoWebexProvider instantiates a new CiscoWebexProvider object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCiscoWebexProvider(ciscoUUID string) *CiscoWebexProvider {
+	this := CiscoWebexProvider{}
+	this.Type = "CISCO_WEBEX"
+	this.CiscoUUID = ciscoUUID
+	return &this
+}
+
+// NewCiscoWebexProviderWithDefaults instantiates a new CiscoWebexProvider object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCiscoWebexProviderWithDefaults() *CiscoWebexProvider {
+	this := CiscoWebexProvider{}
+	this.Type = "CISCO_WEBEX"
+	return &this
+}
+
+// GetCiscoUUID returns the CiscoUUID field value
+func (o *CiscoWebexProvider) GetCiscoUUID() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CiscoUUID
+}
+
+// GetCiscoUUIDOk returns a tuple with the CiscoUUID field value
+// and a boolean to check if the value has been set.
+func (o *CiscoWebexProvider) GetCiscoUUIDOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CiscoUUID, true
+}
+
+// SetCiscoUUID sets field value
+func (o *CiscoWebexProvider) SetCiscoUUID(v string) {
+	o.CiscoUUID = v
+}
+
+func (o CiscoWebexProvider) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CiscoWebexProvider) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["ciscoUUID"] = o.CiscoUUID
+	return toSerialize, nil
+}
+
+type NullableCiscoWebexProvider struct {
+	value *CiscoWebexProvider
+	isSet bool
+}
+
+func (v NullableCiscoWebexProvider) Get() *CiscoWebexProvider {
+	return v.value
+}
+
+func (v *NullableCiscoWebexProvider) Set(val *CiscoWebexProvider) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCiscoWebexProvider) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCiscoWebexProvider) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCiscoWebexProvider(val *CiscoWebexProvider) *NullableCiscoWebexProvider {
+	return &NullableCiscoWebexProvider{value: val, isSet: true}
+}
+
+func (v NullableCiscoWebexProvider) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCiscoWebexProvider) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/click_to_call_message.go b/pkg/infobip/models/voice/click_to_call_message.go
new file mode 100644
index 0000000..e6a9c61
--- /dev/null
+++ b/pkg/infobip/models/voice/click_to_call_message.go
@@ -0,0 +1,730 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ClickToCallMessage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ClickToCallMessage{}
+
+// ClickToCallMessage Array of click to call messages to be sent.
+type ClickToCallMessage struct {
+	// If set, same numeric sender (defined in _from_) is used for both calls (towards _destinationA_ and _destinationB_). If not set, _destinationA_ will be shown to _destinationB_. If _fromB_ is set up, _anonymization_ will not be applied; _from_ will be shown to _destinationA_ and _fromB_ will be shown to _destinationB_. Default value is `false`.
+	Anonymization *bool
+	// An audio file can be delivered as a voice message to the recipients. An audio file must be uploaded online, so that the existing URL can be available for file download. Size of the audio file must be below 4 MB. Supported formats of the provided file are aac, aiff, m4a, mp2, mp3, mp4 (audio only), ogg, wav and wma. Our platform needs to have permission to make GET and HEAD HTTP requests on the provided URL. Standard http ports (like 80, 8080, etc.) are advised.
+	AudioFileUrl       *string
+	DeliveryTimeWindow *DeliveryTimeWindow
+	// Original destination address. Address must be in the international format (Example: `41793026727`).
+	DestinationA string
+	// Destination address to which the call will be transferred after successful answering. Address must be in the international format (Example: `41793026727`).
+	DestinationB string
+	// Numeric sender ID in E.164 format. Will be shown to _destinationA_.
+	From string
+	// Numeric sender ID in E.164 format. If set, it will be shown to _destinationB_. If not set, _from_ or _destinationA_ will be shown to _destinationB_, depending on the value of _anonymization_.
+	FromB *string
+	// If the message is in text format, language in which the message is written must be defined for correct pronunciation. In the Languages section, you can find the list of languages that we support. If not set, default language is `English [en].`
+	Language *string
+	// Used for enabling detection of answering machine after the call has been answered on `destinationA`. It can be set to `hangup` which means if a machine is detected, the call is hung up. If `machineDetection` is used, there is a minimum of 4 seconds detection time, which can result in delay of playing the message. Answering machine detection is additionally charged. For more information please contact your account manager.
+	MachineDetection *string
+	// Maximum duration of transferred call in seconds. If set, when _maxDuration_ is reached call will be terminated.
+	MaxDuration *int32
+	// The ID that uniquely identifies the message sent. It can be defined by you or Infobip will generate unique message ID for this specific call. The field is not mandatory.
+	MessageId *string
+	// Preferred Delivery report content type. Can be `application/json` or `application/xml`.
+	NotifyContentType *string
+	// Specifies the version of the report model to be sent. Can be `1` ([deprecated version 1](#programmable-communications/voice/receive-voice-delivery-reports-deprecated)) or `2` ([current version 2](#programmable-communications/voice/receive-voice-delivery-reports)). The default is version 2.
+	NotifyContentVersion *int32
+	// The URL on your callback server on which the Delivery report will be sent.
+	NotifyUrl *string
+	Retry     *Retry
+	// Text of the message that will be played before call transfer.
+	Text  *string
+	Voice *Voice
+	// Time before the end of the transferred call, in seconds, when warning beep sound will be played. For example, if _maxDuration_ is set to `60` and warningTime is set to `5`, this means that warning beep will be played on `55.` second of the transferred call, or `5` seconds before it's end.
+	WarningTime *int32
+}
+
+type _ClickToCallMessage ClickToCallMessage
+
+// NewClickToCallMessage instantiates a new ClickToCallMessage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewClickToCallMessage(destinationA string, destinationB string, from string) *ClickToCallMessage {
+	this := ClickToCallMessage{}
+	this.DestinationA = destinationA
+	this.DestinationB = destinationB
+	this.From = from
+	return &this
+}
+
+// NewClickToCallMessageWithDefaults instantiates a new ClickToCallMessage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewClickToCallMessageWithDefaults() *ClickToCallMessage {
+	this := ClickToCallMessage{}
+
+	return &this
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetAnonymization() bool {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret bool
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetAnonymizationOk() (*bool, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given bool and assigns it to the Anonymization field.
+func (o *ClickToCallMessage) SetAnonymization(v bool) {
+	o.Anonymization = &v
+}
+
+// GetAudioFileUrl returns the AudioFileUrl field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetAudioFileUrl() string {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.AudioFileUrl
+}
+
+// GetAudioFileUrlOk returns a tuple with the AudioFileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetAudioFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		return nil, false
+	}
+	return o.AudioFileUrl, true
+}
+
+// HasAudioFileUrl returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasAudioFileUrl() bool {
+	if o != nil && !IsNil(o.AudioFileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetAudioFileUrl gets a reference to the given string and assigns it to the AudioFileUrl field.
+func (o *ClickToCallMessage) SetAudioFileUrl(v string) {
+	o.AudioFileUrl = &v
+}
+
+// GetDeliveryTimeWindow returns the DeliveryTimeWindow field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetDeliveryTimeWindow() DeliveryTimeWindow {
+	if o == nil || IsNil(o.DeliveryTimeWindow) {
+		var ret DeliveryTimeWindow
+		return ret
+	}
+	return *o.DeliveryTimeWindow
+}
+
+// GetDeliveryTimeWindowOk returns a tuple with the DeliveryTimeWindow field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetDeliveryTimeWindowOk() (*DeliveryTimeWindow, bool) {
+	if o == nil || IsNil(o.DeliveryTimeWindow) {
+		return nil, false
+	}
+	return o.DeliveryTimeWindow, true
+}
+
+// HasDeliveryTimeWindow returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasDeliveryTimeWindow() bool {
+	if o != nil && !IsNil(o.DeliveryTimeWindow) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeliveryTimeWindow gets a reference to the given DeliveryTimeWindow and assigns it to the DeliveryTimeWindow field.
+func (o *ClickToCallMessage) SetDeliveryTimeWindow(v DeliveryTimeWindow) {
+	o.DeliveryTimeWindow = &v
+}
+
+// GetDestinationA returns the DestinationA field value
+func (o *ClickToCallMessage) GetDestinationA() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DestinationA
+}
+
+// GetDestinationAOk returns a tuple with the DestinationA field value
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetDestinationAOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DestinationA, true
+}
+
+// SetDestinationA sets field value
+func (o *ClickToCallMessage) SetDestinationA(v string) {
+	o.DestinationA = v
+}
+
+// GetDestinationB returns the DestinationB field value
+func (o *ClickToCallMessage) GetDestinationB() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DestinationB
+}
+
+// GetDestinationBOk returns a tuple with the DestinationB field value
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetDestinationBOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DestinationB, true
+}
+
+// SetDestinationB sets field value
+func (o *ClickToCallMessage) SetDestinationB(v string) {
+	o.DestinationB = v
+}
+
+// GetFrom returns the From field value
+func (o *ClickToCallMessage) GetFrom() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.From
+}
+
+// GetFromOk returns a tuple with the From field value
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetFromOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.From, true
+}
+
+// SetFrom sets field value
+func (o *ClickToCallMessage) SetFrom(v string) {
+	o.From = v
+}
+
+// GetFromB returns the FromB field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetFromB() string {
+	if o == nil || IsNil(o.FromB) {
+		var ret string
+		return ret
+	}
+	return *o.FromB
+}
+
+// GetFromBOk returns a tuple with the FromB field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetFromBOk() (*string, bool) {
+	if o == nil || IsNil(o.FromB) {
+		return nil, false
+	}
+	return o.FromB, true
+}
+
+// HasFromB returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasFromB() bool {
+	if o != nil && !IsNil(o.FromB) {
+		return true
+	}
+
+	return false
+}
+
+// SetFromB gets a reference to the given string and assigns it to the FromB field.
+func (o *ClickToCallMessage) SetFromB(v string) {
+	o.FromB = &v
+}
+
+// GetLanguage returns the Language field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetLanguage() string {
+	if o == nil || IsNil(o.Language) {
+		var ret string
+		return ret
+	}
+	return *o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetLanguageOk() (*string, bool) {
+	if o == nil || IsNil(o.Language) {
+		return nil, false
+	}
+	return o.Language, true
+}
+
+// HasLanguage returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasLanguage() bool {
+	if o != nil && !IsNil(o.Language) {
+		return true
+	}
+
+	return false
+}
+
+// SetLanguage gets a reference to the given string and assigns it to the Language field.
+func (o *ClickToCallMessage) SetLanguage(v string) {
+	o.Language = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetMachineDetection() string {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret string
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetMachineDetectionOk() (*string, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given string and assigns it to the MachineDetection field.
+func (o *ClickToCallMessage) SetMachineDetection(v string) {
+	o.MachineDetection = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *ClickToCallMessage) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *ClickToCallMessage) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetNotifyContentType returns the NotifyContentType field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetNotifyContentType() string {
+	if o == nil || IsNil(o.NotifyContentType) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyContentType
+}
+
+// GetNotifyContentTypeOk returns a tuple with the NotifyContentType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetNotifyContentTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyContentType) {
+		return nil, false
+	}
+	return o.NotifyContentType, true
+}
+
+// HasNotifyContentType returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasNotifyContentType() bool {
+	if o != nil && !IsNil(o.NotifyContentType) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyContentType gets a reference to the given string and assigns it to the NotifyContentType field.
+func (o *ClickToCallMessage) SetNotifyContentType(v string) {
+	o.NotifyContentType = &v
+}
+
+// GetNotifyContentVersion returns the NotifyContentVersion field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetNotifyContentVersion() int32 {
+	if o == nil || IsNil(o.NotifyContentVersion) {
+		var ret int32
+		return ret
+	}
+	return *o.NotifyContentVersion
+}
+
+// GetNotifyContentVersionOk returns a tuple with the NotifyContentVersion field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetNotifyContentVersionOk() (*int32, bool) {
+	if o == nil || IsNil(o.NotifyContentVersion) {
+		return nil, false
+	}
+	return o.NotifyContentVersion, true
+}
+
+// HasNotifyContentVersion returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasNotifyContentVersion() bool {
+	if o != nil && !IsNil(o.NotifyContentVersion) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyContentVersion gets a reference to the given int32 and assigns it to the NotifyContentVersion field.
+func (o *ClickToCallMessage) SetNotifyContentVersion(v int32) {
+	o.NotifyContentVersion = &v
+}
+
+// GetNotifyUrl returns the NotifyUrl field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetNotifyUrl() string {
+	if o == nil || IsNil(o.NotifyUrl) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyUrl
+}
+
+// GetNotifyUrlOk returns a tuple with the NotifyUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetNotifyUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyUrl) {
+		return nil, false
+	}
+	return o.NotifyUrl, true
+}
+
+// HasNotifyUrl returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasNotifyUrl() bool {
+	if o != nil && !IsNil(o.NotifyUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyUrl gets a reference to the given string and assigns it to the NotifyUrl field.
+func (o *ClickToCallMessage) SetNotifyUrl(v string) {
+	o.NotifyUrl = &v
+}
+
+// GetRetry returns the Retry field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetRetry() Retry {
+	if o == nil || IsNil(o.Retry) {
+		var ret Retry
+		return ret
+	}
+	return *o.Retry
+}
+
+// GetRetryOk returns a tuple with the Retry field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetRetryOk() (*Retry, bool) {
+	if o == nil || IsNil(o.Retry) {
+		return nil, false
+	}
+	return o.Retry, true
+}
+
+// HasRetry returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasRetry() bool {
+	if o != nil && !IsNil(o.Retry) {
+		return true
+	}
+
+	return false
+}
+
+// SetRetry gets a reference to the given Retry and assigns it to the Retry field.
+func (o *ClickToCallMessage) SetRetry(v Retry) {
+	o.Retry = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *ClickToCallMessage) SetText(v string) {
+	o.Text = &v
+}
+
+// GetVoice returns the Voice field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetVoice() Voice {
+	if o == nil || IsNil(o.Voice) {
+		var ret Voice
+		return ret
+	}
+	return *o.Voice
+}
+
+// GetVoiceOk returns a tuple with the Voice field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetVoiceOk() (*Voice, bool) {
+	if o == nil || IsNil(o.Voice) {
+		return nil, false
+	}
+	return o.Voice, true
+}
+
+// HasVoice returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasVoice() bool {
+	if o != nil && !IsNil(o.Voice) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoice gets a reference to the given Voice and assigns it to the Voice field.
+func (o *ClickToCallMessage) SetVoice(v Voice) {
+	o.Voice = &v
+}
+
+// GetWarningTime returns the WarningTime field value if set, zero value otherwise.
+func (o *ClickToCallMessage) GetWarningTime() int32 {
+	if o == nil || IsNil(o.WarningTime) {
+		var ret int32
+		return ret
+	}
+	return *o.WarningTime
+}
+
+// GetWarningTimeOk returns a tuple with the WarningTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessage) GetWarningTimeOk() (*int32, bool) {
+	if o == nil || IsNil(o.WarningTime) {
+		return nil, false
+	}
+	return o.WarningTime, true
+}
+
+// HasWarningTime returns a boolean if a field has been set.
+func (o *ClickToCallMessage) HasWarningTime() bool {
+	if o != nil && !IsNil(o.WarningTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetWarningTime gets a reference to the given int32 and assigns it to the WarningTime field.
+func (o *ClickToCallMessage) SetWarningTime(v int32) {
+	o.WarningTime = &v
+}
+
+func (o ClickToCallMessage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ClickToCallMessage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.AudioFileUrl) {
+		toSerialize["audioFileUrl"] = o.AudioFileUrl
+	}
+	if !IsNil(o.DeliveryTimeWindow) {
+		toSerialize["deliveryTimeWindow"] = o.DeliveryTimeWindow
+	}
+	toSerialize["destinationA"] = o.DestinationA
+	toSerialize["destinationB"] = o.DestinationB
+	toSerialize["from"] = o.From
+	if !IsNil(o.FromB) {
+		toSerialize["fromB"] = o.FromB
+	}
+	if !IsNil(o.Language) {
+		toSerialize["language"] = o.Language
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.NotifyContentType) {
+		toSerialize["notifyContentType"] = o.NotifyContentType
+	}
+	if !IsNil(o.NotifyContentVersion) {
+		toSerialize["notifyContentVersion"] = o.NotifyContentVersion
+	}
+	if !IsNil(o.NotifyUrl) {
+		toSerialize["notifyUrl"] = o.NotifyUrl
+	}
+	if !IsNil(o.Retry) {
+		toSerialize["retry"] = o.Retry
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.Voice) {
+		toSerialize["voice"] = o.Voice
+	}
+	if !IsNil(o.WarningTime) {
+		toSerialize["warningTime"] = o.WarningTime
+	}
+	return toSerialize, nil
+}
+
+type NullableClickToCallMessage struct {
+	value *ClickToCallMessage
+	isSet bool
+}
+
+func (v NullableClickToCallMessage) Get() *ClickToCallMessage {
+	return v.value
+}
+
+func (v *NullableClickToCallMessage) Set(val *ClickToCallMessage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableClickToCallMessage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableClickToCallMessage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableClickToCallMessage(val *ClickToCallMessage) *NullableClickToCallMessage {
+	return &NullableClickToCallMessage{value: val, isSet: true}
+}
+
+func (v NullableClickToCallMessage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableClickToCallMessage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/click_to_call_message_request.go b/pkg/infobip/models/voice/click_to_call_message_request.go
new file mode 100644
index 0000000..b5a0028
--- /dev/null
+++ b/pkg/infobip/models/voice/click_to_call_message_request.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ClickToCallMessageRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ClickToCallMessageRequest{}
+
+// ClickToCallMessageRequest struct for ClickToCallMessageRequest
+type ClickToCallMessageRequest struct {
+	// The ID which uniquely identifies the request.
+	BulkId *string
+	// Array of click to call messages to be sent.
+	Messages []ClickToCallMessage
+}
+
+type _ClickToCallMessageRequest ClickToCallMessageRequest
+
+// NewClickToCallMessageRequest instantiates a new ClickToCallMessageRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewClickToCallMessageRequest(messages []ClickToCallMessage) *ClickToCallMessageRequest {
+	this := ClickToCallMessageRequest{}
+	this.Messages = messages
+	return &this
+}
+
+// NewClickToCallMessageRequestWithDefaults instantiates a new ClickToCallMessageRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewClickToCallMessageRequestWithDefaults() *ClickToCallMessageRequest {
+	this := ClickToCallMessageRequest{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *ClickToCallMessageRequest) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessageRequest) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *ClickToCallMessageRequest) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *ClickToCallMessageRequest) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessages returns the Messages field value
+func (o *ClickToCallMessageRequest) GetMessages() []ClickToCallMessage {
+	if o == nil {
+		var ret []ClickToCallMessage
+		return ret
+	}
+
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value
+// and a boolean to check if the value has been set.
+func (o *ClickToCallMessageRequest) GetMessagesOk() ([]ClickToCallMessage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// SetMessages sets field value
+func (o *ClickToCallMessageRequest) SetMessages(v []ClickToCallMessage) {
+	o.Messages = v
+}
+
+func (o ClickToCallMessageRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ClickToCallMessageRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	toSerialize["messages"] = o.Messages
+	return toSerialize, nil
+}
+
+type NullableClickToCallMessageRequest struct {
+	value *ClickToCallMessageRequest
+	isSet bool
+}
+
+func (v NullableClickToCallMessageRequest) Get() *ClickToCallMessageRequest {
+	return v.value
+}
+
+func (v *NullableClickToCallMessageRequest) Set(val *ClickToCallMessageRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableClickToCallMessageRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableClickToCallMessageRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableClickToCallMessageRequest(val *ClickToCallMessageRequest) *NullableClickToCallMessageRequest {
+	return &NullableClickToCallMessageRequest{value: val, isSet: true}
+}
+
+func (v NullableClickToCallMessageRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableClickToCallMessageRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/collect.go b/pkg/infobip/models/voice/collect.go
new file mode 100644
index 0000000..7154251
--- /dev/null
+++ b/pkg/infobip/models/voice/collect.go
@@ -0,0 +1,195 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Collect type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Collect{}
+
+// Collect Collect action reads the DTMF input from the user’s phone and saves it into a variable. Saved variable can be used within the IVR in any other action that allows variable usage. (e.g. switch/case)
+type Collect struct {
+	// The name of the variable to set.
+	CollectInto string
+	Options     *CollectOptions
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Collect Collect
+
+// NewCollect instantiates a new Collect object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCollect(collectInto string) *Collect {
+	this := Collect{}
+	this.CollectInto = collectInto
+	return &this
+}
+
+// NewCollectWithDefaults instantiates a new Collect object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCollectWithDefaults() *Collect {
+	this := Collect{}
+
+	return &this
+}
+
+// GetCollectInto returns the CollectInto field value
+func (o *Collect) GetCollectInto() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CollectInto
+}
+
+// GetCollectIntoOk returns a tuple with the CollectInto field value
+// and a boolean to check if the value has been set.
+func (o *Collect) GetCollectIntoOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CollectInto, true
+}
+
+// SetCollectInto sets field value
+func (o *Collect) SetCollectInto(v string) {
+	o.CollectInto = v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *Collect) GetOptions() CollectOptions {
+	if o == nil || IsNil(o.Options) {
+		var ret CollectOptions
+		return ret
+	}
+	return *o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Collect) GetOptionsOk() (*CollectOptions, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *Collect) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given CollectOptions and assigns it to the Options field.
+func (o *Collect) SetOptions(v CollectOptions) {
+	o.Options = &v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Collect) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Collect) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Collect) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Collect) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Collect) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Collect) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["collectInto"] = o.CollectInto
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableCollect struct {
+	value *Collect
+	isSet bool
+}
+
+func (v NullableCollect) Get() *Collect {
+	return v.value
+}
+
+func (v *NullableCollect) Set(val *Collect) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCollect) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCollect) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCollect(val *Collect) *NullableCollect {
+	return &NullableCollect{value: val, isSet: true}
+}
+
+func (v NullableCollect) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCollect) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/collect_options.go b/pkg/infobip/models/voice/collect_options.go
new file mode 100644
index 0000000..473467a
--- /dev/null
+++ b/pkg/infobip/models/voice/collect_options.go
@@ -0,0 +1,239 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CollectOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CollectOptions{}
+
+// CollectOptions struct for CollectOptions
+type CollectOptions struct {
+	// Maximum acceptable number of digits. Stops reading after maxdigits have been entered (without requiring the user to press '#' key). Max accepted value is 255. If set to 0 then max value is applied.
+	MaxInputLength *int32
+	// Timeout in seconds for user to press both first DTMF and all other inter-digit DTMFs. Default value is 5. Max value is 30.
+	Timeout       *int32
+	SendToReports *SendToReports
+	// Map of expected collected DTMF values with some real meaning. (Example: if you have multilingual IVR, and option for users to press 1 to enter \"English\" menu, you can define {\"1\":\"English\"}, so the reporting and analysis will be easier). When this option is defined additional variable is present in the scenario. If you set your collect action variable name to myVar, then you will get additional variable myVar_Meaning containing the mapped value for a collected DTMF.
+	MappedValues map[string]interface{}
+}
+
+// NewCollectOptions instantiates a new CollectOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCollectOptions() *CollectOptions {
+	this := CollectOptions{}
+	return &this
+}
+
+// NewCollectOptionsWithDefaults instantiates a new CollectOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCollectOptionsWithDefaults() *CollectOptions {
+	this := CollectOptions{}
+
+	return &this
+}
+
+// GetMaxInputLength returns the MaxInputLength field value if set, zero value otherwise.
+func (o *CollectOptions) GetMaxInputLength() int32 {
+	if o == nil || IsNil(o.MaxInputLength) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxInputLength
+}
+
+// GetMaxInputLengthOk returns a tuple with the MaxInputLength field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CollectOptions) GetMaxInputLengthOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxInputLength) {
+		return nil, false
+	}
+	return o.MaxInputLength, true
+}
+
+// HasMaxInputLength returns a boolean if a field has been set.
+func (o *CollectOptions) HasMaxInputLength() bool {
+	if o != nil && !IsNil(o.MaxInputLength) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxInputLength gets a reference to the given int32 and assigns it to the MaxInputLength field.
+func (o *CollectOptions) SetMaxInputLength(v int32) {
+	o.MaxInputLength = &v
+}
+
+// GetTimeout returns the Timeout field value if set, zero value otherwise.
+func (o *CollectOptions) GetTimeout() int32 {
+	if o == nil || IsNil(o.Timeout) {
+		var ret int32
+		return ret
+	}
+	return *o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CollectOptions) GetTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.Timeout) {
+		return nil, false
+	}
+	return o.Timeout, true
+}
+
+// HasTimeout returns a boolean if a field has been set.
+func (o *CollectOptions) HasTimeout() bool {
+	if o != nil && !IsNil(o.Timeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetTimeout gets a reference to the given int32 and assigns it to the Timeout field.
+func (o *CollectOptions) SetTimeout(v int32) {
+	o.Timeout = &v
+}
+
+// GetSendToReports returns the SendToReports field value if set, zero value otherwise.
+func (o *CollectOptions) GetSendToReports() SendToReports {
+	if o == nil || IsNil(o.SendToReports) {
+		var ret SendToReports
+		return ret
+	}
+	return *o.SendToReports
+}
+
+// GetSendToReportsOk returns a tuple with the SendToReports field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CollectOptions) GetSendToReportsOk() (*SendToReports, bool) {
+	if o == nil || IsNil(o.SendToReports) {
+		return nil, false
+	}
+	return o.SendToReports, true
+}
+
+// HasSendToReports returns a boolean if a field has been set.
+func (o *CollectOptions) HasSendToReports() bool {
+	if o != nil && !IsNil(o.SendToReports) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendToReports gets a reference to the given SendToReports and assigns it to the SendToReports field.
+func (o *CollectOptions) SetSendToReports(v SendToReports) {
+	o.SendToReports = &v
+}
+
+// GetMappedValues returns the MappedValues field value if set, zero value otherwise.
+func (o *CollectOptions) GetMappedValues() map[string]interface{} {
+	if o == nil || IsNil(o.MappedValues) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.MappedValues
+}
+
+// GetMappedValuesOk returns a tuple with the MappedValues field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CollectOptions) GetMappedValuesOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.MappedValues) {
+		return map[string]interface{}{}, false
+	}
+	return o.MappedValues, true
+}
+
+// HasMappedValues returns a boolean if a field has been set.
+func (o *CollectOptions) HasMappedValues() bool {
+	if o != nil && !IsNil(o.MappedValues) {
+		return true
+	}
+
+	return false
+}
+
+// SetMappedValues gets a reference to the given map[string]interface{} and assigns it to the MappedValues field.
+func (o *CollectOptions) SetMappedValues(v map[string]interface{}) {
+	o.MappedValues = v
+}
+
+func (o CollectOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CollectOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MaxInputLength) {
+		toSerialize["maxInputLength"] = o.MaxInputLength
+	}
+	if !IsNil(o.Timeout) {
+		toSerialize["timeout"] = o.Timeout
+	}
+	if !IsNil(o.SendToReports) {
+		toSerialize["sendToReports"] = o.SendToReports
+	}
+	if !IsNil(o.MappedValues) {
+		toSerialize["mappedValues"] = o.MappedValues
+	}
+	return toSerialize, nil
+}
+
+type NullableCollectOptions struct {
+	value *CollectOptions
+	isSet bool
+}
+
+func (v NullableCollectOptions) Get() *CollectOptions {
+	return v.value
+}
+
+func (v *NullableCollectOptions) Set(val *CollectOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCollectOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCollectOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCollectOptions(val *CollectOptions) *NullableCollectOptions {
+	return &NullableCollectOptions{value: val, isSet: true}
+}
+
+func (v NullableCollectOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCollectOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference.go b/pkg/infobip/models/voice/conference.go
new file mode 100644
index 0000000..88c8dae
--- /dev/null
+++ b/pkg/infobip/models/voice/conference.go
@@ -0,0 +1,276 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Conference type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Conference{}
+
+// Conference struct for Conference
+type Conference struct {
+	// Unique conference ID.
+	Id *string
+	// Conference name, requested or autogenerated on creation.
+	Name *string
+	// The list of conference participants.
+	Participants []Participant
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+}
+
+// NewConference instantiates a new Conference object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConference() *Conference {
+	this := Conference{}
+	return &this
+}
+
+// NewConferenceWithDefaults instantiates a new Conference object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceWithDefaults() *Conference {
+	this := Conference{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *Conference) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Conference) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *Conference) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *Conference) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *Conference) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Conference) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *Conference) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *Conference) SetName(v string) {
+	o.Name = &v
+}
+
+// GetParticipants returns the Participants field value if set, zero value otherwise.
+func (o *Conference) GetParticipants() []Participant {
+	if o == nil || IsNil(o.Participants) {
+		var ret []Participant
+		return ret
+	}
+	return o.Participants
+}
+
+// GetParticipantsOk returns a tuple with the Participants field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Conference) GetParticipantsOk() ([]Participant, bool) {
+	if o == nil || IsNil(o.Participants) {
+		return nil, false
+	}
+	return o.Participants, true
+}
+
+// HasParticipants returns a boolean if a field has been set.
+func (o *Conference) HasParticipants() bool {
+	if o != nil && !IsNil(o.Participants) {
+		return true
+	}
+
+	return false
+}
+
+// SetParticipants gets a reference to the given []Participant and assigns it to the Participants field.
+func (o *Conference) SetParticipants(v []Participant) {
+	o.Participants = v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *Conference) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Conference) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *Conference) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *Conference) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *Conference) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Conference) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *Conference) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *Conference) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+func (o Conference) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Conference) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Participants) {
+		toSerialize["participants"] = o.Participants
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	return toSerialize, nil
+}
+
+type NullableConference struct {
+	value *Conference
+	isSet bool
+}
+
+func (v NullableConference) Get() *Conference {
+	return v.value
+}
+
+func (v *NullableConference) Set(val *Conference) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConference) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConference) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConference(val *Conference) *NullableConference {
+	return &NullableConference{value: val, isSet: true}
+}
+
+func (v NullableConference) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConference) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_and_call.go b/pkg/infobip/models/voice/conference_and_call.go
new file mode 100644
index 0000000..524a54a
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_and_call.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceAndCall type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceAndCall{}
+
+// ConferenceAndCall struct for ConferenceAndCall
+type ConferenceAndCall struct {
+	Conference *Conference
+	Call       *Call
+}
+
+// NewConferenceAndCall instantiates a new ConferenceAndCall object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceAndCall() *ConferenceAndCall {
+	this := ConferenceAndCall{}
+	return &this
+}
+
+// NewConferenceAndCallWithDefaults instantiates a new ConferenceAndCall object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceAndCallWithDefaults() *ConferenceAndCall {
+	this := ConferenceAndCall{}
+
+	return &this
+}
+
+// GetConference returns the Conference field value if set, zero value otherwise.
+func (o *ConferenceAndCall) GetConference() Conference {
+	if o == nil || IsNil(o.Conference) {
+		var ret Conference
+		return ret
+	}
+	return *o.Conference
+}
+
+// GetConferenceOk returns a tuple with the Conference field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceAndCall) GetConferenceOk() (*Conference, bool) {
+	if o == nil || IsNil(o.Conference) {
+		return nil, false
+	}
+	return o.Conference, true
+}
+
+// HasConference returns a boolean if a field has been set.
+func (o *ConferenceAndCall) HasConference() bool {
+	if o != nil && !IsNil(o.Conference) {
+		return true
+	}
+
+	return false
+}
+
+// SetConference gets a reference to the given Conference and assigns it to the Conference field.
+func (o *ConferenceAndCall) SetConference(v Conference) {
+	o.Conference = &v
+}
+
+// GetCall returns the Call field value if set, zero value otherwise.
+func (o *ConferenceAndCall) GetCall() Call {
+	if o == nil || IsNil(o.Call) {
+		var ret Call
+		return ret
+	}
+	return *o.Call
+}
+
+// GetCallOk returns a tuple with the Call field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceAndCall) GetCallOk() (*Call, bool) {
+	if o == nil || IsNil(o.Call) {
+		return nil, false
+	}
+	return o.Call, true
+}
+
+// HasCall returns a boolean if a field has been set.
+func (o *ConferenceAndCall) HasCall() bool {
+	if o != nil && !IsNil(o.Call) {
+		return true
+	}
+
+	return false
+}
+
+// SetCall gets a reference to the given Call and assigns it to the Call field.
+func (o *ConferenceAndCall) SetCall(v Call) {
+	o.Call = &v
+}
+
+func (o ConferenceAndCall) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceAndCall) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Conference) {
+		toSerialize["conference"] = o.Conference
+	}
+	if !IsNil(o.Call) {
+		toSerialize["call"] = o.Call
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceAndCall struct {
+	value *ConferenceAndCall
+	isSet bool
+}
+
+func (v NullableConferenceAndCall) Get() *ConferenceAndCall {
+	return v.value
+}
+
+func (v *NullableConferenceAndCall) Set(val *ConferenceAndCall) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceAndCall) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceAndCall) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceAndCall(val *ConferenceAndCall) *NullableConferenceAndCall {
+	return &NullableConferenceAndCall{value: val, isSet: true}
+}
+
+func (v NullableConferenceAndCall) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceAndCall) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_broadcast_webrtc_text_request.go b/pkg/infobip/models/voice/conference_broadcast_webrtc_text_request.go
new file mode 100644
index 0000000..419cd35
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_broadcast_webrtc_text_request.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceBroadcastWebrtcTextRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceBroadcastWebrtcTextRequest{}
+
+// ConferenceBroadcastWebrtcTextRequest struct for ConferenceBroadcastWebrtcTextRequest
+type ConferenceBroadcastWebrtcTextRequest struct {
+	// Text to broadcast.
+	Text *string
+}
+
+// NewConferenceBroadcastWebrtcTextRequest instantiates a new ConferenceBroadcastWebrtcTextRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceBroadcastWebrtcTextRequest() *ConferenceBroadcastWebrtcTextRequest {
+	this := ConferenceBroadcastWebrtcTextRequest{}
+	return &this
+}
+
+// NewConferenceBroadcastWebrtcTextRequestWithDefaults instantiates a new ConferenceBroadcastWebrtcTextRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceBroadcastWebrtcTextRequestWithDefaults() *ConferenceBroadcastWebrtcTextRequest {
+	this := ConferenceBroadcastWebrtcTextRequest{}
+
+	return &this
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *ConferenceBroadcastWebrtcTextRequest) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceBroadcastWebrtcTextRequest) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *ConferenceBroadcastWebrtcTextRequest) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *ConferenceBroadcastWebrtcTextRequest) SetText(v string) {
+	o.Text = &v
+}
+
+func (o ConferenceBroadcastWebrtcTextRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceBroadcastWebrtcTextRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceBroadcastWebrtcTextRequest struct {
+	value *ConferenceBroadcastWebrtcTextRequest
+	isSet bool
+}
+
+func (v NullableConferenceBroadcastWebrtcTextRequest) Get() *ConferenceBroadcastWebrtcTextRequest {
+	return v.value
+}
+
+func (v *NullableConferenceBroadcastWebrtcTextRequest) Set(val *ConferenceBroadcastWebrtcTextRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceBroadcastWebrtcTextRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceBroadcastWebrtcTextRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceBroadcastWebrtcTextRequest(val *ConferenceBroadcastWebrtcTextRequest) *NullableConferenceBroadcastWebrtcTextRequest {
+	return &NullableConferenceBroadcastWebrtcTextRequest{value: val, isSet: true}
+}
+
+func (v NullableConferenceBroadcastWebrtcTextRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceBroadcastWebrtcTextRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_composition.go b/pkg/infobip/models/voice/conference_composition.go
new file mode 100644
index 0000000..efe5ed0
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_composition.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceComposition type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceComposition{}
+
+// ConferenceComposition struct for ConferenceComposition
+type ConferenceComposition struct {
+	// Indicates whether to create a single recording of all participants. If set to `True`, all participants are merged into a single audio or video file. Otherwise, all participants will have their own individual audio or video file.
+	Enabled *bool
+}
+
+// NewConferenceComposition instantiates a new ConferenceComposition object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceComposition() *ConferenceComposition {
+	this := ConferenceComposition{}
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// NewConferenceCompositionWithDefaults instantiates a new ConferenceComposition object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceCompositionWithDefaults() *ConferenceComposition {
+	this := ConferenceComposition{}
+
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// GetEnabled returns the Enabled field value if set, zero value otherwise.
+func (o *ConferenceComposition) GetEnabled() bool {
+	if o == nil || IsNil(o.Enabled) {
+		var ret bool
+		return ret
+	}
+	return *o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceComposition) GetEnabledOk() (*bool, bool) {
+	if o == nil || IsNil(o.Enabled) {
+		return nil, false
+	}
+	return o.Enabled, true
+}
+
+// HasEnabled returns a boolean if a field has been set.
+func (o *ConferenceComposition) HasEnabled() bool {
+	if o != nil && !IsNil(o.Enabled) {
+		return true
+	}
+
+	return false
+}
+
+// SetEnabled gets a reference to the given bool and assigns it to the Enabled field.
+func (o *ConferenceComposition) SetEnabled(v bool) {
+	o.Enabled = &v
+}
+
+func (o ConferenceComposition) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceComposition) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Enabled) {
+		toSerialize["enabled"] = o.Enabled
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceComposition struct {
+	value *ConferenceComposition
+	isSet bool
+}
+
+func (v NullableConferenceComposition) Get() *ConferenceComposition {
+	return v.value
+}
+
+func (v *NullableConferenceComposition) Set(val *ConferenceComposition) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceComposition) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceComposition) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceComposition(val *ConferenceComposition) *NullableConferenceComposition {
+	return &NullableConferenceComposition{value: val, isSet: true}
+}
+
+func (v NullableConferenceComposition) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceComposition) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_log_page.go b/pkg/infobip/models/voice/conference_log_page.go
new file mode 100644
index 0000000..972a93b
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_log_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceLogPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceLogPage{}
+
+// ConferenceLogPage struct for ConferenceLogPage
+type ConferenceLogPage struct {
+	// The list of the results for this page.
+	Results []ConferenceLogResponse
+	Paging  *PageInfo
+}
+
+// NewConferenceLogPage instantiates a new ConferenceLogPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceLogPage() *ConferenceLogPage {
+	this := ConferenceLogPage{}
+	return &this
+}
+
+// NewConferenceLogPageWithDefaults instantiates a new ConferenceLogPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceLogPageWithDefaults() *ConferenceLogPage {
+	this := ConferenceLogPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *ConferenceLogPage) GetResults() []ConferenceLogResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []ConferenceLogResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogPage) GetResultsOk() ([]ConferenceLogResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *ConferenceLogPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []ConferenceLogResponse and assigns it to the Results field.
+func (o *ConferenceLogPage) SetResults(v []ConferenceLogResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *ConferenceLogPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *ConferenceLogPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *ConferenceLogPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o ConferenceLogPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceLogPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceLogPage struct {
+	value *ConferenceLogPage
+	isSet bool
+}
+
+func (v NullableConferenceLogPage) Get() *ConferenceLogPage {
+	return v.value
+}
+
+func (v *NullableConferenceLogPage) Set(val *ConferenceLogPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceLogPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceLogPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceLogPage(val *ConferenceLogPage) *NullableConferenceLogPage {
+	return &NullableConferenceLogPage{value: val, isSet: true}
+}
+
+func (v NullableConferenceLogPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceLogPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_log_response.go b/pkg/infobip/models/voice/conference_log_response.go
new file mode 100644
index 0000000..18714ba
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_log_response.go
@@ -0,0 +1,422 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceLogResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceLogResponse{}
+
+// ConferenceLogResponse struct for ConferenceLogResponse
+type ConferenceLogResponse struct {
+	// Unique conference ID.
+	ConferenceId *string
+	// Conference name, requested or autogenerated on creation.
+	Name     *string
+	Platform *Platform
+	// Date and time for when the conference has been created.
+	StartTime *Time
+	// Date and time for when the conference ended.
+	EndTime *Time
+	// Conference duration in seconds.
+	Duration *int64
+	// List of participant sessions.
+	Sessions  []ParticipantSession
+	Recording *ConferenceRecordingLog
+	ErrorCode *ErrorCodeInfo
+}
+
+// NewConferenceLogResponse instantiates a new ConferenceLogResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceLogResponse() *ConferenceLogResponse {
+	this := ConferenceLogResponse{}
+	return &this
+}
+
+// NewConferenceLogResponseWithDefaults instantiates a new ConferenceLogResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceLogResponseWithDefaults() *ConferenceLogResponse {
+	this := ConferenceLogResponse{}
+
+	return &this
+}
+
+// GetConferenceId returns the ConferenceId field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetConferenceId() string {
+	if o == nil || IsNil(o.ConferenceId) {
+		var ret string
+		return ret
+	}
+	return *o.ConferenceId
+}
+
+// GetConferenceIdOk returns a tuple with the ConferenceId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetConferenceIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ConferenceId) {
+		return nil, false
+	}
+	return o.ConferenceId, true
+}
+
+// HasConferenceId returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasConferenceId() bool {
+	if o != nil && !IsNil(o.ConferenceId) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceId gets a reference to the given string and assigns it to the ConferenceId field.
+func (o *ConferenceLogResponse) SetConferenceId(v string) {
+	o.ConferenceId = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *ConferenceLogResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *ConferenceLogResponse) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *ConferenceLogResponse) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *ConferenceLogResponse) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetDuration() int64 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int64
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetDurationOk() (*int64, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int64 and assigns it to the Duration field.
+func (o *ConferenceLogResponse) SetDuration(v int64) {
+	o.Duration = &v
+}
+
+// GetSessions returns the Sessions field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetSessions() []ParticipantSession {
+	if o == nil || IsNil(o.Sessions) {
+		var ret []ParticipantSession
+		return ret
+	}
+	return o.Sessions
+}
+
+// GetSessionsOk returns a tuple with the Sessions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetSessionsOk() ([]ParticipantSession, bool) {
+	if o == nil || IsNil(o.Sessions) {
+		return nil, false
+	}
+	return o.Sessions, true
+}
+
+// HasSessions returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasSessions() bool {
+	if o != nil && !IsNil(o.Sessions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSessions gets a reference to the given []ParticipantSession and assigns it to the Sessions field.
+func (o *ConferenceLogResponse) SetSessions(v []ParticipantSession) {
+	o.Sessions = v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetRecording() ConferenceRecordingLog {
+	if o == nil || IsNil(o.Recording) {
+		var ret ConferenceRecordingLog
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetRecordingOk() (*ConferenceRecordingLog, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given ConferenceRecordingLog and assigns it to the Recording field.
+func (o *ConferenceLogResponse) SetRecording(v ConferenceRecordingLog) {
+	o.Recording = &v
+}
+
+// GetErrorCode returns the ErrorCode field value if set, zero value otherwise.
+func (o *ConferenceLogResponse) GetErrorCode() ErrorCodeInfo {
+	if o == nil || IsNil(o.ErrorCode) {
+		var ret ErrorCodeInfo
+		return ret
+	}
+	return *o.ErrorCode
+}
+
+// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceLogResponse) GetErrorCodeOk() (*ErrorCodeInfo, bool) {
+	if o == nil || IsNil(o.ErrorCode) {
+		return nil, false
+	}
+	return o.ErrorCode, true
+}
+
+// HasErrorCode returns a boolean if a field has been set.
+func (o *ConferenceLogResponse) HasErrorCode() bool {
+	if o != nil && !IsNil(o.ErrorCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorCode gets a reference to the given ErrorCodeInfo and assigns it to the ErrorCode field.
+func (o *ConferenceLogResponse) SetErrorCode(v ErrorCodeInfo) {
+	o.ErrorCode = &v
+}
+
+func (o ConferenceLogResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceLogResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ConferenceId) {
+		toSerialize["conferenceId"] = o.ConferenceId
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.Sessions) {
+		toSerialize["sessions"] = o.Sessions
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.ErrorCode) {
+		toSerialize["errorCode"] = o.ErrorCode
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceLogResponse struct {
+	value *ConferenceLogResponse
+	isSet bool
+}
+
+func (v NullableConferenceLogResponse) Get() *ConferenceLogResponse {
+	return v.value
+}
+
+func (v *NullableConferenceLogResponse) Set(val *ConferenceLogResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceLogResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceLogResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceLogResponse(val *ConferenceLogResponse) *NullableConferenceLogResponse {
+	return &NullableConferenceLogResponse{value: val, isSet: true}
+}
+
+func (v NullableConferenceLogResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceLogResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_page.go b/pkg/infobip/models/voice/conference_page.go
new file mode 100644
index 0000000..b402001
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferencePage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferencePage{}
+
+// ConferencePage struct for ConferencePage
+type ConferencePage struct {
+	// The list of the results for this page.
+	Results []Conference
+	Paging  *PageInfo
+}
+
+// NewConferencePage instantiates a new ConferencePage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferencePage() *ConferencePage {
+	this := ConferencePage{}
+	return &this
+}
+
+// NewConferencePageWithDefaults instantiates a new ConferencePage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferencePageWithDefaults() *ConferencePage {
+	this := ConferencePage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *ConferencePage) GetResults() []Conference {
+	if o == nil || IsNil(o.Results) {
+		var ret []Conference
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferencePage) GetResultsOk() ([]Conference, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *ConferencePage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []Conference and assigns it to the Results field.
+func (o *ConferencePage) SetResults(v []Conference) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *ConferencePage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferencePage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *ConferencePage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *ConferencePage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o ConferencePage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferencePage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableConferencePage struct {
+	value *ConferencePage
+	isSet bool
+}
+
+func (v NullableConferencePage) Get() *ConferencePage {
+	return v.value
+}
+
+func (v *NullableConferencePage) Set(val *ConferencePage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferencePage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferencePage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferencePage(val *ConferencePage) *NullableConferencePage {
+	return &NullableConferencePage{value: val, isSet: true}
+}
+
+func (v NullableConferencePage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferencePage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_play_request.go b/pkg/infobip/models/voice/conference_play_request.go
new file mode 100644
index 0000000..97264d5
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_play_request.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferencePlayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferencePlayRequest{}
+
+// ConferencePlayRequest struct for ConferencePlayRequest
+type ConferencePlayRequest struct {
+	// Number of times the file will be played.
+	LoopCount *int32
+	Content   PlayContent
+}
+
+type _ConferencePlayRequest ConferencePlayRequest
+
+// NewConferencePlayRequest instantiates a new ConferencePlayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferencePlayRequest(content PlayContent) *ConferencePlayRequest {
+	this := ConferencePlayRequest{}
+	this.Content = content
+	return &this
+}
+
+// NewConferencePlayRequestWithDefaults instantiates a new ConferencePlayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferencePlayRequestWithDefaults() *ConferencePlayRequest {
+	this := ConferencePlayRequest{}
+
+	return &this
+}
+
+// GetLoopCount returns the LoopCount field value if set, zero value otherwise.
+func (o *ConferencePlayRequest) GetLoopCount() int32 {
+	if o == nil || IsNil(o.LoopCount) {
+		var ret int32
+		return ret
+	}
+	return *o.LoopCount
+}
+
+// GetLoopCountOk returns a tuple with the LoopCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferencePlayRequest) GetLoopCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.LoopCount) {
+		return nil, false
+	}
+	return o.LoopCount, true
+}
+
+// HasLoopCount returns a boolean if a field has been set.
+func (o *ConferencePlayRequest) HasLoopCount() bool {
+	if o != nil && !IsNil(o.LoopCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetLoopCount gets a reference to the given int32 and assigns it to the LoopCount field.
+func (o *ConferencePlayRequest) SetLoopCount(v int32) {
+	o.LoopCount = &v
+}
+
+// GetContent returns the Content field value
+func (o *ConferencePlayRequest) GetContent() PlayContent {
+	if o == nil {
+		var ret PlayContent
+		return ret
+	}
+
+	return o.Content
+}
+
+// GetContentOk returns a tuple with the Content field value
+// and a boolean to check if the value has been set.
+func (o *ConferencePlayRequest) GetContentOk() (*PlayContent, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Content, true
+}
+
+// SetContent sets field value
+func (o *ConferencePlayRequest) SetContent(v PlayContent) {
+	o.Content = v
+}
+
+func (o ConferencePlayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferencePlayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.LoopCount) {
+		toSerialize["loopCount"] = o.LoopCount
+	}
+	toSerialize["content"] = o.Content
+	return toSerialize, nil
+}
+
+type NullableConferencePlayRequest struct {
+	value *ConferencePlayRequest
+	isSet bool
+}
+
+func (v NullableConferencePlayRequest) Get() *ConferencePlayRequest {
+	return v.value
+}
+
+func (v *NullableConferencePlayRequest) Set(val *ConferencePlayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferencePlayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferencePlayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferencePlayRequest(val *ConferencePlayRequest) *NullableConferencePlayRequest {
+	return &NullableConferencePlayRequest{value: val, isSet: true}
+}
+
+func (v NullableConferencePlayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferencePlayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_recording.go b/pkg/infobip/models/voice/conference_recording.go
new file mode 100644
index 0000000..134bac7
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_recording.go
@@ -0,0 +1,387 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceRecording type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceRecording{}
+
+// ConferenceRecording struct for ConferenceRecording
+type ConferenceRecording struct {
+	// Conference ID.
+	ConferenceId *string
+	// Conference name.
+	ConferenceName *string
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	// File(s) with a recording of all conference participants.
+	ComposedFiles []RecordingFile
+	// File(s) with a recording of one conference participant.
+	CallRecordings []Recording
+	// Date and time when the (first) recording started.
+	StartTime *Time
+	// Date and time when the (last) recording ended.
+	EndTime *Time
+}
+
+// NewConferenceRecording instantiates a new ConferenceRecording object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceRecording() *ConferenceRecording {
+	this := ConferenceRecording{}
+	return &this
+}
+
+// NewConferenceRecordingWithDefaults instantiates a new ConferenceRecording object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceRecordingWithDefaults() *ConferenceRecording {
+	this := ConferenceRecording{}
+
+	return &this
+}
+
+// GetConferenceId returns the ConferenceId field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetConferenceId() string {
+	if o == nil || IsNil(o.ConferenceId) {
+		var ret string
+		return ret
+	}
+	return *o.ConferenceId
+}
+
+// GetConferenceIdOk returns a tuple with the ConferenceId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetConferenceIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ConferenceId) {
+		return nil, false
+	}
+	return o.ConferenceId, true
+}
+
+// HasConferenceId returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasConferenceId() bool {
+	if o != nil && !IsNil(o.ConferenceId) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceId gets a reference to the given string and assigns it to the ConferenceId field.
+func (o *ConferenceRecording) SetConferenceId(v string) {
+	o.ConferenceId = &v
+}
+
+// GetConferenceName returns the ConferenceName field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetConferenceName() string {
+	if o == nil || IsNil(o.ConferenceName) {
+		var ret string
+		return ret
+	}
+	return *o.ConferenceName
+}
+
+// GetConferenceNameOk returns a tuple with the ConferenceName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetConferenceNameOk() (*string, bool) {
+	if o == nil || IsNil(o.ConferenceName) {
+		return nil, false
+	}
+	return o.ConferenceName, true
+}
+
+// HasConferenceName returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasConferenceName() bool {
+	if o != nil && !IsNil(o.ConferenceName) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceName gets a reference to the given string and assigns it to the ConferenceName field.
+func (o *ConferenceRecording) SetConferenceName(v string) {
+	o.ConferenceName = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *ConferenceRecording) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *ConferenceRecording) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetComposedFiles returns the ComposedFiles field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetComposedFiles() []RecordingFile {
+	if o == nil || IsNil(o.ComposedFiles) {
+		var ret []RecordingFile
+		return ret
+	}
+	return o.ComposedFiles
+}
+
+// GetComposedFilesOk returns a tuple with the ComposedFiles field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetComposedFilesOk() ([]RecordingFile, bool) {
+	if o == nil || IsNil(o.ComposedFiles) {
+		return nil, false
+	}
+	return o.ComposedFiles, true
+}
+
+// HasComposedFiles returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasComposedFiles() bool {
+	if o != nil && !IsNil(o.ComposedFiles) {
+		return true
+	}
+
+	return false
+}
+
+// SetComposedFiles gets a reference to the given []RecordingFile and assigns it to the ComposedFiles field.
+func (o *ConferenceRecording) SetComposedFiles(v []RecordingFile) {
+	o.ComposedFiles = v
+}
+
+// GetCallRecordings returns the CallRecordings field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetCallRecordings() []Recording {
+	if o == nil || IsNil(o.CallRecordings) {
+		var ret []Recording
+		return ret
+	}
+	return o.CallRecordings
+}
+
+// GetCallRecordingsOk returns a tuple with the CallRecordings field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetCallRecordingsOk() ([]Recording, bool) {
+	if o == nil || IsNil(o.CallRecordings) {
+		return nil, false
+	}
+	return o.CallRecordings, true
+}
+
+// HasCallRecordings returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasCallRecordings() bool {
+	if o != nil && !IsNil(o.CallRecordings) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallRecordings gets a reference to the given []Recording and assigns it to the CallRecordings field.
+func (o *ConferenceRecording) SetCallRecordings(v []Recording) {
+	o.CallRecordings = v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *ConferenceRecording) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *ConferenceRecording) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecording) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *ConferenceRecording) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *ConferenceRecording) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+func (o ConferenceRecording) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceRecording) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ConferenceId) {
+		toSerialize["conferenceId"] = o.ConferenceId
+	}
+	if !IsNil(o.ConferenceName) {
+		toSerialize["conferenceName"] = o.ConferenceName
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.ComposedFiles) {
+		toSerialize["composedFiles"] = o.ComposedFiles
+	}
+	if !IsNil(o.CallRecordings) {
+		toSerialize["callRecordings"] = o.CallRecordings
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceRecording struct {
+	value *ConferenceRecording
+	isSet bool
+}
+
+func (v NullableConferenceRecording) Get() *ConferenceRecording {
+	return v.value
+}
+
+func (v *NullableConferenceRecording) Set(val *ConferenceRecording) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceRecording) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceRecording) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceRecording(val *ConferenceRecording) *NullableConferenceRecording {
+	return &NullableConferenceRecording{value: val, isSet: true}
+}
+
+func (v NullableConferenceRecording) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceRecording) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_recording_log.go b/pkg/infobip/models/voice/conference_recording_log.go
new file mode 100644
index 0000000..fd2d358
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_recording_log.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceRecordingLog type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceRecordingLog{}
+
+// ConferenceRecordingLog Conference recordings.
+type ConferenceRecordingLog struct {
+	// File(s) with a recording of all conference participants.
+	ComposedFiles []RecordingFile
+	// File(s) with a recording of one conference participant.
+	CallRecordings []Recording
+}
+
+// NewConferenceRecordingLog instantiates a new ConferenceRecordingLog object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceRecordingLog() *ConferenceRecordingLog {
+	this := ConferenceRecordingLog{}
+	return &this
+}
+
+// NewConferenceRecordingLogWithDefaults instantiates a new ConferenceRecordingLog object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceRecordingLogWithDefaults() *ConferenceRecordingLog {
+	this := ConferenceRecordingLog{}
+
+	return &this
+}
+
+// GetComposedFiles returns the ComposedFiles field value if set, zero value otherwise.
+func (o *ConferenceRecordingLog) GetComposedFiles() []RecordingFile {
+	if o == nil || IsNil(o.ComposedFiles) {
+		var ret []RecordingFile
+		return ret
+	}
+	return o.ComposedFiles
+}
+
+// GetComposedFilesOk returns a tuple with the ComposedFiles field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingLog) GetComposedFilesOk() ([]RecordingFile, bool) {
+	if o == nil || IsNil(o.ComposedFiles) {
+		return nil, false
+	}
+	return o.ComposedFiles, true
+}
+
+// HasComposedFiles returns a boolean if a field has been set.
+func (o *ConferenceRecordingLog) HasComposedFiles() bool {
+	if o != nil && !IsNil(o.ComposedFiles) {
+		return true
+	}
+
+	return false
+}
+
+// SetComposedFiles gets a reference to the given []RecordingFile and assigns it to the ComposedFiles field.
+func (o *ConferenceRecordingLog) SetComposedFiles(v []RecordingFile) {
+	o.ComposedFiles = v
+}
+
+// GetCallRecordings returns the CallRecordings field value if set, zero value otherwise.
+func (o *ConferenceRecordingLog) GetCallRecordings() []Recording {
+	if o == nil || IsNil(o.CallRecordings) {
+		var ret []Recording
+		return ret
+	}
+	return o.CallRecordings
+}
+
+// GetCallRecordingsOk returns a tuple with the CallRecordings field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingLog) GetCallRecordingsOk() ([]Recording, bool) {
+	if o == nil || IsNil(o.CallRecordings) {
+		return nil, false
+	}
+	return o.CallRecordings, true
+}
+
+// HasCallRecordings returns a boolean if a field has been set.
+func (o *ConferenceRecordingLog) HasCallRecordings() bool {
+	if o != nil && !IsNil(o.CallRecordings) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallRecordings gets a reference to the given []Recording and assigns it to the CallRecordings field.
+func (o *ConferenceRecordingLog) SetCallRecordings(v []Recording) {
+	o.CallRecordings = v
+}
+
+func (o ConferenceRecordingLog) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceRecordingLog) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ComposedFiles) {
+		toSerialize["composedFiles"] = o.ComposedFiles
+	}
+	if !IsNil(o.CallRecordings) {
+		toSerialize["callRecordings"] = o.CallRecordings
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceRecordingLog struct {
+	value *ConferenceRecordingLog
+	isSet bool
+}
+
+func (v NullableConferenceRecordingLog) Get() *ConferenceRecordingLog {
+	return v.value
+}
+
+func (v *NullableConferenceRecordingLog) Set(val *ConferenceRecordingLog) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceRecordingLog) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceRecordingLog) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceRecordingLog(val *ConferenceRecordingLog) *NullableConferenceRecordingLog {
+	return &NullableConferenceRecordingLog{value: val, isSet: true}
+}
+
+func (v NullableConferenceRecordingLog) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceRecordingLog) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_recording_page.go b/pkg/infobip/models/voice/conference_recording_page.go
new file mode 100644
index 0000000..c8c4da7
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_recording_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceRecordingPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceRecordingPage{}
+
+// ConferenceRecordingPage struct for ConferenceRecordingPage
+type ConferenceRecordingPage struct {
+	// The list of the results for this page.
+	Results []ConferenceRecording
+	Paging  *PageInfo
+}
+
+// NewConferenceRecordingPage instantiates a new ConferenceRecordingPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceRecordingPage() *ConferenceRecordingPage {
+	this := ConferenceRecordingPage{}
+	return &this
+}
+
+// NewConferenceRecordingPageWithDefaults instantiates a new ConferenceRecordingPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceRecordingPageWithDefaults() *ConferenceRecordingPage {
+	this := ConferenceRecordingPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *ConferenceRecordingPage) GetResults() []ConferenceRecording {
+	if o == nil || IsNil(o.Results) {
+		var ret []ConferenceRecording
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingPage) GetResultsOk() ([]ConferenceRecording, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *ConferenceRecordingPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []ConferenceRecording and assigns it to the Results field.
+func (o *ConferenceRecordingPage) SetResults(v []ConferenceRecording) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *ConferenceRecordingPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *ConferenceRecordingPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *ConferenceRecordingPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o ConferenceRecordingPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceRecordingPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceRecordingPage struct {
+	value *ConferenceRecordingPage
+	isSet bool
+}
+
+func (v NullableConferenceRecordingPage) Get() *ConferenceRecordingPage {
+	return v.value
+}
+
+func (v *NullableConferenceRecordingPage) Set(val *ConferenceRecordingPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceRecordingPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceRecordingPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceRecordingPage(val *ConferenceRecordingPage) *NullableConferenceRecordingPage {
+	return &NullableConferenceRecordingPage{value: val, isSet: true}
+}
+
+func (v NullableConferenceRecordingPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceRecordingPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_recording_request.go b/pkg/infobip/models/voice/conference_recording_request.go
new file mode 100644
index 0000000..063cf2b
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_recording_request.go
@@ -0,0 +1,231 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceRecordingRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceRecordingRequest{}
+
+// ConferenceRecordingRequest struct for ConferenceRecordingRequest
+type ConferenceRecordingRequest struct {
+	RecordingType         RecordingType
+	ConferenceComposition *ConferenceComposition
+	// Custom data.
+	CustomData *map[string]string
+	// Custom name for the recording's zip file. Applicable only when SFTP server is enabled on [Voice settings page](https://portal.infobip.com/apps/voice/recording/settings). Using the same `filePrefix` will override the files on the SFTP server. For recording without composition, `callId` and `fileId` will be appended to the `filePrefix` value.
+	FilePrefix *string
+}
+
+type _ConferenceRecordingRequest ConferenceRecordingRequest
+
+// NewConferenceRecordingRequest instantiates a new ConferenceRecordingRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceRecordingRequest(recordingType RecordingType) *ConferenceRecordingRequest {
+	this := ConferenceRecordingRequest{}
+	this.RecordingType = recordingType
+	return &this
+}
+
+// NewConferenceRecordingRequestWithDefaults instantiates a new ConferenceRecordingRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceRecordingRequestWithDefaults() *ConferenceRecordingRequest {
+	this := ConferenceRecordingRequest{}
+
+	return &this
+}
+
+// GetRecordingType returns the RecordingType field value
+func (o *ConferenceRecordingRequest) GetRecordingType() RecordingType {
+	if o == nil {
+		var ret RecordingType
+		return ret
+	}
+
+	return o.RecordingType
+}
+
+// GetRecordingTypeOk returns a tuple with the RecordingType field value
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingRequest) GetRecordingTypeOk() (*RecordingType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.RecordingType, true
+}
+
+// SetRecordingType sets field value
+func (o *ConferenceRecordingRequest) SetRecordingType(v RecordingType) {
+	o.RecordingType = v
+}
+
+// GetConferenceComposition returns the ConferenceComposition field value if set, zero value otherwise.
+func (o *ConferenceRecordingRequest) GetConferenceComposition() ConferenceComposition {
+	if o == nil || IsNil(o.ConferenceComposition) {
+		var ret ConferenceComposition
+		return ret
+	}
+	return *o.ConferenceComposition
+}
+
+// GetConferenceCompositionOk returns a tuple with the ConferenceComposition field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingRequest) GetConferenceCompositionOk() (*ConferenceComposition, bool) {
+	if o == nil || IsNil(o.ConferenceComposition) {
+		return nil, false
+	}
+	return o.ConferenceComposition, true
+}
+
+// HasConferenceComposition returns a boolean if a field has been set.
+func (o *ConferenceRecordingRequest) HasConferenceComposition() bool {
+	if o != nil && !IsNil(o.ConferenceComposition) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceComposition gets a reference to the given ConferenceComposition and assigns it to the ConferenceComposition field.
+func (o *ConferenceRecordingRequest) SetConferenceComposition(v ConferenceComposition) {
+	o.ConferenceComposition = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *ConferenceRecordingRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *ConferenceRecordingRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *ConferenceRecordingRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetFilePrefix returns the FilePrefix field value if set, zero value otherwise.
+func (o *ConferenceRecordingRequest) GetFilePrefix() string {
+	if o == nil || IsNil(o.FilePrefix) {
+		var ret string
+		return ret
+	}
+	return *o.FilePrefix
+}
+
+// GetFilePrefixOk returns a tuple with the FilePrefix field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRecordingRequest) GetFilePrefixOk() (*string, bool) {
+	if o == nil || IsNil(o.FilePrefix) {
+		return nil, false
+	}
+	return o.FilePrefix, true
+}
+
+// HasFilePrefix returns a boolean if a field has been set.
+func (o *ConferenceRecordingRequest) HasFilePrefix() bool {
+	if o != nil && !IsNil(o.FilePrefix) {
+		return true
+	}
+
+	return false
+}
+
+// SetFilePrefix gets a reference to the given string and assigns it to the FilePrefix field.
+func (o *ConferenceRecordingRequest) SetFilePrefix(v string) {
+	o.FilePrefix = &v
+}
+
+func (o ConferenceRecordingRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceRecordingRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["recordingType"] = o.RecordingType
+	if !IsNil(o.ConferenceComposition) {
+		toSerialize["conferenceComposition"] = o.ConferenceComposition
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.FilePrefix) {
+		toSerialize["filePrefix"] = o.FilePrefix
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceRecordingRequest struct {
+	value *ConferenceRecordingRequest
+	isSet bool
+}
+
+func (v NullableConferenceRecordingRequest) Get() *ConferenceRecordingRequest {
+	return v.value
+}
+
+func (v *NullableConferenceRecordingRequest) Set(val *ConferenceRecordingRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceRecordingRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceRecordingRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceRecordingRequest(val *ConferenceRecordingRequest) *NullableConferenceRecordingRequest {
+	return &NullableConferenceRecordingRequest{value: val, isSet: true}
+}
+
+func (v NullableConferenceRecordingRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceRecordingRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/conference_request.go b/pkg/infobip/models/voice/conference_request.go
new file mode 100644
index 0000000..b072084
--- /dev/null
+++ b/pkg/infobip/models/voice/conference_request.go
@@ -0,0 +1,272 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConferenceRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConferenceRequest{}
+
+// ConferenceRequest struct for ConferenceRequest
+type ConferenceRequest struct {
+	// Conference name, will be auto-generated if not provided.
+	Name      *string
+	Recording *ConferenceRecordingRequest
+	// Max duration in seconds.
+	MaxDuration *int32
+	// Calls Configuration ID.
+	CallsConfigurationId string
+	Platform             *Platform
+}
+
+type _ConferenceRequest ConferenceRequest
+
+// NewConferenceRequest instantiates a new ConferenceRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConferenceRequest(callsConfigurationId string) *ConferenceRequest {
+	this := ConferenceRequest{}
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	this.CallsConfigurationId = callsConfigurationId
+	return &this
+}
+
+// NewConferenceRequestWithDefaults instantiates a new ConferenceRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConferenceRequestWithDefaults() *ConferenceRequest {
+	this := ConferenceRequest{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *ConferenceRequest) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRequest) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *ConferenceRequest) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *ConferenceRequest) SetName(v string) {
+	o.Name = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *ConferenceRequest) GetRecording() ConferenceRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret ConferenceRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRequest) GetRecordingOk() (*ConferenceRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *ConferenceRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given ConferenceRecordingRequest and assigns it to the Recording field.
+func (o *ConferenceRequest) SetRecording(v ConferenceRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *ConferenceRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *ConferenceRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *ConferenceRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value
+func (o *ConferenceRequest) GetCallsConfigurationId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value
+// and a boolean to check if the value has been set.
+func (o *ConferenceRequest) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CallsConfigurationId, true
+}
+
+// SetCallsConfigurationId sets field value
+func (o *ConferenceRequest) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *ConferenceRequest) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConferenceRequest) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *ConferenceRequest) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *ConferenceRequest) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+func (o ConferenceRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConferenceRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	return toSerialize, nil
+}
+
+type NullableConferenceRequest struct {
+	value *ConferenceRequest
+	isSet bool
+}
+
+func (v NullableConferenceRequest) Get() *ConferenceRequest {
+	return v.value
+}
+
+func (v *NullableConferenceRequest) Set(val *ConferenceRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConferenceRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConferenceRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConferenceRequest(val *ConferenceRequest) *NullableConferenceRequest {
+	return &NullableConferenceRequest{value: val, isSet: true}
+}
+
+func (v NullableConferenceRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConferenceRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/connect_request.go b/pkg/infobip/models/voice/connect_request.go
new file mode 100644
index 0000000..d4c60ce
--- /dev/null
+++ b/pkg/infobip/models/voice/connect_request.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConnectRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConnectRequest{}
+
+// ConnectRequest struct for ConnectRequest
+type ConnectRequest struct {
+	// IDs of the calls to connect.
+	CallIds           []string
+	ConferenceRequest *ActionConferenceRequest
+}
+
+type _ConnectRequest ConnectRequest
+
+// NewConnectRequest instantiates a new ConnectRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConnectRequest(callIds []string) *ConnectRequest {
+	this := ConnectRequest{}
+	this.CallIds = callIds
+	return &this
+}
+
+// NewConnectRequestWithDefaults instantiates a new ConnectRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConnectRequestWithDefaults() *ConnectRequest {
+	this := ConnectRequest{}
+
+	return &this
+}
+
+// GetCallIds returns the CallIds field value
+func (o *ConnectRequest) GetCallIds() []string {
+	if o == nil {
+		var ret []string
+		return ret
+	}
+
+	return o.CallIds
+}
+
+// GetCallIdsOk returns a tuple with the CallIds field value
+// and a boolean to check if the value has been set.
+func (o *ConnectRequest) GetCallIdsOk() ([]string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.CallIds, true
+}
+
+// SetCallIds sets field value
+func (o *ConnectRequest) SetCallIds(v []string) {
+	o.CallIds = v
+}
+
+// GetConferenceRequest returns the ConferenceRequest field value if set, zero value otherwise.
+func (o *ConnectRequest) GetConferenceRequest() ActionConferenceRequest {
+	if o == nil || IsNil(o.ConferenceRequest) {
+		var ret ActionConferenceRequest
+		return ret
+	}
+	return *o.ConferenceRequest
+}
+
+// GetConferenceRequestOk returns a tuple with the ConferenceRequest field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConnectRequest) GetConferenceRequestOk() (*ActionConferenceRequest, bool) {
+	if o == nil || IsNil(o.ConferenceRequest) {
+		return nil, false
+	}
+	return o.ConferenceRequest, true
+}
+
+// HasConferenceRequest returns a boolean if a field has been set.
+func (o *ConnectRequest) HasConferenceRequest() bool {
+	if o != nil && !IsNil(o.ConferenceRequest) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceRequest gets a reference to the given ActionConferenceRequest and assigns it to the ConferenceRequest field.
+func (o *ConnectRequest) SetConferenceRequest(v ActionConferenceRequest) {
+	o.ConferenceRequest = &v
+}
+
+func (o ConnectRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConnectRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["callIds"] = o.CallIds
+	if !IsNil(o.ConferenceRequest) {
+		toSerialize["conferenceRequest"] = o.ConferenceRequest
+	}
+	return toSerialize, nil
+}
+
+type NullableConnectRequest struct {
+	value *ConnectRequest
+	isSet bool
+}
+
+func (v NullableConnectRequest) Get() *ConnectRequest {
+	return v.value
+}
+
+func (v *NullableConnectRequest) Set(val *ConnectRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConnectRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConnectRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConnectRequest(val *ConnectRequest) *NullableConnectRequest {
+	return &NullableConnectRequest{value: val, isSet: true}
+}
+
+func (v NullableConnectRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConnectRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/connect_with_new_call_request.go b/pkg/infobip/models/voice/connect_with_new_call_request.go
new file mode 100644
index 0000000..5ef745b
--- /dev/null
+++ b/pkg/infobip/models/voice/connect_with_new_call_request.go
@@ -0,0 +1,241 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ConnectWithNewCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ConnectWithNewCallRequest{}
+
+// ConnectWithNewCallRequest struct for ConnectWithNewCallRequest
+type ConnectWithNewCallRequest struct {
+	CallRequest *ActionCallRequest
+	// Indicates whether to connect calls on early media. Otherwise, the calls are connected after being established. Cannot be `true` when `ringbackGeneration` is enabled.
+	ConnectOnEarlyMedia *bool
+	RingbackGeneration  *RingbackGeneration
+	ConferenceRequest   *ActionConferenceRequest
+}
+
+// NewConnectWithNewCallRequest instantiates a new ConnectWithNewCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewConnectWithNewCallRequest() *ConnectWithNewCallRequest {
+	this := ConnectWithNewCallRequest{}
+	var connectOnEarlyMedia bool = false
+	this.ConnectOnEarlyMedia = &connectOnEarlyMedia
+	return &this
+}
+
+// NewConnectWithNewCallRequestWithDefaults instantiates a new ConnectWithNewCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewConnectWithNewCallRequestWithDefaults() *ConnectWithNewCallRequest {
+	this := ConnectWithNewCallRequest{}
+
+	var connectOnEarlyMedia bool = false
+	this.ConnectOnEarlyMedia = &connectOnEarlyMedia
+	return &this
+}
+
+// GetCallRequest returns the CallRequest field value if set, zero value otherwise.
+func (o *ConnectWithNewCallRequest) GetCallRequest() ActionCallRequest {
+	if o == nil || IsNil(o.CallRequest) {
+		var ret ActionCallRequest
+		return ret
+	}
+	return *o.CallRequest
+}
+
+// GetCallRequestOk returns a tuple with the CallRequest field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConnectWithNewCallRequest) GetCallRequestOk() (*ActionCallRequest, bool) {
+	if o == nil || IsNil(o.CallRequest) {
+		return nil, false
+	}
+	return o.CallRequest, true
+}
+
+// HasCallRequest returns a boolean if a field has been set.
+func (o *ConnectWithNewCallRequest) HasCallRequest() bool {
+	if o != nil && !IsNil(o.CallRequest) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallRequest gets a reference to the given ActionCallRequest and assigns it to the CallRequest field.
+func (o *ConnectWithNewCallRequest) SetCallRequest(v ActionCallRequest) {
+	o.CallRequest = &v
+}
+
+// GetConnectOnEarlyMedia returns the ConnectOnEarlyMedia field value if set, zero value otherwise.
+func (o *ConnectWithNewCallRequest) GetConnectOnEarlyMedia() bool {
+	if o == nil || IsNil(o.ConnectOnEarlyMedia) {
+		var ret bool
+		return ret
+	}
+	return *o.ConnectOnEarlyMedia
+}
+
+// GetConnectOnEarlyMediaOk returns a tuple with the ConnectOnEarlyMedia field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConnectWithNewCallRequest) GetConnectOnEarlyMediaOk() (*bool, bool) {
+	if o == nil || IsNil(o.ConnectOnEarlyMedia) {
+		return nil, false
+	}
+	return o.ConnectOnEarlyMedia, true
+}
+
+// HasConnectOnEarlyMedia returns a boolean if a field has been set.
+func (o *ConnectWithNewCallRequest) HasConnectOnEarlyMedia() bool {
+	if o != nil && !IsNil(o.ConnectOnEarlyMedia) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectOnEarlyMedia gets a reference to the given bool and assigns it to the ConnectOnEarlyMedia field.
+func (o *ConnectWithNewCallRequest) SetConnectOnEarlyMedia(v bool) {
+	o.ConnectOnEarlyMedia = &v
+}
+
+// GetRingbackGeneration returns the RingbackGeneration field value if set, zero value otherwise.
+func (o *ConnectWithNewCallRequest) GetRingbackGeneration() RingbackGeneration {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		var ret RingbackGeneration
+		return ret
+	}
+	return *o.RingbackGeneration
+}
+
+// GetRingbackGenerationOk returns a tuple with the RingbackGeneration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConnectWithNewCallRequest) GetRingbackGenerationOk() (*RingbackGeneration, bool) {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		return nil, false
+	}
+	return o.RingbackGeneration, true
+}
+
+// HasRingbackGeneration returns a boolean if a field has been set.
+func (o *ConnectWithNewCallRequest) HasRingbackGeneration() bool {
+	if o != nil && !IsNil(o.RingbackGeneration) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingbackGeneration gets a reference to the given RingbackGeneration and assigns it to the RingbackGeneration field.
+func (o *ConnectWithNewCallRequest) SetRingbackGeneration(v RingbackGeneration) {
+	o.RingbackGeneration = &v
+}
+
+// GetConferenceRequest returns the ConferenceRequest field value if set, zero value otherwise.
+func (o *ConnectWithNewCallRequest) GetConferenceRequest() ActionConferenceRequest {
+	if o == nil || IsNil(o.ConferenceRequest) {
+		var ret ActionConferenceRequest
+		return ret
+	}
+	return *o.ConferenceRequest
+}
+
+// GetConferenceRequestOk returns a tuple with the ConferenceRequest field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ConnectWithNewCallRequest) GetConferenceRequestOk() (*ActionConferenceRequest, bool) {
+	if o == nil || IsNil(o.ConferenceRequest) {
+		return nil, false
+	}
+	return o.ConferenceRequest, true
+}
+
+// HasConferenceRequest returns a boolean if a field has been set.
+func (o *ConnectWithNewCallRequest) HasConferenceRequest() bool {
+	if o != nil && !IsNil(o.ConferenceRequest) {
+		return true
+	}
+
+	return false
+}
+
+// SetConferenceRequest gets a reference to the given ActionConferenceRequest and assigns it to the ConferenceRequest field.
+func (o *ConnectWithNewCallRequest) SetConferenceRequest(v ActionConferenceRequest) {
+	o.ConferenceRequest = &v
+}
+
+func (o ConnectWithNewCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ConnectWithNewCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallRequest) {
+		toSerialize["callRequest"] = o.CallRequest
+	}
+	if !IsNil(o.ConnectOnEarlyMedia) {
+		toSerialize["connectOnEarlyMedia"] = o.ConnectOnEarlyMedia
+	}
+	if !IsNil(o.RingbackGeneration) {
+		toSerialize["ringbackGeneration"] = o.RingbackGeneration
+	}
+	if !IsNil(o.ConferenceRequest) {
+		toSerialize["conferenceRequest"] = o.ConferenceRequest
+	}
+	return toSerialize, nil
+}
+
+type NullableConnectWithNewCallRequest struct {
+	value *ConnectWithNewCallRequest
+	isSet bool
+}
+
+func (v NullableConnectWithNewCallRequest) Get() *ConnectWithNewCallRequest {
+	return v.value
+}
+
+func (v *NullableConnectWithNewCallRequest) Set(val *ConnectWithNewCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableConnectWithNewCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableConnectWithNewCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableConnectWithNewCallRequest(val *ConnectWithNewCallRequest) *NullableConnectWithNewCallRequest {
+	return &NullableConnectWithNewCallRequest{value: val, isSet: true}
+}
+
+func (v NullableConnectWithNewCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableConnectWithNewCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/country.go b/pkg/infobip/models/voice/country.go
new file mode 100644
index 0000000..81c1005
--- /dev/null
+++ b/pkg/infobip/models/voice/country.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Country type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Country{}
+
+// Country SIP trunk service address country.
+type Country struct {
+	// Name of the country where SIP trunk is located.
+	Name *string
+	// Code of the country where SIP trunk is located.
+	Code *string
+}
+
+// NewCountry instantiates a new Country object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCountry() *Country {
+	this := Country{}
+	return &this
+}
+
+// NewCountryWithDefaults instantiates a new Country object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCountryWithDefaults() *Country {
+	this := Country{}
+
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *Country) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Country) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *Country) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *Country) SetName(v string) {
+	o.Name = &v
+}
+
+// GetCode returns the Code field value if set, zero value otherwise.
+func (o *Country) GetCode() string {
+	if o == nil || IsNil(o.Code) {
+		var ret string
+		return ret
+	}
+	return *o.Code
+}
+
+// GetCodeOk returns a tuple with the Code field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Country) GetCodeOk() (*string, bool) {
+	if o == nil || IsNil(o.Code) {
+		return nil, false
+	}
+	return o.Code, true
+}
+
+// HasCode returns a boolean if a field has been set.
+func (o *Country) HasCode() bool {
+	if o != nil && !IsNil(o.Code) {
+		return true
+	}
+
+	return false
+}
+
+// SetCode gets a reference to the given string and assigns it to the Code field.
+func (o *Country) SetCode(v string) {
+	o.Code = &v
+}
+
+func (o Country) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Country) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Code) {
+		toSerialize["code"] = o.Code
+	}
+	return toSerialize, nil
+}
+
+type NullableCountry struct {
+	value *Country
+	isSet bool
+}
+
+func (v NullableCountry) Get() *Country {
+	return v.value
+}
+
+func (v *NullableCountry) Set(val *Country) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCountry) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCountry) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCountry(val *Country) *NullableCountry {
+	return &NullableCountry{value: val, isSet: true}
+}
+
+func (v NullableCountry) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCountry) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/country_list.go b/pkg/infobip/models/voice/country_list.go
new file mode 100644
index 0000000..dc0abd9
--- /dev/null
+++ b/pkg/infobip/models/voice/country_list.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CountryList type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CountryList{}
+
+// CountryList struct for CountryList
+type CountryList struct {
+	// List of countries.
+	Countries []Country
+}
+
+// NewCountryList instantiates a new CountryList object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewCountryList() *CountryList {
+	this := CountryList{}
+	return &this
+}
+
+// NewCountryListWithDefaults instantiates a new CountryList object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCountryListWithDefaults() *CountryList {
+	this := CountryList{}
+
+	return &this
+}
+
+// GetCountries returns the Countries field value if set, zero value otherwise.
+func (o *CountryList) GetCountries() []Country {
+	if o == nil || IsNil(o.Countries) {
+		var ret []Country
+		return ret
+	}
+	return o.Countries
+}
+
+// GetCountriesOk returns a tuple with the Countries field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CountryList) GetCountriesOk() ([]Country, bool) {
+	if o == nil || IsNil(o.Countries) {
+		return nil, false
+	}
+	return o.Countries, true
+}
+
+// HasCountries returns a boolean if a field has been set.
+func (o *CountryList) HasCountries() bool {
+	if o != nil && !IsNil(o.Countries) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountries gets a reference to the given []Country and assigns it to the Countries field.
+func (o *CountryList) SetCountries(v []Country) {
+	o.Countries = v
+}
+
+func (o CountryList) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CountryList) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Countries) {
+		toSerialize["countries"] = o.Countries
+	}
+	return toSerialize, nil
+}
+
+type NullableCountryList struct {
+	value *CountryList
+	isSet bool
+}
+
+func (v NullableCountryList) Get() *CountryList {
+	return v.value
+}
+
+func (v *NullableCountryList) Set(val *CountryList) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCountryList) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCountryList) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCountryList(val *CountryList) *NullableCountryList {
+	return &NullableCountryList{value: val, isSet: true}
+}
+
+func (v NullableCountryList) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCountryList) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/create_provider_sip_trunk_response.go b/pkg/infobip/models/voice/create_provider_sip_trunk_response.go
new file mode 100644
index 0000000..c531331
--- /dev/null
+++ b/pkg/infobip/models/voice/create_provider_sip_trunk_response.go
@@ -0,0 +1,384 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CreateProviderSipTrunkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CreateProviderSipTrunkResponse{}
+
+// CreateProviderSipTrunkResponse struct for CreateProviderSipTrunkResponse
+type CreateProviderSipTrunkResponse struct {
+	Id                        *string
+	Type                      SipTrunkType
+	Name                      *string
+	Location                  *SipTrunkLocation
+	InternationalCallsAllowed *bool
+	ChannelLimit              *int32
+	BillingPackage            *BillingPackage
+	SbcHosts                  *SbcHosts
+	Provider                  *Provider
+}
+
+// NewCreateProviderSipTrunkResponse instantiates a new CreateProviderSipTrunkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCreateProviderSipTrunkResponse() *CreateProviderSipTrunkResponse {
+	this := CreateProviderSipTrunkResponse{}
+	this.Type = "PROVIDER"
+	return &this
+}
+
+// NewCreateProviderSipTrunkResponseWithDefaults instantiates a new CreateProviderSipTrunkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCreateProviderSipTrunkResponseWithDefaults() *CreateProviderSipTrunkResponse {
+	this := CreateProviderSipTrunkResponse{}
+	this.Type = "PROVIDER"
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *CreateProviderSipTrunkResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *CreateProviderSipTrunkResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *CreateProviderSipTrunkResponse) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *CreateProviderSipTrunkResponse) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetChannelLimit() int32 {
+	if o == nil || IsNil(o.ChannelLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetChannelLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChannelLimit) {
+		return nil, false
+	}
+	return o.ChannelLimit, true
+}
+
+// HasChannelLimit returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasChannelLimit() bool {
+	if o != nil && !IsNil(o.ChannelLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetChannelLimit gets a reference to the given int32 and assigns it to the ChannelLimit field.
+func (o *CreateProviderSipTrunkResponse) SetChannelLimit(v int32) {
+	o.ChannelLimit = &v
+}
+
+// GetBillingPackage returns the BillingPackage field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetBillingPackage() BillingPackage {
+	if o == nil || IsNil(o.BillingPackage) {
+		var ret BillingPackage
+		return ret
+	}
+	return *o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil || IsNil(o.BillingPackage) {
+		return nil, false
+	}
+	return o.BillingPackage, true
+}
+
+// HasBillingPackage returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasBillingPackage() bool {
+	if o != nil && !IsNil(o.BillingPackage) {
+		return true
+	}
+
+	return false
+}
+
+// SetBillingPackage gets a reference to the given BillingPackage and assigns it to the BillingPackage field.
+func (o *CreateProviderSipTrunkResponse) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = &v
+}
+
+// GetSbcHosts returns the SbcHosts field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetSbcHosts() SbcHosts {
+	if o == nil || IsNil(o.SbcHosts) {
+		var ret SbcHosts
+		return ret
+	}
+	return *o.SbcHosts
+}
+
+// GetSbcHostsOk returns a tuple with the SbcHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetSbcHostsOk() (*SbcHosts, bool) {
+	if o == nil || IsNil(o.SbcHosts) {
+		return nil, false
+	}
+	return o.SbcHosts, true
+}
+
+// HasSbcHosts returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasSbcHosts() bool {
+	if o != nil && !IsNil(o.SbcHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSbcHosts gets a reference to the given SbcHosts and assigns it to the SbcHosts field.
+func (o *CreateProviderSipTrunkResponse) SetSbcHosts(v SbcHosts) {
+	o.SbcHosts = &v
+}
+
+// GetProvider returns the Provider field value if set, zero value otherwise.
+func (o *CreateProviderSipTrunkResponse) GetProvider() Provider {
+	if o == nil || IsNil(o.Provider) {
+		var ret Provider
+		return ret
+	}
+	return *o.Provider
+}
+
+// GetProviderOk returns a tuple with the Provider field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateProviderSipTrunkResponse) GetProviderOk() (*Provider, bool) {
+	if o == nil || IsNil(o.Provider) {
+		return nil, false
+	}
+	return o.Provider, true
+}
+
+// HasProvider returns a boolean if a field has been set.
+func (o *CreateProviderSipTrunkResponse) HasProvider() bool {
+	if o != nil && !IsNil(o.Provider) {
+		return true
+	}
+
+	return false
+}
+
+// SetProvider gets a reference to the given Provider and assigns it to the Provider field.
+func (o *CreateProviderSipTrunkResponse) SetProvider(v Provider) {
+	o.Provider = &v
+}
+
+func (o CreateProviderSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CreateProviderSipTrunkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	if !IsNil(o.ChannelLimit) {
+		toSerialize["channelLimit"] = o.ChannelLimit
+	}
+	if !IsNil(o.BillingPackage) {
+		toSerialize["billingPackage"] = o.BillingPackage
+	}
+	if !IsNil(o.SbcHosts) {
+		toSerialize["sbcHosts"] = o.SbcHosts
+	}
+	if !IsNil(o.Provider) {
+		toSerialize["provider"] = o.Provider
+	}
+	return toSerialize, nil
+}
+
+type NullableCreateProviderSipTrunkResponse struct {
+	value *CreateProviderSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableCreateProviderSipTrunkResponse) Get() *CreateProviderSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableCreateProviderSipTrunkResponse) Set(val *CreateProviderSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCreateProviderSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCreateProviderSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCreateProviderSipTrunkResponse(val *CreateProviderSipTrunkResponse) *NullableCreateProviderSipTrunkResponse {
+	return &NullableCreateProviderSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableCreateProviderSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCreateProviderSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/create_registered_sip_trunk_response.go b/pkg/infobip/models/voice/create_registered_sip_trunk_response.go
new file mode 100644
index 0000000..dd1845e
--- /dev/null
+++ b/pkg/infobip/models/voice/create_registered_sip_trunk_response.go
@@ -0,0 +1,689 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CreateRegisteredSipTrunkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CreateRegisteredSipTrunkResponse{}
+
+// CreateRegisteredSipTrunkResponse struct for CreateRegisteredSipTrunkResponse
+type CreateRegisteredSipTrunkResponse struct {
+	Id                        *string
+	Type                      SipTrunkType
+	Name                      *string
+	Location                  *SipTrunkLocation
+	InternationalCallsAllowed *bool
+	ChannelLimit              *int32
+	BillingPackage            *BillingPackage
+	SbcHosts                  *SbcHosts
+	// Indicates whether communication is secured by the TLS protocol.
+	Tls *bool
+	// List of audio codecs supported by a SIP trunk.
+	Codecs        []AudioCodec
+	Dtmf          *DtmfType
+	Fax           *FaxType
+	NumberFormat  *NumberPresentationFormat
+	Anonymization *AnonymizationType
+	// Registration username.
+	Username *string
+	// Registration password.
+	Password *string
+	// Enables an authentication challenge for each call.
+	InviteAuthentication *bool
+}
+
+// NewCreateRegisteredSipTrunkResponse instantiates a new CreateRegisteredSipTrunkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCreateRegisteredSipTrunkResponse() *CreateRegisteredSipTrunkResponse {
+	this := CreateRegisteredSipTrunkResponse{}
+	this.Type = "REGISTERED"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	return &this
+}
+
+// NewCreateRegisteredSipTrunkResponseWithDefaults instantiates a new CreateRegisteredSipTrunkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCreateRegisteredSipTrunkResponseWithDefaults() *CreateRegisteredSipTrunkResponse {
+	this := CreateRegisteredSipTrunkResponse{}
+	this.Type = "REGISTERED"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *CreateRegisteredSipTrunkResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *CreateRegisteredSipTrunkResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *CreateRegisteredSipTrunkResponse) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *CreateRegisteredSipTrunkResponse) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetChannelLimit() int32 {
+	if o == nil || IsNil(o.ChannelLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetChannelLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChannelLimit) {
+		return nil, false
+	}
+	return o.ChannelLimit, true
+}
+
+// HasChannelLimit returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasChannelLimit() bool {
+	if o != nil && !IsNil(o.ChannelLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetChannelLimit gets a reference to the given int32 and assigns it to the ChannelLimit field.
+func (o *CreateRegisteredSipTrunkResponse) SetChannelLimit(v int32) {
+	o.ChannelLimit = &v
+}
+
+// GetBillingPackage returns the BillingPackage field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetBillingPackage() BillingPackage {
+	if o == nil || IsNil(o.BillingPackage) {
+		var ret BillingPackage
+		return ret
+	}
+	return *o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil || IsNil(o.BillingPackage) {
+		return nil, false
+	}
+	return o.BillingPackage, true
+}
+
+// HasBillingPackage returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasBillingPackage() bool {
+	if o != nil && !IsNil(o.BillingPackage) {
+		return true
+	}
+
+	return false
+}
+
+// SetBillingPackage gets a reference to the given BillingPackage and assigns it to the BillingPackage field.
+func (o *CreateRegisteredSipTrunkResponse) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = &v
+}
+
+// GetSbcHosts returns the SbcHosts field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetSbcHosts() SbcHosts {
+	if o == nil || IsNil(o.SbcHosts) {
+		var ret SbcHosts
+		return ret
+	}
+	return *o.SbcHosts
+}
+
+// GetSbcHostsOk returns a tuple with the SbcHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetSbcHostsOk() (*SbcHosts, bool) {
+	if o == nil || IsNil(o.SbcHosts) {
+		return nil, false
+	}
+	return o.SbcHosts, true
+}
+
+// HasSbcHosts returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasSbcHosts() bool {
+	if o != nil && !IsNil(o.SbcHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSbcHosts gets a reference to the given SbcHosts and assigns it to the SbcHosts field.
+func (o *CreateRegisteredSipTrunkResponse) SetSbcHosts(v SbcHosts) {
+	o.SbcHosts = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *CreateRegisteredSipTrunkResponse) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *CreateRegisteredSipTrunkResponse) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *CreateRegisteredSipTrunkResponse) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *CreateRegisteredSipTrunkResponse) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *CreateRegisteredSipTrunkResponse) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *CreateRegisteredSipTrunkResponse) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetUsername returns the Username field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetUsername() string {
+	if o == nil || IsNil(o.Username) {
+		var ret string
+		return ret
+	}
+	return *o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetUsernameOk() (*string, bool) {
+	if o == nil || IsNil(o.Username) {
+		return nil, false
+	}
+	return o.Username, true
+}
+
+// HasUsername returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasUsername() bool {
+	if o != nil && !IsNil(o.Username) {
+		return true
+	}
+
+	return false
+}
+
+// SetUsername gets a reference to the given string and assigns it to the Username field.
+func (o *CreateRegisteredSipTrunkResponse) SetUsername(v string) {
+	o.Username = &v
+}
+
+// GetPassword returns the Password field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetPassword() string {
+	if o == nil || IsNil(o.Password) {
+		var ret string
+		return ret
+	}
+	return *o.Password
+}
+
+// GetPasswordOk returns a tuple with the Password field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetPasswordOk() (*string, bool) {
+	if o == nil || IsNil(o.Password) {
+		return nil, false
+	}
+	return o.Password, true
+}
+
+// HasPassword returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasPassword() bool {
+	if o != nil && !IsNil(o.Password) {
+		return true
+	}
+
+	return false
+}
+
+// SetPassword gets a reference to the given string and assigns it to the Password field.
+func (o *CreateRegisteredSipTrunkResponse) SetPassword(v string) {
+	o.Password = &v
+}
+
+// GetInviteAuthentication returns the InviteAuthentication field value if set, zero value otherwise.
+func (o *CreateRegisteredSipTrunkResponse) GetInviteAuthentication() bool {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		var ret bool
+		return ret
+	}
+	return *o.InviteAuthentication
+}
+
+// GetInviteAuthenticationOk returns a tuple with the InviteAuthentication field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateRegisteredSipTrunkResponse) GetInviteAuthenticationOk() (*bool, bool) {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		return nil, false
+	}
+	return o.InviteAuthentication, true
+}
+
+// HasInviteAuthentication returns a boolean if a field has been set.
+func (o *CreateRegisteredSipTrunkResponse) HasInviteAuthentication() bool {
+	if o != nil && !IsNil(o.InviteAuthentication) {
+		return true
+	}
+
+	return false
+}
+
+// SetInviteAuthentication gets a reference to the given bool and assigns it to the InviteAuthentication field.
+func (o *CreateRegisteredSipTrunkResponse) SetInviteAuthentication(v bool) {
+	o.InviteAuthentication = &v
+}
+
+func (o CreateRegisteredSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CreateRegisteredSipTrunkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	if !IsNil(o.ChannelLimit) {
+		toSerialize["channelLimit"] = o.ChannelLimit
+	}
+	if !IsNil(o.BillingPackage) {
+		toSerialize["billingPackage"] = o.BillingPackage
+	}
+	if !IsNil(o.SbcHosts) {
+		toSerialize["sbcHosts"] = o.SbcHosts
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.Username) {
+		toSerialize["username"] = o.Username
+	}
+	if !IsNil(o.Password) {
+		toSerialize["password"] = o.Password
+	}
+	if !IsNil(o.InviteAuthentication) {
+		toSerialize["inviteAuthentication"] = o.InviteAuthentication
+	}
+	return toSerialize, nil
+}
+
+type NullableCreateRegisteredSipTrunkResponse struct {
+	value *CreateRegisteredSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableCreateRegisteredSipTrunkResponse) Get() *CreateRegisteredSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableCreateRegisteredSipTrunkResponse) Set(val *CreateRegisteredSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCreateRegisteredSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCreateRegisteredSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCreateRegisteredSipTrunkResponse(val *CreateRegisteredSipTrunkResponse) *NullableCreateRegisteredSipTrunkResponse {
+	return &NullableCreateRegisteredSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableCreateRegisteredSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCreateRegisteredSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/create_sip_trunk_response.go b/pkg/infobip/models/voice/create_sip_trunk_response.go
new file mode 100644
index 0000000..8ec4867
--- /dev/null
+++ b/pkg/infobip/models/voice/create_sip_trunk_response.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CreateSipTrunkResponse struct for CreateSipTrunkResponse
+type CreateSipTrunkResponse struct {
+	CreateProviderSipTrunkResponse   *CreateProviderSipTrunkResponse
+	CreateRegisteredSipTrunkResponse *CreateRegisteredSipTrunkResponse
+	CreateStaticSipTrunkResponse     *CreateStaticSipTrunkResponse
+}
+
+// CreateProviderSipTrunkResponseAsCreateSipTrunkResponse is a convenience function that returns CreateProviderSipTrunkResponse wrapped in CreateSipTrunkResponse
+func CreateProviderSipTrunkResponseAsCreateSipTrunkResponse(v *CreateProviderSipTrunkResponse) CreateSipTrunkResponse {
+	return CreateSipTrunkResponse{
+		CreateProviderSipTrunkResponse: v,
+	}
+}
+
+// CreateRegisteredSipTrunkResponseAsCreateSipTrunkResponse is a convenience function that returns CreateRegisteredSipTrunkResponse wrapped in CreateSipTrunkResponse
+func CreateRegisteredSipTrunkResponseAsCreateSipTrunkResponse(v *CreateRegisteredSipTrunkResponse) CreateSipTrunkResponse {
+	return CreateSipTrunkResponse{
+		CreateRegisteredSipTrunkResponse: v,
+	}
+}
+
+// CreateStaticSipTrunkResponseAsCreateSipTrunkResponse is a convenience function that returns CreateStaticSipTrunkResponse wrapped in CreateSipTrunkResponse
+func CreateStaticSipTrunkResponseAsCreateSipTrunkResponse(v *CreateStaticSipTrunkResponse) CreateSipTrunkResponse {
+	return CreateSipTrunkResponse{
+		CreateStaticSipTrunkResponse: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *CreateSipTrunkResponse) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PROVIDER'
+	if jsonDict["type"] == "PROVIDER" {
+		// try to unmarshal JSON data into CreateProviderSipTrunkResponse
+		err = json.Unmarshal(data, &dst.CreateProviderSipTrunkResponse)
+		if err == nil {
+			jsonCreateProviderSipTrunkResponse, _ := json.Marshal(dst.CreateProviderSipTrunkResponse)
+			if string(jsonCreateProviderSipTrunkResponse) == "{}" { // empty struct
+				dst.CreateProviderSipTrunkResponse = nil
+			} else {
+				return nil // data stored in dst.CreateProviderSipTrunkResponse, return on the first match
+			}
+		} else {
+			dst.CreateProviderSipTrunkResponse = nil
+		}
+	}
+	// check if the discriminator value is 'REGISTERED'
+	if jsonDict["type"] == "REGISTERED" {
+		// try to unmarshal JSON data into CreateRegisteredSipTrunkResponse
+		err = json.Unmarshal(data, &dst.CreateRegisteredSipTrunkResponse)
+		if err == nil {
+			jsonCreateRegisteredSipTrunkResponse, _ := json.Marshal(dst.CreateRegisteredSipTrunkResponse)
+			if string(jsonCreateRegisteredSipTrunkResponse) == "{}" { // empty struct
+				dst.CreateRegisteredSipTrunkResponse = nil
+			} else {
+				return nil // data stored in dst.CreateRegisteredSipTrunkResponse, return on the first match
+			}
+		} else {
+			dst.CreateRegisteredSipTrunkResponse = nil
+		}
+	}
+	// check if the discriminator value is 'STATIC'
+	if jsonDict["type"] == "STATIC" {
+		// try to unmarshal JSON data into CreateStaticSipTrunkResponse
+		err = json.Unmarshal(data, &dst.CreateStaticSipTrunkResponse)
+		if err == nil {
+			jsonCreateStaticSipTrunkResponse, _ := json.Marshal(dst.CreateStaticSipTrunkResponse)
+			if string(jsonCreateStaticSipTrunkResponse) == "{}" { // empty struct
+				dst.CreateStaticSipTrunkResponse = nil
+			} else {
+				return nil // data stored in dst.CreateStaticSipTrunkResponse, return on the first match
+			}
+		} else {
+			dst.CreateStaticSipTrunkResponse = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(CreateSipTrunkResponse)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src CreateSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	if src.CreateProviderSipTrunkResponse != nil {
+		return json.Marshal(&src.CreateProviderSipTrunkResponse)
+	}
+	if src.CreateRegisteredSipTrunkResponse != nil {
+		return json.Marshal(&src.CreateRegisteredSipTrunkResponse)
+	}
+	if src.CreateStaticSipTrunkResponse != nil {
+		return json.Marshal(&src.CreateStaticSipTrunkResponse)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *CreateSipTrunkResponse) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CreateProviderSipTrunkResponse != nil {
+		return obj.CreateProviderSipTrunkResponse
+	}
+	if obj.CreateRegisteredSipTrunkResponse != nil {
+		return obj.CreateRegisteredSipTrunkResponse
+	}
+	if obj.CreateStaticSipTrunkResponse != nil {
+		return obj.CreateStaticSipTrunkResponse
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableCreateSipTrunkResponse struct {
+	value *CreateSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableCreateSipTrunkResponse) Get() *CreateSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableCreateSipTrunkResponse) Set(val *CreateSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCreateSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCreateSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCreateSipTrunkResponse(val *CreateSipTrunkResponse) *NullableCreateSipTrunkResponse {
+	return &NullableCreateSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableCreateSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCreateSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/create_static_sip_trunk_response.go b/pkg/infobip/models/voice/create_static_sip_trunk_response.go
new file mode 100644
index 0000000..343a402
--- /dev/null
+++ b/pkg/infobip/models/voice/create_static_sip_trunk_response.go
@@ -0,0 +1,728 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the CreateStaticSipTrunkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &CreateStaticSipTrunkResponse{}
+
+// CreateStaticSipTrunkResponse struct for CreateStaticSipTrunkResponse
+type CreateStaticSipTrunkResponse struct {
+	Id                        *string
+	Type                      SipTrunkType
+	Name                      *string
+	Location                  *SipTrunkLocation
+	InternationalCallsAllowed *bool
+	ChannelLimit              *int32
+	BillingPackage            *BillingPackage
+	SbcHosts                  *SbcHosts
+	// Indicates whether communication is secured by the TLS protocol.
+	Tls *bool
+	// List of audio codecs supported by a SIP trunk.
+	Codecs        []AudioCodec
+	Dtmf          *DtmfType
+	Fax           *FaxType
+	NumberFormat  *NumberPresentationFormat
+	Anonymization *AnonymizationType
+	// List of source hosts.
+	SourceHosts []string
+	// List of destination hosts.
+	DestinationHosts []string
+	Strategy         *SelectionStrategy
+	SipOptions       *SipOptions
+}
+
+// NewCreateStaticSipTrunkResponse instantiates a new CreateStaticSipTrunkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewCreateStaticSipTrunkResponse() *CreateStaticSipTrunkResponse {
+	this := CreateStaticSipTrunkResponse{}
+	this.Type = "STATIC"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	return &this
+}
+
+// NewCreateStaticSipTrunkResponseWithDefaults instantiates a new CreateStaticSipTrunkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewCreateStaticSipTrunkResponseWithDefaults() *CreateStaticSipTrunkResponse {
+	this := CreateStaticSipTrunkResponse{}
+	this.Type = "STATIC"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *CreateStaticSipTrunkResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *CreateStaticSipTrunkResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *CreateStaticSipTrunkResponse) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *CreateStaticSipTrunkResponse) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetChannelLimit() int32 {
+	if o == nil || IsNil(o.ChannelLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetChannelLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChannelLimit) {
+		return nil, false
+	}
+	return o.ChannelLimit, true
+}
+
+// HasChannelLimit returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasChannelLimit() bool {
+	if o != nil && !IsNil(o.ChannelLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetChannelLimit gets a reference to the given int32 and assigns it to the ChannelLimit field.
+func (o *CreateStaticSipTrunkResponse) SetChannelLimit(v int32) {
+	o.ChannelLimit = &v
+}
+
+// GetBillingPackage returns the BillingPackage field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetBillingPackage() BillingPackage {
+	if o == nil || IsNil(o.BillingPackage) {
+		var ret BillingPackage
+		return ret
+	}
+	return *o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil || IsNil(o.BillingPackage) {
+		return nil, false
+	}
+	return o.BillingPackage, true
+}
+
+// HasBillingPackage returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasBillingPackage() bool {
+	if o != nil && !IsNil(o.BillingPackage) {
+		return true
+	}
+
+	return false
+}
+
+// SetBillingPackage gets a reference to the given BillingPackage and assigns it to the BillingPackage field.
+func (o *CreateStaticSipTrunkResponse) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = &v
+}
+
+// GetSbcHosts returns the SbcHosts field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetSbcHosts() SbcHosts {
+	if o == nil || IsNil(o.SbcHosts) {
+		var ret SbcHosts
+		return ret
+	}
+	return *o.SbcHosts
+}
+
+// GetSbcHostsOk returns a tuple with the SbcHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetSbcHostsOk() (*SbcHosts, bool) {
+	if o == nil || IsNil(o.SbcHosts) {
+		return nil, false
+	}
+	return o.SbcHosts, true
+}
+
+// HasSbcHosts returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasSbcHosts() bool {
+	if o != nil && !IsNil(o.SbcHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSbcHosts gets a reference to the given SbcHosts and assigns it to the SbcHosts field.
+func (o *CreateStaticSipTrunkResponse) SetSbcHosts(v SbcHosts) {
+	o.SbcHosts = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *CreateStaticSipTrunkResponse) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *CreateStaticSipTrunkResponse) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *CreateStaticSipTrunkResponse) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *CreateStaticSipTrunkResponse) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *CreateStaticSipTrunkResponse) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *CreateStaticSipTrunkResponse) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetSourceHosts returns the SourceHosts field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetSourceHosts() []string {
+	if o == nil || IsNil(o.SourceHosts) {
+		var ret []string
+		return ret
+	}
+	return o.SourceHosts
+}
+
+// GetSourceHostsOk returns a tuple with the SourceHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetSourceHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.SourceHosts) {
+		return nil, false
+	}
+	return o.SourceHosts, true
+}
+
+// HasSourceHosts returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasSourceHosts() bool {
+	if o != nil && !IsNil(o.SourceHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSourceHosts gets a reference to the given []string and assigns it to the SourceHosts field.
+func (o *CreateStaticSipTrunkResponse) SetSourceHosts(v []string) {
+	o.SourceHosts = v
+}
+
+// GetDestinationHosts returns the DestinationHosts field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetDestinationHosts() []string {
+	if o == nil || IsNil(o.DestinationHosts) {
+		var ret []string
+		return ret
+	}
+	return o.DestinationHosts
+}
+
+// GetDestinationHostsOk returns a tuple with the DestinationHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetDestinationHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.DestinationHosts) {
+		return nil, false
+	}
+	return o.DestinationHosts, true
+}
+
+// HasDestinationHosts returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasDestinationHosts() bool {
+	if o != nil && !IsNil(o.DestinationHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetDestinationHosts gets a reference to the given []string and assigns it to the DestinationHosts field.
+func (o *CreateStaticSipTrunkResponse) SetDestinationHosts(v []string) {
+	o.DestinationHosts = v
+}
+
+// GetStrategy returns the Strategy field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetStrategy() SelectionStrategy {
+	if o == nil || IsNil(o.Strategy) {
+		var ret SelectionStrategy
+		return ret
+	}
+	return *o.Strategy
+}
+
+// GetStrategyOk returns a tuple with the Strategy field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetStrategyOk() (*SelectionStrategy, bool) {
+	if o == nil || IsNil(o.Strategy) {
+		return nil, false
+	}
+	return o.Strategy, true
+}
+
+// HasStrategy returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasStrategy() bool {
+	if o != nil && !IsNil(o.Strategy) {
+		return true
+	}
+
+	return false
+}
+
+// SetStrategy gets a reference to the given SelectionStrategy and assigns it to the Strategy field.
+func (o *CreateStaticSipTrunkResponse) SetStrategy(v SelectionStrategy) {
+	o.Strategy = &v
+}
+
+// GetSipOptions returns the SipOptions field value if set, zero value otherwise.
+func (o *CreateStaticSipTrunkResponse) GetSipOptions() SipOptions {
+	if o == nil || IsNil(o.SipOptions) {
+		var ret SipOptions
+		return ret
+	}
+	return *o.SipOptions
+}
+
+// GetSipOptionsOk returns a tuple with the SipOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *CreateStaticSipTrunkResponse) GetSipOptionsOk() (*SipOptions, bool) {
+	if o == nil || IsNil(o.SipOptions) {
+		return nil, false
+	}
+	return o.SipOptions, true
+}
+
+// HasSipOptions returns a boolean if a field has been set.
+func (o *CreateStaticSipTrunkResponse) HasSipOptions() bool {
+	if o != nil && !IsNil(o.SipOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipOptions gets a reference to the given SipOptions and assigns it to the SipOptions field.
+func (o *CreateStaticSipTrunkResponse) SetSipOptions(v SipOptions) {
+	o.SipOptions = &v
+}
+
+func (o CreateStaticSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o CreateStaticSipTrunkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	if !IsNil(o.ChannelLimit) {
+		toSerialize["channelLimit"] = o.ChannelLimit
+	}
+	if !IsNil(o.BillingPackage) {
+		toSerialize["billingPackage"] = o.BillingPackage
+	}
+	if !IsNil(o.SbcHosts) {
+		toSerialize["sbcHosts"] = o.SbcHosts
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.SourceHosts) {
+		toSerialize["sourceHosts"] = o.SourceHosts
+	}
+	if !IsNil(o.DestinationHosts) {
+		toSerialize["destinationHosts"] = o.DestinationHosts
+	}
+	if !IsNil(o.Strategy) {
+		toSerialize["strategy"] = o.Strategy
+	}
+	if !IsNil(o.SipOptions) {
+		toSerialize["sipOptions"] = o.SipOptions
+	}
+	return toSerialize, nil
+}
+
+type NullableCreateStaticSipTrunkResponse struct {
+	value *CreateStaticSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableCreateStaticSipTrunkResponse) Get() *CreateStaticSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableCreateStaticSipTrunkResponse) Set(val *CreateStaticSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCreateStaticSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCreateStaticSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCreateStaticSipTrunkResponse(val *CreateStaticSipTrunkResponse) *NullableCreateStaticSipTrunkResponse {
+	return &NullableCreateStaticSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableCreateStaticSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCreateStaticSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/creation_method.go b/pkg/infobip/models/voice/creation_method.go
new file mode 100644
index 0000000..391f1e9
--- /dev/null
+++ b/pkg/infobip/models/voice/creation_method.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// CreationMethod File creation method.
+type CreationMethod string
+
+// List of CreationMethod
+const (
+	CREATIONMETHOD_UPLOADED    CreationMethod = "UPLOADED"
+	CREATIONMETHOD_SYNTHESIZED CreationMethod = "SYNTHESIZED"
+	CREATIONMETHOD_RECORDED    CreationMethod = "RECORDED"
+)
+
+// All allowed values of CreationMethod enum
+var AllowedCreationMethodEnumValues = []CreationMethod{
+	"UPLOADED",
+	"SYNTHESIZED",
+	"RECORDED",
+}
+
+func (v *CreationMethod) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := CreationMethod(value)
+	for _, existing := range AllowedCreationMethodEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid CreationMethod", value)
+}
+
+// NewCreationMethodFromValue returns a pointer to a valid CreationMethod
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewCreationMethodFromValue(v string) (*CreationMethod, error) {
+	ev := CreationMethod(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for CreationMethod: valid values are %v", v, AllowedCreationMethodEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v CreationMethod) IsValid() bool {
+	for _, existing := range AllowedCreationMethodEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to CreationMethod value
+func (v CreationMethod) Ptr() *CreationMethod {
+	return &v
+}
+
+type NullableCreationMethod struct {
+	value *CreationMethod
+	isSet bool
+}
+
+func (v NullableCreationMethod) Get() *CreationMethod {
+	return v.value
+}
+
+func (v *NullableCreationMethod) Set(val *CreationMethod) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableCreationMethod) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableCreationMethod) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableCreationMethod(val *CreationMethod) *NullableCreationMethod {
+	return &NullableCreationMethod{value: val, isSet: true}
+}
+
+func (v NullableCreationMethod) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableCreationMethod) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/delivery_day.go b/pkg/infobip/models/voice/delivery_day.go
new file mode 100644
index 0000000..c02c730
--- /dev/null
+++ b/pkg/infobip/models/voice/delivery_day.go
@@ -0,0 +1,120 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// DeliveryDay Allowed day.
+type DeliveryDay string
+
+// List of DeliveryDay
+const (
+	DELIVERYDAY_MONDAY    DeliveryDay = "MONDAY"
+	DELIVERYDAY_TUESDAY   DeliveryDay = "TUESDAY"
+	DELIVERYDAY_WEDNESDAY DeliveryDay = "WEDNESDAY"
+	DELIVERYDAY_THURSDAY  DeliveryDay = "THURSDAY"
+	DELIVERYDAY_FRIDAY    DeliveryDay = "FRIDAY"
+	DELIVERYDAY_SATURDAY  DeliveryDay = "SATURDAY"
+	DELIVERYDAY_SUNDAY    DeliveryDay = "SUNDAY"
+)
+
+// All allowed values of DeliveryDay enum
+var AllowedDeliveryDayEnumValues = []DeliveryDay{
+	"MONDAY",
+	"TUESDAY",
+	"WEDNESDAY",
+	"THURSDAY",
+	"FRIDAY",
+	"SATURDAY",
+	"SUNDAY",
+}
+
+func (v *DeliveryDay) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := DeliveryDay(value)
+	for _, existing := range AllowedDeliveryDayEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid DeliveryDay", value)
+}
+
+// NewDeliveryDayFromValue returns a pointer to a valid DeliveryDay
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewDeliveryDayFromValue(v string) (*DeliveryDay, error) {
+	ev := DeliveryDay(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for DeliveryDay: valid values are %v", v, AllowedDeliveryDayEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v DeliveryDay) IsValid() bool {
+	for _, existing := range AllowedDeliveryDayEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to DeliveryDay value
+func (v DeliveryDay) Ptr() *DeliveryDay {
+	return &v
+}
+
+type NullableDeliveryDay struct {
+	value *DeliveryDay
+	isSet bool
+}
+
+func (v NullableDeliveryDay) Get() *DeliveryDay {
+	return v.value
+}
+
+func (v *NullableDeliveryDay) Set(val *DeliveryDay) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDeliveryDay) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDeliveryDay) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDeliveryDay(val *DeliveryDay) *NullableDeliveryDay {
+	return &NullableDeliveryDay{value: val, isSet: true}
+}
+
+func (v NullableDeliveryDay) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDeliveryDay) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/delivery_time.go b/pkg/infobip/models/voice/delivery_time.go
new file mode 100644
index 0000000..b20c72e
--- /dev/null
+++ b/pkg/infobip/models/voice/delivery_time.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DeliveryTime type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DeliveryTime{}
+
+// DeliveryTime The exact time of day to enable call forwarding. Time is expressed in the `UTC` time zone. If not set, defaults to `00:00:00`.
+type DeliveryTime struct {
+	// Hour when the time window opens.
+	Hour int32
+	// Minute when the time window opens.
+	Minute int32
+}
+
+type _DeliveryTime DeliveryTime
+
+// NewDeliveryTime instantiates a new DeliveryTime object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDeliveryTime(hour int32, minute int32) *DeliveryTime {
+	this := DeliveryTime{}
+	this.Hour = hour
+	this.Minute = minute
+	return &this
+}
+
+// NewDeliveryTimeWithDefaults instantiates a new DeliveryTime object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDeliveryTimeWithDefaults() *DeliveryTime {
+	this := DeliveryTime{}
+
+	return &this
+}
+
+// GetHour returns the Hour field value
+func (o *DeliveryTime) GetHour() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Hour
+}
+
+// GetHourOk returns a tuple with the Hour field value
+// and a boolean to check if the value has been set.
+func (o *DeliveryTime) GetHourOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Hour, true
+}
+
+// SetHour sets field value
+func (o *DeliveryTime) SetHour(v int32) {
+	o.Hour = v
+}
+
+// GetMinute returns the Minute field value
+func (o *DeliveryTime) GetMinute() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Minute
+}
+
+// GetMinuteOk returns a tuple with the Minute field value
+// and a boolean to check if the value has been set.
+func (o *DeliveryTime) GetMinuteOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Minute, true
+}
+
+// SetMinute sets field value
+func (o *DeliveryTime) SetMinute(v int32) {
+	o.Minute = v
+}
+
+func (o DeliveryTime) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DeliveryTime) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["hour"] = o.Hour
+	toSerialize["minute"] = o.Minute
+	return toSerialize, nil
+}
+
+type NullableDeliveryTime struct {
+	value *DeliveryTime
+	isSet bool
+}
+
+func (v NullableDeliveryTime) Get() *DeliveryTime {
+	return v.value
+}
+
+func (v *NullableDeliveryTime) Set(val *DeliveryTime) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDeliveryTime) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDeliveryTime) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDeliveryTime(val *DeliveryTime) *NullableDeliveryTime {
+	return &NullableDeliveryTime{value: val, isSet: true}
+}
+
+func (v NullableDeliveryTime) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDeliveryTime) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/delivery_time_window.go b/pkg/infobip/models/voice/delivery_time_window.go
new file mode 100644
index 0000000..bcca678
--- /dev/null
+++ b/pkg/infobip/models/voice/delivery_time_window.go
@@ -0,0 +1,201 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DeliveryTimeWindow type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DeliveryTimeWindow{}
+
+// DeliveryTimeWindow Sets specific delivery windows outside of which calls won't be forwarded to the destination. If defined, call forwarding is allowed only if any time window in array is satisfied.
+type DeliveryTimeWindow struct {
+	From *DeliveryTime
+	To   *DeliveryTime
+	// Days for which to apply the `from` and `to` properties. If not set, defaults to all days.
+	Days []DeliveryDay
+}
+
+// NewDeliveryTimeWindow instantiates a new DeliveryTimeWindow object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDeliveryTimeWindow() *DeliveryTimeWindow {
+	this := DeliveryTimeWindow{}
+	return &this
+}
+
+// NewDeliveryTimeWindowWithDefaults instantiates a new DeliveryTimeWindow object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDeliveryTimeWindowWithDefaults() *DeliveryTimeWindow {
+	this := DeliveryTimeWindow{}
+
+	return &this
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *DeliveryTimeWindow) GetFrom() DeliveryTime {
+	if o == nil || IsNil(o.From) {
+		var ret DeliveryTime
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryTimeWindow) GetFromOk() (*DeliveryTime, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *DeliveryTimeWindow) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given DeliveryTime and assigns it to the From field.
+func (o *DeliveryTimeWindow) SetFrom(v DeliveryTime) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *DeliveryTimeWindow) GetTo() DeliveryTime {
+	if o == nil || IsNil(o.To) {
+		var ret DeliveryTime
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryTimeWindow) GetToOk() (*DeliveryTime, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *DeliveryTimeWindow) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given DeliveryTime and assigns it to the To field.
+func (o *DeliveryTimeWindow) SetTo(v DeliveryTime) {
+	o.To = &v
+}
+
+// GetDays returns the Days field value if set, zero value otherwise.
+func (o *DeliveryTimeWindow) GetDays() []DeliveryDay {
+	if o == nil || IsNil(o.Days) {
+		var ret []DeliveryDay
+		return ret
+	}
+	return o.Days
+}
+
+// GetDaysOk returns a tuple with the Days field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DeliveryTimeWindow) GetDaysOk() ([]DeliveryDay, bool) {
+	if o == nil || IsNil(o.Days) {
+		return nil, false
+	}
+	return o.Days, true
+}
+
+// HasDays returns a boolean if a field has been set.
+func (o *DeliveryTimeWindow) HasDays() bool {
+	if o != nil && !IsNil(o.Days) {
+		return true
+	}
+
+	return false
+}
+
+// SetDays gets a reference to the given []DeliveryDay and assigns it to the Days field.
+func (o *DeliveryTimeWindow) SetDays(v []DeliveryDay) {
+	o.Days = v
+}
+
+func (o DeliveryTimeWindow) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DeliveryTimeWindow) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.Days) {
+		toSerialize["days"] = o.Days
+	}
+	return toSerialize, nil
+}
+
+type NullableDeliveryTimeWindow struct {
+	value *DeliveryTimeWindow
+	isSet bool
+}
+
+func (v NullableDeliveryTimeWindow) Get() *DeliveryTimeWindow {
+	return v.value
+}
+
+func (v *NullableDeliveryTimeWindow) Set(val *DeliveryTimeWindow) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDeliveryTimeWindow) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDeliveryTimeWindow) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDeliveryTimeWindow(val *DeliveryTimeWindow) *NullableDeliveryTimeWindow {
+	return &NullableDeliveryTimeWindow{value: val, isSet: true}
+}
+
+func (v NullableDeliveryTimeWindow) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDeliveryTimeWindow) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/destination.go b/pkg/infobip/models/voice/destination.go
new file mode 100644
index 0000000..510236e
--- /dev/null
+++ b/pkg/infobip/models/voice/destination.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Destination type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Destination{}
+
+// Destination Message destination addresses. Destination address must be in the E.164 standard format (Example: 41793026727). Maximum number of destination addresses is 20k.
+type Destination struct {
+	// The ID that uniquely identifies the message sent.
+	MessageId *string
+	// Message destination addresses. Destination address must be in the E.164 standard format (Example: `41793026727`).
+	To string
+}
+
+type _Destination Destination
+
+// NewDestination instantiates a new Destination object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDestination(to string) *Destination {
+	this := Destination{}
+	this.To = to
+	return &this
+}
+
+// NewDestinationWithDefaults instantiates a new Destination object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDestinationWithDefaults() *Destination {
+	this := Destination{}
+
+	return &this
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *Destination) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Destination) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *Destination) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *Destination) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetTo returns the To field value
+func (o *Destination) GetTo() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.To
+}
+
+// GetToOk returns a tuple with the To field value
+// and a boolean to check if the value has been set.
+func (o *Destination) GetToOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.To, true
+}
+
+// SetTo sets field value
+func (o *Destination) SetTo(v string) {
+	o.To = v
+}
+
+func (o Destination) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Destination) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	toSerialize["to"] = o.To
+	return toSerialize, nil
+}
+
+type NullableDestination struct {
+	value *Destination
+	isSet bool
+}
+
+func (v NullableDestination) Get() *Destination {
+	return v.value
+}
+
+func (v *NullableDestination) Set(val *Destination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDestination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDestination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDestination(val *Destination) *NullableDestination {
+	return &NullableDestination{value: val, isSet: true}
+}
+
+func (v NullableDestination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDestination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/detection_result.go b/pkg/infobip/models/voice/detection_result.go
new file mode 100644
index 0000000..1bbfd04
--- /dev/null
+++ b/pkg/infobip/models/voice/detection_result.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// DetectionResult Detected entity that answered the call. `UNKNOWN` if unable to detect.
+type DetectionResult string
+
+// List of DetectionResult
+const (
+	DETECTIONRESULT_HUMAN   DetectionResult = "HUMAN"
+	DETECTIONRESULT_MACHINE DetectionResult = "MACHINE"
+	DETECTIONRESULT_UNKNOWN DetectionResult = "UNKNOWN"
+)
+
+// All allowed values of DetectionResult enum
+var AllowedDetectionResultEnumValues = []DetectionResult{
+	"HUMAN",
+	"MACHINE",
+	"UNKNOWN",
+}
+
+func (v *DetectionResult) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := DetectionResult(value)
+	for _, existing := range AllowedDetectionResultEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid DetectionResult", value)
+}
+
+// NewDetectionResultFromValue returns a pointer to a valid DetectionResult
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewDetectionResultFromValue(v string) (*DetectionResult, error) {
+	ev := DetectionResult(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for DetectionResult: valid values are %v", v, AllowedDetectionResultEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v DetectionResult) IsValid() bool {
+	for _, existing := range AllowedDetectionResultEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to DetectionResult value
+func (v DetectionResult) Ptr() *DetectionResult {
+	return &v
+}
+
+type NullableDetectionResult struct {
+	value *DetectionResult
+	isSet bool
+}
+
+func (v NullableDetectionResult) Get() *DetectionResult {
+	return v.value
+}
+
+func (v *NullableDetectionResult) Set(val *DetectionResult) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDetectionResult) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDetectionResult) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDetectionResult(val *DetectionResult) *NullableDetectionResult {
+	return &NullableDetectionResult{value: val, isSet: true}
+}
+
+func (v NullableDetectionResult) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDetectionResult) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial.go b/pkg/infobip/models/voice/dial.go
new file mode 100644
index 0000000..b755098
--- /dev/null
+++ b/pkg/infobip/models/voice/dial.go
@@ -0,0 +1,195 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Dial type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Dial{}
+
+// Dial Dial action performs a call redirection, joining the user's call with another destination. After Dial action the following actions are forbidden: Say, Collect, Dial, Dial to Many, Dial to WebRTC, Dial to SIP trunk, Dial to Conversations, Play, Record and Play from Recording.
+type Dial struct {
+	// must be a valid E164 MSISDN; the parameter can be constructed using variables
+	Dial    string
+	Options *DialOptions
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Dial Dial
+
+// NewDial instantiates a new Dial object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDial(dial string) *Dial {
+	this := Dial{}
+	this.Dial = dial
+	return &this
+}
+
+// NewDialWithDefaults instantiates a new Dial object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialWithDefaults() *Dial {
+	this := Dial{}
+
+	return &this
+}
+
+// GetDial returns the Dial field value
+func (o *Dial) GetDial() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Dial
+}
+
+// GetDialOk returns a tuple with the Dial field value
+// and a boolean to check if the value has been set.
+func (o *Dial) GetDialOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Dial, true
+}
+
+// SetDial sets field value
+func (o *Dial) SetDial(v string) {
+	o.Dial = v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *Dial) GetOptions() DialOptions {
+	if o == nil || IsNil(o.Options) {
+		var ret DialOptions
+		return ret
+	}
+	return *o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Dial) GetOptionsOk() (*DialOptions, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *Dial) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given DialOptions and assigns it to the Options field.
+func (o *Dial) SetOptions(v DialOptions) {
+	o.Options = &v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Dial) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Dial) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Dial) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Dial) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Dial) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Dial) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["dial"] = o.Dial
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableDial struct {
+	value *Dial
+	isSet bool
+}
+
+func (v NullableDial) Get() *Dial {
+	return v.value
+}
+
+func (v *NullableDial) Set(val *Dial) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDial) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDial) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDial(val *Dial) *NullableDial {
+	return &NullableDial{value: val, isSet: true}
+}
+
+func (v NullableDial) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDial) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_callback_response.go b/pkg/infobip/models/voice/dial_callback_response.go
new file mode 100644
index 0000000..489f976
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_callback_response.go
@@ -0,0 +1,285 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialCallbackResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialCallbackResponse{}
+
+// DialCallbackResponse struct for DialCallbackResponse
+type DialCallbackResponse struct {
+	Command string
+	// Destination phone number to call.
+	PhoneNumber string
+	// Caller ID displayed to a called party.
+	CallerId      string
+	Announcements *Announcements
+	Recording     *CallsRecording
+	// A user-defined reference ID for associating with a number masking session. This ID will appear in subsequent status requests and, if the session is recorded and our SFTP facility is used, will name the recording file. **Note:** In the case of recording, please limit this field to `200` characters as generated file name uses this field, call ID and extension, and if total file name is bigger than 256 characters, saving of the recording file will fail.
+	ClientReferenceId *string
+}
+
+type _DialCallbackResponse DialCallbackResponse
+
+// NewDialCallbackResponse instantiates a new DialCallbackResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewDialCallbackResponse(phoneNumber string, callerId string) *DialCallbackResponse {
+	this := DialCallbackResponse{}
+	this.Command = "dial"
+	this.PhoneNumber = phoneNumber
+	this.CallerId = callerId
+	return &this
+}
+
+// NewDialCallbackResponseWithDefaults instantiates a new DialCallbackResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialCallbackResponseWithDefaults() *DialCallbackResponse {
+	this := DialCallbackResponse{}
+	this.Command = "dial"
+	return &this
+}
+
+// GetCommand returns the Command field value
+func (o *DialCallbackResponse) GetCommand() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Command
+}
+
+// GetCommandOk returns a tuple with the Command field value
+// and a boolean to check if the value has been set.
+func (o *DialCallbackResponse) GetCommandOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Command, true
+}
+
+// SetCommand sets field value
+func (o *DialCallbackResponse) SetCommand(v string) {
+	o.Command = v
+}
+
+// GetPhoneNumber returns the PhoneNumber field value
+func (o *DialCallbackResponse) GetPhoneNumber() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value
+// and a boolean to check if the value has been set.
+func (o *DialCallbackResponse) GetPhoneNumberOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PhoneNumber, true
+}
+
+// SetPhoneNumber sets field value
+func (o *DialCallbackResponse) SetPhoneNumber(v string) {
+	o.PhoneNumber = v
+}
+
+// GetCallerId returns the CallerId field value
+func (o *DialCallbackResponse) GetCallerId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CallerId
+}
+
+// GetCallerIdOk returns a tuple with the CallerId field value
+// and a boolean to check if the value has been set.
+func (o *DialCallbackResponse) GetCallerIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CallerId, true
+}
+
+// SetCallerId sets field value
+func (o *DialCallbackResponse) SetCallerId(v string) {
+	o.CallerId = v
+}
+
+// GetAnnouncements returns the Announcements field value if set, zero value otherwise.
+func (o *DialCallbackResponse) GetAnnouncements() Announcements {
+	if o == nil || IsNil(o.Announcements) {
+		var ret Announcements
+		return ret
+	}
+	return *o.Announcements
+}
+
+// GetAnnouncementsOk returns a tuple with the Announcements field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialCallbackResponse) GetAnnouncementsOk() (*Announcements, bool) {
+	if o == nil || IsNil(o.Announcements) {
+		return nil, false
+	}
+	return o.Announcements, true
+}
+
+// HasAnnouncements returns a boolean if a field has been set.
+func (o *DialCallbackResponse) HasAnnouncements() bool {
+	if o != nil && !IsNil(o.Announcements) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnnouncements gets a reference to the given Announcements and assigns it to the Announcements field.
+func (o *DialCallbackResponse) SetAnnouncements(v Announcements) {
+	o.Announcements = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *DialCallbackResponse) GetRecording() CallsRecording {
+	if o == nil || IsNil(o.Recording) {
+		var ret CallsRecording
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialCallbackResponse) GetRecordingOk() (*CallsRecording, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *DialCallbackResponse) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given CallsRecording and assigns it to the Recording field.
+func (o *DialCallbackResponse) SetRecording(v CallsRecording) {
+	o.Recording = &v
+}
+
+// GetClientReferenceId returns the ClientReferenceId field value if set, zero value otherwise.
+func (o *DialCallbackResponse) GetClientReferenceId() string {
+	if o == nil || IsNil(o.ClientReferenceId) {
+		var ret string
+		return ret
+	}
+	return *o.ClientReferenceId
+}
+
+// GetClientReferenceIdOk returns a tuple with the ClientReferenceId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialCallbackResponse) GetClientReferenceIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ClientReferenceId) {
+		return nil, false
+	}
+	return o.ClientReferenceId, true
+}
+
+// HasClientReferenceId returns a boolean if a field has been set.
+func (o *DialCallbackResponse) HasClientReferenceId() bool {
+	if o != nil && !IsNil(o.ClientReferenceId) {
+		return true
+	}
+
+	return false
+}
+
+// SetClientReferenceId gets a reference to the given string and assigns it to the ClientReferenceId field.
+func (o *DialCallbackResponse) SetClientReferenceId(v string) {
+	o.ClientReferenceId = &v
+}
+
+func (o DialCallbackResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialCallbackResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["command"] = o.Command
+	toSerialize["phoneNumber"] = o.PhoneNumber
+	toSerialize["callerId"] = o.CallerId
+	if !IsNil(o.Announcements) {
+		toSerialize["announcements"] = o.Announcements
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.ClientReferenceId) {
+		toSerialize["clientReferenceId"] = o.ClientReferenceId
+	}
+	return toSerialize, nil
+}
+
+type NullableDialCallbackResponse struct {
+	value *DialCallbackResponse
+	isSet bool
+}
+
+func (v NullableDialCallbackResponse) Get() *DialCallbackResponse {
+	return v.value
+}
+
+func (v *NullableDialCallbackResponse) Set(val *DialCallbackResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialCallbackResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialCallbackResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialCallbackResponse(val *DialCallbackResponse) *NullableDialCallbackResponse {
+	return &NullableDialCallbackResponse{value: val, isSet: true}
+}
+
+func (v NullableDialCallbackResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialCallbackResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_options.go b/pkg/infobip/models/voice/dial_options.go
new file mode 100644
index 0000000..ba22e89
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_options.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialOptions{}
+
+// DialOptions struct for DialOptions
+type DialOptions struct {
+	// must be a valid E164 MSISDN; the parameter can be constructed using variables
+	SenderId *string
+	// If set, call transfer will be limited by maxCallDuration seconds, must be a positive number, no upper bound.
+	MaxCallDuration *int32
+}
+
+// NewDialOptions instantiates a new DialOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialOptions() *DialOptions {
+	this := DialOptions{}
+	return &this
+}
+
+// NewDialOptionsWithDefaults instantiates a new DialOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialOptionsWithDefaults() *DialOptions {
+	this := DialOptions{}
+
+	return &this
+}
+
+// GetSenderId returns the SenderId field value if set, zero value otherwise.
+func (o *DialOptions) GetSenderId() string {
+	if o == nil || IsNil(o.SenderId) {
+		var ret string
+		return ret
+	}
+	return *o.SenderId
+}
+
+// GetSenderIdOk returns a tuple with the SenderId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialOptions) GetSenderIdOk() (*string, bool) {
+	if o == nil || IsNil(o.SenderId) {
+		return nil, false
+	}
+	return o.SenderId, true
+}
+
+// HasSenderId returns a boolean if a field has been set.
+func (o *DialOptions) HasSenderId() bool {
+	if o != nil && !IsNil(o.SenderId) {
+		return true
+	}
+
+	return false
+}
+
+// SetSenderId gets a reference to the given string and assigns it to the SenderId field.
+func (o *DialOptions) SetSenderId(v string) {
+	o.SenderId = &v
+}
+
+// GetMaxCallDuration returns the MaxCallDuration field value if set, zero value otherwise.
+func (o *DialOptions) GetMaxCallDuration() int32 {
+	if o == nil || IsNil(o.MaxCallDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxCallDuration
+}
+
+// GetMaxCallDurationOk returns a tuple with the MaxCallDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialOptions) GetMaxCallDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxCallDuration) {
+		return nil, false
+	}
+	return o.MaxCallDuration, true
+}
+
+// HasMaxCallDuration returns a boolean if a field has been set.
+func (o *DialOptions) HasMaxCallDuration() bool {
+	if o != nil && !IsNil(o.MaxCallDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxCallDuration gets a reference to the given int32 and assigns it to the MaxCallDuration field.
+func (o *DialOptions) SetMaxCallDuration(v int32) {
+	o.MaxCallDuration = &v
+}
+
+func (o DialOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.SenderId) {
+		toSerialize["senderId"] = o.SenderId
+	}
+	if !IsNil(o.MaxCallDuration) {
+		toSerialize["maxCallDuration"] = o.MaxCallDuration
+	}
+	return toSerialize, nil
+}
+
+type NullableDialOptions struct {
+	value *DialOptions
+	isSet bool
+}
+
+func (v NullableDialOptions) Get() *DialOptions {
+	return v.value
+}
+
+func (v *NullableDialOptions) Set(val *DialOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialOptions(val *DialOptions) *NullableDialOptions {
+	return &NullableDialOptions{value: val, isSet: true}
+}
+
+func (v NullableDialOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_to_conversations.go b/pkg/infobip/models/voice/dial_to_conversations.go
new file mode 100644
index 0000000..076edcf
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_to_conversations.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialToConversations type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialToConversations{}
+
+// DialToConversations Dial to Conversations action performs a call redirection to the [Infobip Conversations platform](https://www.infobip.com/docs/conversations), joining the user’s call with an agent. After Dial to Conversations action the following actions are forbidden: Say, Collect, Dial, Dial to Many, Dial to WebRTC, Dial to SIP trunk, Dial to Conversations, Play, Record and Play from Recording.
+type DialToConversations struct {
+	DialToConversations DialToConversationsData
+}
+
+type _DialToConversations DialToConversations
+
+// NewDialToConversations instantiates a new DialToConversations object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialToConversations(dialToConversations DialToConversationsData) *DialToConversations {
+	this := DialToConversations{}
+	this.DialToConversations = dialToConversations
+	return &this
+}
+
+// NewDialToConversationsWithDefaults instantiates a new DialToConversations object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialToConversationsWithDefaults() *DialToConversations {
+	this := DialToConversations{}
+
+	return &this
+}
+
+// GetDialToConversations returns the DialToConversations field value
+func (o *DialToConversations) GetDialToConversations() DialToConversationsData {
+	if o == nil {
+		var ret DialToConversationsData
+		return ret
+	}
+
+	return o.DialToConversations
+}
+
+// GetDialToConversationsOk returns a tuple with the DialToConversations field value
+// and a boolean to check if the value has been set.
+func (o *DialToConversations) GetDialToConversationsOk() (*DialToConversationsData, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DialToConversations, true
+}
+
+// SetDialToConversations sets field value
+func (o *DialToConversations) SetDialToConversations(v DialToConversationsData) {
+	o.DialToConversations = v
+}
+
+func (o DialToConversations) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialToConversations) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["dialToConversations"] = o.DialToConversations
+	return toSerialize, nil
+}
+
+type NullableDialToConversations struct {
+	value *DialToConversations
+	isSet bool
+}
+
+func (v NullableDialToConversations) Get() *DialToConversations {
+	return v.value
+}
+
+func (v *NullableDialToConversations) Set(val *DialToConversations) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialToConversations) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialToConversations) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialToConversations(val *DialToConversations) *NullableDialToConversations {
+	return &NullableDialToConversations{value: val, isSet: true}
+}
+
+func (v NullableDialToConversations) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialToConversations) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_to_conversations_data.go b/pkg/infobip/models/voice/dial_to_conversations_data.go
new file mode 100644
index 0000000..3f11380
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_to_conversations_data.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialToConversationsData type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialToConversationsData{}
+
+// DialToConversationsData struct for DialToConversationsData
+type DialToConversationsData struct {
+	Options DialToConversationsOptions
+}
+
+type _DialToConversationsData DialToConversationsData
+
+// NewDialToConversationsData instantiates a new DialToConversationsData object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialToConversationsData(options DialToConversationsOptions) *DialToConversationsData {
+	this := DialToConversationsData{}
+	this.Options = options
+	return &this
+}
+
+// NewDialToConversationsDataWithDefaults instantiates a new DialToConversationsData object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialToConversationsDataWithDefaults() *DialToConversationsData {
+	this := DialToConversationsData{}
+
+	return &this
+}
+
+// GetOptions returns the Options field value
+func (o *DialToConversationsData) GetOptions() DialToConversationsOptions {
+	if o == nil {
+		var ret DialToConversationsOptions
+		return ret
+	}
+
+	return o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value
+// and a boolean to check if the value has been set.
+func (o *DialToConversationsData) GetOptionsOk() (*DialToConversationsOptions, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Options, true
+}
+
+// SetOptions sets field value
+func (o *DialToConversationsData) SetOptions(v DialToConversationsOptions) {
+	o.Options = v
+}
+
+func (o DialToConversationsData) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialToConversationsData) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["options"] = o.Options
+	return toSerialize, nil
+}
+
+type NullableDialToConversationsData struct {
+	value *DialToConversationsData
+	isSet bool
+}
+
+func (v NullableDialToConversationsData) Get() *DialToConversationsData {
+	return v.value
+}
+
+func (v *NullableDialToConversationsData) Set(val *DialToConversationsData) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialToConversationsData) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialToConversationsData) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialToConversationsData(val *DialToConversationsData) *NullableDialToConversationsData {
+	return &NullableDialToConversationsData{value: val, isSet: true}
+}
+
+func (v NullableDialToConversationsData) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialToConversationsData) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_to_conversations_options.go b/pkg/infobip/models/voice/dial_to_conversations_options.go
new file mode 100644
index 0000000..21cfb0b
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_to_conversations_options.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialToConversationsOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialToConversationsOptions{}
+
+// DialToConversationsOptions struct for DialToConversationsOptions
+type DialToConversationsOptions struct {
+	TagIdentifierType *TagIdentifierType
+	// An array of [conversation tag](https://www.infobip.com/docs/conversations/get-to-know-conversations#tags-templates-and-tags) names or ids that are assigned to this conversation for better categorization of the topics or customer intent. Value can be an array of tag names/ids, empty array, or null value.
+	Tags []string
+}
+
+type _DialToConversationsOptions DialToConversationsOptions
+
+// NewDialToConversationsOptions instantiates a new DialToConversationsOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialToConversationsOptions(tags []string) *DialToConversationsOptions {
+	this := DialToConversationsOptions{}
+	this.Tags = tags
+	return &this
+}
+
+// NewDialToConversationsOptionsWithDefaults instantiates a new DialToConversationsOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialToConversationsOptionsWithDefaults() *DialToConversationsOptions {
+	this := DialToConversationsOptions{}
+
+	return &this
+}
+
+// GetTagIdentifierType returns the TagIdentifierType field value if set, zero value otherwise.
+func (o *DialToConversationsOptions) GetTagIdentifierType() TagIdentifierType {
+	if o == nil || IsNil(o.TagIdentifierType) {
+		var ret TagIdentifierType
+		return ret
+	}
+	return *o.TagIdentifierType
+}
+
+// GetTagIdentifierTypeOk returns a tuple with the TagIdentifierType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToConversationsOptions) GetTagIdentifierTypeOk() (*TagIdentifierType, bool) {
+	if o == nil || IsNil(o.TagIdentifierType) {
+		return nil, false
+	}
+	return o.TagIdentifierType, true
+}
+
+// HasTagIdentifierType returns a boolean if a field has been set.
+func (o *DialToConversationsOptions) HasTagIdentifierType() bool {
+	if o != nil && !IsNil(o.TagIdentifierType) {
+		return true
+	}
+
+	return false
+}
+
+// SetTagIdentifierType gets a reference to the given TagIdentifierType and assigns it to the TagIdentifierType field.
+func (o *DialToConversationsOptions) SetTagIdentifierType(v TagIdentifierType) {
+	o.TagIdentifierType = &v
+}
+
+// GetTags returns the Tags field value
+func (o *DialToConversationsOptions) GetTags() []string {
+	if o == nil {
+		var ret []string
+		return ret
+	}
+
+	return o.Tags
+}
+
+// GetTagsOk returns a tuple with the Tags field value
+// and a boolean to check if the value has been set.
+func (o *DialToConversationsOptions) GetTagsOk() ([]string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Tags, true
+}
+
+// SetTags sets field value
+func (o *DialToConversationsOptions) SetTags(v []string) {
+	o.Tags = v
+}
+
+func (o DialToConversationsOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialToConversationsOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.TagIdentifierType) {
+		toSerialize["tagIdentifierType"] = o.TagIdentifierType
+	}
+	toSerialize["tags"] = o.Tags
+	return toSerialize, nil
+}
+
+type NullableDialToConversationsOptions struct {
+	value *DialToConversationsOptions
+	isSet bool
+}
+
+func (v NullableDialToConversationsOptions) Get() *DialToConversationsOptions {
+	return v.value
+}
+
+func (v *NullableDialToConversationsOptions) Set(val *DialToConversationsOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialToConversationsOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialToConversationsOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialToConversationsOptions(val *DialToConversationsOptions) *NullableDialToConversationsOptions {
+	return &NullableDialToConversationsOptions{value: val, isSet: true}
+}
+
+func (v NullableDialToConversationsOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialToConversationsOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_to_many.go b/pkg/infobip/models/voice/dial_to_many.go
new file mode 100644
index 0000000..8fed8c3
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_to_many.go
@@ -0,0 +1,194 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialToMany type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialToMany{}
+
+// DialToMany Dial to Many action performs a call redirection to multiple destinations, joining the user’s call only with the destination that answered the call first. After Dial to Many action the following actions are forbidden: Say, Collect, Dial, Dial to Many, Dial to WebRTC, Dial to SIP trunk, Dial to Conversations, Play, Record and Play from Recording.
+type DialToMany struct {
+	DialToMany []Numbers
+	Options    *DialToManyOptions
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _DialToMany DialToMany
+
+// NewDialToMany instantiates a new DialToMany object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialToMany(dialToMany []Numbers) *DialToMany {
+	this := DialToMany{}
+	this.DialToMany = dialToMany
+	return &this
+}
+
+// NewDialToManyWithDefaults instantiates a new DialToMany object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialToManyWithDefaults() *DialToMany {
+	this := DialToMany{}
+
+	return &this
+}
+
+// GetDialToMany returns the DialToMany field value
+func (o *DialToMany) GetDialToMany() []Numbers {
+	if o == nil {
+		var ret []Numbers
+		return ret
+	}
+
+	return o.DialToMany
+}
+
+// GetDialToManyOk returns a tuple with the DialToMany field value
+// and a boolean to check if the value has been set.
+func (o *DialToMany) GetDialToManyOk() ([]Numbers, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.DialToMany, true
+}
+
+// SetDialToMany sets field value
+func (o *DialToMany) SetDialToMany(v []Numbers) {
+	o.DialToMany = v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *DialToMany) GetOptions() DialToManyOptions {
+	if o == nil || IsNil(o.Options) {
+		var ret DialToManyOptions
+		return ret
+	}
+	return *o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToMany) GetOptionsOk() (*DialToManyOptions, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *DialToMany) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given DialToManyOptions and assigns it to the Options field.
+func (o *DialToMany) SetOptions(v DialToManyOptions) {
+	o.Options = &v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *DialToMany) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToMany) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *DialToMany) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *DialToMany) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o DialToMany) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialToMany) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["dialToMany"] = o.DialToMany
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableDialToMany struct {
+	value *DialToMany
+	isSet bool
+}
+
+func (v NullableDialToMany) Get() *DialToMany {
+	return v.value
+}
+
+func (v *NullableDialToMany) Set(val *DialToMany) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialToMany) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialToMany) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialToMany(val *DialToMany) *NullableDialToMany {
+	return &NullableDialToMany{value: val, isSet: true}
+}
+
+func (v NullableDialToMany) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialToMany) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_to_many_options.go b/pkg/infobip/models/voice/dial_to_many_options.go
new file mode 100644
index 0000000..8c45018
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_to_many_options.go
@@ -0,0 +1,240 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialToManyOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialToManyOptions{}
+
+// DialToManyOptions struct for DialToManyOptions
+type DialToManyOptions struct {
+	// Flag indicating that parallel (true), or sequential (false) Dial to Many will be executed.
+	Parallel *bool
+	// Must be a valid E164 MSISDN; the parameter can be constructed using variables
+	SenderId *string
+	// If set, call transfer will be limited by maxCallDuration seconds; must be a positive number, no upper bound.
+	MaxCallDuration *int32
+	// If set limits the duration of the ringing of transferred calls in seconds. The default value is 30 seconds. This parameter can be changed only for sequential calls.
+	RingTimeout *int32
+}
+
+// NewDialToManyOptions instantiates a new DialToManyOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialToManyOptions() *DialToManyOptions {
+	this := DialToManyOptions{}
+	return &this
+}
+
+// NewDialToManyOptionsWithDefaults instantiates a new DialToManyOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialToManyOptionsWithDefaults() *DialToManyOptions {
+	this := DialToManyOptions{}
+
+	return &this
+}
+
+// GetParallel returns the Parallel field value if set, zero value otherwise.
+func (o *DialToManyOptions) GetParallel() bool {
+	if o == nil || IsNil(o.Parallel) {
+		var ret bool
+		return ret
+	}
+	return *o.Parallel
+}
+
+// GetParallelOk returns a tuple with the Parallel field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToManyOptions) GetParallelOk() (*bool, bool) {
+	if o == nil || IsNil(o.Parallel) {
+		return nil, false
+	}
+	return o.Parallel, true
+}
+
+// HasParallel returns a boolean if a field has been set.
+func (o *DialToManyOptions) HasParallel() bool {
+	if o != nil && !IsNil(o.Parallel) {
+		return true
+	}
+
+	return false
+}
+
+// SetParallel gets a reference to the given bool and assigns it to the Parallel field.
+func (o *DialToManyOptions) SetParallel(v bool) {
+	o.Parallel = &v
+}
+
+// GetSenderId returns the SenderId field value if set, zero value otherwise.
+func (o *DialToManyOptions) GetSenderId() string {
+	if o == nil || IsNil(o.SenderId) {
+		var ret string
+		return ret
+	}
+	return *o.SenderId
+}
+
+// GetSenderIdOk returns a tuple with the SenderId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToManyOptions) GetSenderIdOk() (*string, bool) {
+	if o == nil || IsNil(o.SenderId) {
+		return nil, false
+	}
+	return o.SenderId, true
+}
+
+// HasSenderId returns a boolean if a field has been set.
+func (o *DialToManyOptions) HasSenderId() bool {
+	if o != nil && !IsNil(o.SenderId) {
+		return true
+	}
+
+	return false
+}
+
+// SetSenderId gets a reference to the given string and assigns it to the SenderId field.
+func (o *DialToManyOptions) SetSenderId(v string) {
+	o.SenderId = &v
+}
+
+// GetMaxCallDuration returns the MaxCallDuration field value if set, zero value otherwise.
+func (o *DialToManyOptions) GetMaxCallDuration() int32 {
+	if o == nil || IsNil(o.MaxCallDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxCallDuration
+}
+
+// GetMaxCallDurationOk returns a tuple with the MaxCallDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToManyOptions) GetMaxCallDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxCallDuration) {
+		return nil, false
+	}
+	return o.MaxCallDuration, true
+}
+
+// HasMaxCallDuration returns a boolean if a field has been set.
+func (o *DialToManyOptions) HasMaxCallDuration() bool {
+	if o != nil && !IsNil(o.MaxCallDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxCallDuration gets a reference to the given int32 and assigns it to the MaxCallDuration field.
+func (o *DialToManyOptions) SetMaxCallDuration(v int32) {
+	o.MaxCallDuration = &v
+}
+
+// GetRingTimeout returns the RingTimeout field value if set, zero value otherwise.
+func (o *DialToManyOptions) GetRingTimeout() int32 {
+	if o == nil || IsNil(o.RingTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.RingTimeout
+}
+
+// GetRingTimeoutOk returns a tuple with the RingTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialToManyOptions) GetRingTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.RingTimeout) {
+		return nil, false
+	}
+	return o.RingTimeout, true
+}
+
+// HasRingTimeout returns a boolean if a field has been set.
+func (o *DialToManyOptions) HasRingTimeout() bool {
+	if o != nil && !IsNil(o.RingTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingTimeout gets a reference to the given int32 and assigns it to the RingTimeout field.
+func (o *DialToManyOptions) SetRingTimeout(v int32) {
+	o.RingTimeout = &v
+}
+
+func (o DialToManyOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialToManyOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Parallel) {
+		toSerialize["parallel"] = o.Parallel
+	}
+	if !IsNil(o.SenderId) {
+		toSerialize["senderId"] = o.SenderId
+	}
+	if !IsNil(o.MaxCallDuration) {
+		toSerialize["maxCallDuration"] = o.MaxCallDuration
+	}
+	if !IsNil(o.RingTimeout) {
+		toSerialize["ringTimeout"] = o.RingTimeout
+	}
+	return toSerialize, nil
+}
+
+type NullableDialToManyOptions struct {
+	value *DialToManyOptions
+	isSet bool
+}
+
+func (v NullableDialToManyOptions) Get() *DialToManyOptions {
+	return v.value
+}
+
+func (v *NullableDialToManyOptions) Set(val *DialToManyOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialToManyOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialToManyOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialToManyOptions(val *DialToManyOptions) *NullableDialToManyOptions {
+	return &NullableDialToManyOptions{value: val, isSet: true}
+}
+
+func (v NullableDialToManyOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialToManyOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dial_to_web_rtc.go b/pkg/infobip/models/voice/dial_to_web_rtc.go
new file mode 100644
index 0000000..f19dcb1
--- /dev/null
+++ b/pkg/infobip/models/voice/dial_to_web_rtc.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialToWebRTC type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialToWebRTC{}
+
+// DialToWebRTC Dial to WebRTC action performs a call redirection to WebRTC application, joining the user’s call with the WebRTC application. After Dial to WebRTC action the following actions are forbidden: Say, Collect, Dial, Dial to Many, Dial to WebRTC, Dial to SIP trunk, Dial to Conversations, Play, Record and Play from Recording.
+type DialToWebRTC struct {
+	// Web and in-app calls applicationId. Read more about Web and in-app calls [here](https://www.infobip.com/docs/voice-and-video/web-and-in-app-calls)
+	DialToWebRTC string
+}
+
+type _DialToWebRTC DialToWebRTC
+
+// NewDialToWebRTC instantiates a new DialToWebRTC object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialToWebRTC(dialToWebRTC string) *DialToWebRTC {
+	this := DialToWebRTC{}
+	this.DialToWebRTC = dialToWebRTC
+	return &this
+}
+
+// NewDialToWebRTCWithDefaults instantiates a new DialToWebRTC object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialToWebRTCWithDefaults() *DialToWebRTC {
+	this := DialToWebRTC{}
+
+	return &this
+}
+
+// GetDialToWebRTC returns the DialToWebRTC field value
+func (o *DialToWebRTC) GetDialToWebRTC() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.DialToWebRTC
+}
+
+// GetDialToWebRTCOk returns a tuple with the DialToWebRTC field value
+// and a boolean to check if the value has been set.
+func (o *DialToWebRTC) GetDialToWebRTCOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.DialToWebRTC, true
+}
+
+// SetDialToWebRTC sets field value
+func (o *DialToWebRTC) SetDialToWebRTC(v string) {
+	o.DialToWebRTC = v
+}
+
+func (o DialToWebRTC) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialToWebRTC) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["dialToWebRTC"] = o.DialToWebRTC
+	return toSerialize, nil
+}
+
+type NullableDialToWebRTC struct {
+	value *DialToWebRTC
+	isSet bool
+}
+
+func (v NullableDialToWebRTC) Get() *DialToWebRTC {
+	return v.value
+}
+
+func (v *NullableDialToWebRTC) Set(val *DialToWebRTC) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialToWebRTC) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialToWebRTC) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialToWebRTC(val *DialToWebRTC) *NullableDialToWebRTC {
+	return &NullableDialToWebRTC{value: val, isSet: true}
+}
+
+func (v NullableDialToWebRTC) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialToWebRTC) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_broadcast_webrtc_text_request.go b/pkg/infobip/models/voice/dialog_broadcast_webrtc_text_request.go
new file mode 100644
index 0000000..18b026d
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_broadcast_webrtc_text_request.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogBroadcastWebrtcTextRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogBroadcastWebrtcTextRequest{}
+
+// DialogBroadcastWebrtcTextRequest struct for DialogBroadcastWebrtcTextRequest
+type DialogBroadcastWebrtcTextRequest struct {
+	// Text to broadcast.
+	Text *string
+}
+
+// NewDialogBroadcastWebrtcTextRequest instantiates a new DialogBroadcastWebrtcTextRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogBroadcastWebrtcTextRequest() *DialogBroadcastWebrtcTextRequest {
+	this := DialogBroadcastWebrtcTextRequest{}
+	return &this
+}
+
+// NewDialogBroadcastWebrtcTextRequestWithDefaults instantiates a new DialogBroadcastWebrtcTextRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogBroadcastWebrtcTextRequestWithDefaults() *DialogBroadcastWebrtcTextRequest {
+	this := DialogBroadcastWebrtcTextRequest{}
+
+	return &this
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *DialogBroadcastWebrtcTextRequest) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogBroadcastWebrtcTextRequest) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *DialogBroadcastWebrtcTextRequest) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *DialogBroadcastWebrtcTextRequest) SetText(v string) {
+	o.Text = &v
+}
+
+func (o DialogBroadcastWebrtcTextRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogBroadcastWebrtcTextRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogBroadcastWebrtcTextRequest struct {
+	value *DialogBroadcastWebrtcTextRequest
+	isSet bool
+}
+
+func (v NullableDialogBroadcastWebrtcTextRequest) Get() *DialogBroadcastWebrtcTextRequest {
+	return v.value
+}
+
+func (v *NullableDialogBroadcastWebrtcTextRequest) Set(val *DialogBroadcastWebrtcTextRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogBroadcastWebrtcTextRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogBroadcastWebrtcTextRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogBroadcastWebrtcTextRequest(val *DialogBroadcastWebrtcTextRequest) *NullableDialogBroadcastWebrtcTextRequest {
+	return &NullableDialogBroadcastWebrtcTextRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogBroadcastWebrtcTextRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogBroadcastWebrtcTextRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_call_request.go b/pkg/infobip/models/voice/dialog_call_request.go
new file mode 100644
index 0000000..18385cf
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_call_request.go
@@ -0,0 +1,305 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogCallRequest{}
+
+// DialogCallRequest struct for DialogCallRequest
+type DialogCallRequest struct {
+	Endpoint *CallEndpoint
+	// Caller identifier. Must be a number in the [E.164](https://en.wikipedia.org/wiki/E.164) format for calls to `PHONE`, a string for calls to `WEBRTC` or `SIP`, and a Viber Voice number for calls to `VIBER`.
+	From string
+	// Display name to show when placing calls towards WEBRTC endpoints. Can be any alphanumeric string.
+	FromDisplayName *string
+	// Time to wait, in seconds, before the called party answers the call.
+	ConnectTimeout   *int32
+	MachineDetection *MachineDetectionRequest
+	// Custom data is used for storing call-specific data defined by the client.
+	CustomData *map[string]string
+}
+
+type _DialogCallRequest DialogCallRequest
+
+// NewDialogCallRequest instantiates a new DialogCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogCallRequest(from string) *DialogCallRequest {
+	this := DialogCallRequest{}
+	this.From = from
+	return &this
+}
+
+// NewDialogCallRequestWithDefaults instantiates a new DialogCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogCallRequestWithDefaults() *DialogCallRequest {
+	this := DialogCallRequest{}
+
+	return &this
+}
+
+// GetEndpoint returns the Endpoint field value if set, zero value otherwise.
+func (o *DialogCallRequest) GetEndpoint() CallEndpoint {
+	if o == nil || IsNil(o.Endpoint) {
+		var ret CallEndpoint
+		return ret
+	}
+	return *o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogCallRequest) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil || IsNil(o.Endpoint) {
+		return nil, false
+	}
+	return o.Endpoint, true
+}
+
+// HasEndpoint returns a boolean if a field has been set.
+func (o *DialogCallRequest) HasEndpoint() bool {
+	if o != nil && !IsNil(o.Endpoint) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndpoint gets a reference to the given CallEndpoint and assigns it to the Endpoint field.
+func (o *DialogCallRequest) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = &v
+}
+
+// GetFrom returns the From field value
+func (o *DialogCallRequest) GetFrom() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.From
+}
+
+// GetFromOk returns a tuple with the From field value
+// and a boolean to check if the value has been set.
+func (o *DialogCallRequest) GetFromOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.From, true
+}
+
+// SetFrom sets field value
+func (o *DialogCallRequest) SetFrom(v string) {
+	o.From = v
+}
+
+// GetFromDisplayName returns the FromDisplayName field value if set, zero value otherwise.
+func (o *DialogCallRequest) GetFromDisplayName() string {
+	if o == nil || IsNil(o.FromDisplayName) {
+		var ret string
+		return ret
+	}
+	return *o.FromDisplayName
+}
+
+// GetFromDisplayNameOk returns a tuple with the FromDisplayName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogCallRequest) GetFromDisplayNameOk() (*string, bool) {
+	if o == nil || IsNil(o.FromDisplayName) {
+		return nil, false
+	}
+	return o.FromDisplayName, true
+}
+
+// HasFromDisplayName returns a boolean if a field has been set.
+func (o *DialogCallRequest) HasFromDisplayName() bool {
+	if o != nil && !IsNil(o.FromDisplayName) {
+		return true
+	}
+
+	return false
+}
+
+// SetFromDisplayName gets a reference to the given string and assigns it to the FromDisplayName field.
+func (o *DialogCallRequest) SetFromDisplayName(v string) {
+	o.FromDisplayName = &v
+}
+
+// GetConnectTimeout returns the ConnectTimeout field value if set, zero value otherwise.
+func (o *DialogCallRequest) GetConnectTimeout() int32 {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.ConnectTimeout
+}
+
+// GetConnectTimeoutOk returns a tuple with the ConnectTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogCallRequest) GetConnectTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.ConnectTimeout) {
+		return nil, false
+	}
+	return o.ConnectTimeout, true
+}
+
+// HasConnectTimeout returns a boolean if a field has been set.
+func (o *DialogCallRequest) HasConnectTimeout() bool {
+	if o != nil && !IsNil(o.ConnectTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetConnectTimeout gets a reference to the given int32 and assigns it to the ConnectTimeout field.
+func (o *DialogCallRequest) SetConnectTimeout(v int32) {
+	o.ConnectTimeout = &v
+}
+
+// GetMachineDetection returns the MachineDetection field value if set, zero value otherwise.
+func (o *DialogCallRequest) GetMachineDetection() MachineDetectionRequest {
+	if o == nil || IsNil(o.MachineDetection) {
+		var ret MachineDetectionRequest
+		return ret
+	}
+	return *o.MachineDetection
+}
+
+// GetMachineDetectionOk returns a tuple with the MachineDetection field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogCallRequest) GetMachineDetectionOk() (*MachineDetectionRequest, bool) {
+	if o == nil || IsNil(o.MachineDetection) {
+		return nil, false
+	}
+	return o.MachineDetection, true
+}
+
+// HasMachineDetection returns a boolean if a field has been set.
+func (o *DialogCallRequest) HasMachineDetection() bool {
+	if o != nil && !IsNil(o.MachineDetection) {
+		return true
+	}
+
+	return false
+}
+
+// SetMachineDetection gets a reference to the given MachineDetectionRequest and assigns it to the MachineDetection field.
+func (o *DialogCallRequest) SetMachineDetection(v MachineDetectionRequest) {
+	o.MachineDetection = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *DialogCallRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogCallRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *DialogCallRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *DialogCallRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o DialogCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Endpoint) {
+		toSerialize["endpoint"] = o.Endpoint
+	}
+	toSerialize["from"] = o.From
+	if !IsNil(o.FromDisplayName) {
+		toSerialize["fromDisplayName"] = o.FromDisplayName
+	}
+	if !IsNil(o.ConnectTimeout) {
+		toSerialize["connectTimeout"] = o.ConnectTimeout
+	}
+	if !IsNil(o.MachineDetection) {
+		toSerialize["machineDetection"] = o.MachineDetection
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogCallRequest struct {
+	value *DialogCallRequest
+	isSet bool
+}
+
+func (v NullableDialogCallRequest) Get() *DialogCallRequest {
+	return v.value
+}
+
+func (v *NullableDialogCallRequest) Set(val *DialogCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogCallRequest(val *DialogCallRequest) *NullableDialogCallRequest {
+	return &NullableDialogCallRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_log_page.go b/pkg/infobip/models/voice/dialog_log_page.go
new file mode 100644
index 0000000..6bd651d
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_log_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogLogPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogLogPage{}
+
+// DialogLogPage struct for DialogLogPage
+type DialogLogPage struct {
+	// The list of the results for this page.
+	Results []DialogLogResponse
+	Paging  *PageInfo
+}
+
+// NewDialogLogPage instantiates a new DialogLogPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogLogPage() *DialogLogPage {
+	this := DialogLogPage{}
+	return &this
+}
+
+// NewDialogLogPageWithDefaults instantiates a new DialogLogPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogLogPageWithDefaults() *DialogLogPage {
+	this := DialogLogPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *DialogLogPage) GetResults() []DialogLogResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []DialogLogResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogPage) GetResultsOk() ([]DialogLogResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *DialogLogPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []DialogLogResponse and assigns it to the Results field.
+func (o *DialogLogPage) SetResults(v []DialogLogResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *DialogLogPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *DialogLogPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *DialogLogPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o DialogLogPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogLogPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogLogPage struct {
+	value *DialogLogPage
+	isSet bool
+}
+
+func (v NullableDialogLogPage) Get() *DialogLogPage {
+	return v.value
+}
+
+func (v *NullableDialogLogPage) Set(val *DialogLogPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogLogPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogLogPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogLogPage(val *DialogLogPage) *NullableDialogLogPage {
+	return &NullableDialogLogPage{value: val, isSet: true}
+}
+
+func (v NullableDialogLogPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogLogPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_log_response.go b/pkg/infobip/models/voice/dialog_log_response.go
new file mode 100644
index 0000000..62563f9
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_log_response.go
@@ -0,0 +1,532 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogLogResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogLogResponse{}
+
+// DialogLogResponse struct for DialogLogResponse
+type DialogLogResponse struct {
+	// Unique dialog ID.
+	DialogId *string
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	State                *DialogState
+	// Date and time for when the dialog has been created.
+	StartTime *Time
+	// Date and time for when the dialog has been established.
+	EstablishTime *Time
+	// Date and time for when the dialog has been finished.
+	EndTime *Time
+	// Unique parent call ID.
+	ParentCallId *string
+	// Unique child call ID.
+	ChildCallId *string
+	// Dialog duration in seconds.
+	Duration  *int64
+	Recording *DialogRecordingLog
+	ErrorCode *ErrorCodeInfo
+}
+
+// NewDialogLogResponse instantiates a new DialogLogResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogLogResponse() *DialogLogResponse {
+	this := DialogLogResponse{}
+	return &this
+}
+
+// NewDialogLogResponseWithDefaults instantiates a new DialogLogResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogLogResponseWithDefaults() *DialogLogResponse {
+	this := DialogLogResponse{}
+
+	return &this
+}
+
+// GetDialogId returns the DialogId field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetDialogId() string {
+	if o == nil || IsNil(o.DialogId) {
+		var ret string
+		return ret
+	}
+	return *o.DialogId
+}
+
+// GetDialogIdOk returns a tuple with the DialogId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetDialogIdOk() (*string, bool) {
+	if o == nil || IsNil(o.DialogId) {
+		return nil, false
+	}
+	return o.DialogId, true
+}
+
+// HasDialogId returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasDialogId() bool {
+	if o != nil && !IsNil(o.DialogId) {
+		return true
+	}
+
+	return false
+}
+
+// SetDialogId gets a reference to the given string and assigns it to the DialogId field.
+func (o *DialogLogResponse) SetDialogId(v string) {
+	o.DialogId = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *DialogLogResponse) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *DialogLogResponse) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetState returns the State field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetState() DialogState {
+	if o == nil || IsNil(o.State) {
+		var ret DialogState
+		return ret
+	}
+	return *o.State
+}
+
+// GetStateOk returns a tuple with the State field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetStateOk() (*DialogState, bool) {
+	if o == nil || IsNil(o.State) {
+		return nil, false
+	}
+	return o.State, true
+}
+
+// HasState returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasState() bool {
+	if o != nil && !IsNil(o.State) {
+		return true
+	}
+
+	return false
+}
+
+// SetState gets a reference to the given DialogState and assigns it to the State field.
+func (o *DialogLogResponse) SetState(v DialogState) {
+	o.State = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *DialogLogResponse) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEstablishTime returns the EstablishTime field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetEstablishTime() Time {
+	if o == nil || IsNil(o.EstablishTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EstablishTime
+}
+
+// GetEstablishTimeOk returns a tuple with the EstablishTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetEstablishTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EstablishTime) {
+		return nil, false
+	}
+	return o.EstablishTime, true
+}
+
+// HasEstablishTime returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasEstablishTime() bool {
+	if o != nil && !IsNil(o.EstablishTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEstablishTime gets a reference to the given Time and assigns it to the EstablishTime field.
+func (o *DialogLogResponse) SetEstablishTime(v Time) {
+	o.EstablishTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *DialogLogResponse) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+// GetParentCallId returns the ParentCallId field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetParentCallId() string {
+	if o == nil || IsNil(o.ParentCallId) {
+		var ret string
+		return ret
+	}
+	return *o.ParentCallId
+}
+
+// GetParentCallIdOk returns a tuple with the ParentCallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetParentCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ParentCallId) {
+		return nil, false
+	}
+	return o.ParentCallId, true
+}
+
+// HasParentCallId returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasParentCallId() bool {
+	if o != nil && !IsNil(o.ParentCallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetParentCallId gets a reference to the given string and assigns it to the ParentCallId field.
+func (o *DialogLogResponse) SetParentCallId(v string) {
+	o.ParentCallId = &v
+}
+
+// GetChildCallId returns the ChildCallId field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetChildCallId() string {
+	if o == nil || IsNil(o.ChildCallId) {
+		var ret string
+		return ret
+	}
+	return *o.ChildCallId
+}
+
+// GetChildCallIdOk returns a tuple with the ChildCallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetChildCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ChildCallId) {
+		return nil, false
+	}
+	return o.ChildCallId, true
+}
+
+// HasChildCallId returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasChildCallId() bool {
+	if o != nil && !IsNil(o.ChildCallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetChildCallId gets a reference to the given string and assigns it to the ChildCallId field.
+func (o *DialogLogResponse) SetChildCallId(v string) {
+	o.ChildCallId = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetDuration() int64 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int64
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetDurationOk() (*int64, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int64 and assigns it to the Duration field.
+func (o *DialogLogResponse) SetDuration(v int64) {
+	o.Duration = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetRecording() DialogRecordingLog {
+	if o == nil || IsNil(o.Recording) {
+		var ret DialogRecordingLog
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetRecordingOk() (*DialogRecordingLog, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given DialogRecordingLog and assigns it to the Recording field.
+func (o *DialogLogResponse) SetRecording(v DialogRecordingLog) {
+	o.Recording = &v
+}
+
+// GetErrorCode returns the ErrorCode field value if set, zero value otherwise.
+func (o *DialogLogResponse) GetErrorCode() ErrorCodeInfo {
+	if o == nil || IsNil(o.ErrorCode) {
+		var ret ErrorCodeInfo
+		return ret
+	}
+	return *o.ErrorCode
+}
+
+// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogLogResponse) GetErrorCodeOk() (*ErrorCodeInfo, bool) {
+	if o == nil || IsNil(o.ErrorCode) {
+		return nil, false
+	}
+	return o.ErrorCode, true
+}
+
+// HasErrorCode returns a boolean if a field has been set.
+func (o *DialogLogResponse) HasErrorCode() bool {
+	if o != nil && !IsNil(o.ErrorCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorCode gets a reference to the given ErrorCodeInfo and assigns it to the ErrorCode field.
+func (o *DialogLogResponse) SetErrorCode(v ErrorCodeInfo) {
+	o.ErrorCode = &v
+}
+
+func (o DialogLogResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogLogResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DialogId) {
+		toSerialize["dialogId"] = o.DialogId
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.State) {
+		toSerialize["state"] = o.State
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EstablishTime) {
+		toSerialize["establishTime"] = o.EstablishTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.ParentCallId) {
+		toSerialize["parentCallId"] = o.ParentCallId
+	}
+	if !IsNil(o.ChildCallId) {
+		toSerialize["childCallId"] = o.ChildCallId
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.ErrorCode) {
+		toSerialize["errorCode"] = o.ErrorCode
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogLogResponse struct {
+	value *DialogLogResponse
+	isSet bool
+}
+
+func (v NullableDialogLogResponse) Get() *DialogLogResponse {
+	return v.value
+}
+
+func (v *NullableDialogLogResponse) Set(val *DialogLogResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogLogResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogLogResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogLogResponse(val *DialogLogResponse) *NullableDialogLogResponse {
+	return &NullableDialogLogResponse{value: val, isSet: true}
+}
+
+func (v NullableDialogLogResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogLogResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_page.go b/pkg/infobip/models/voice/dialog_page.go
new file mode 100644
index 0000000..eb079ee
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogPage{}
+
+// DialogPage struct for DialogPage
+type DialogPage struct {
+	// The list of the results for this page.
+	Results []DialogResponse
+	Paging  *PageInfo
+}
+
+// NewDialogPage instantiates a new DialogPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogPage() *DialogPage {
+	this := DialogPage{}
+	return &this
+}
+
+// NewDialogPageWithDefaults instantiates a new DialogPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogPageWithDefaults() *DialogPage {
+	this := DialogPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *DialogPage) GetResults() []DialogResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []DialogResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPage) GetResultsOk() ([]DialogResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *DialogPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []DialogResponse and assigns it to the Results field.
+func (o *DialogPage) SetResults(v []DialogResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *DialogPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *DialogPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *DialogPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o DialogPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogPage struct {
+	value *DialogPage
+	isSet bool
+}
+
+func (v NullableDialogPage) Get() *DialogPage {
+	return v.value
+}
+
+func (v *NullableDialogPage) Set(val *DialogPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogPage(val *DialogPage) *NullableDialogPage {
+	return &NullableDialogPage{value: val, isSet: true}
+}
+
+func (v NullableDialogPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_play_request.go b/pkg/infobip/models/voice/dialog_play_request.go
new file mode 100644
index 0000000..c9a10bc
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_play_request.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogPlayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogPlayRequest{}
+
+// DialogPlayRequest struct for DialogPlayRequest
+type DialogPlayRequest struct {
+	// Number of times the file will be played.
+	LoopCount *int32
+	Content   *PlayContent
+}
+
+// NewDialogPlayRequest instantiates a new DialogPlayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogPlayRequest() *DialogPlayRequest {
+	this := DialogPlayRequest{}
+	return &this
+}
+
+// NewDialogPlayRequestWithDefaults instantiates a new DialogPlayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogPlayRequestWithDefaults() *DialogPlayRequest {
+	this := DialogPlayRequest{}
+
+	return &this
+}
+
+// GetLoopCount returns the LoopCount field value if set, zero value otherwise.
+func (o *DialogPlayRequest) GetLoopCount() int32 {
+	if o == nil || IsNil(o.LoopCount) {
+		var ret int32
+		return ret
+	}
+	return *o.LoopCount
+}
+
+// GetLoopCountOk returns a tuple with the LoopCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPlayRequest) GetLoopCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.LoopCount) {
+		return nil, false
+	}
+	return o.LoopCount, true
+}
+
+// HasLoopCount returns a boolean if a field has been set.
+func (o *DialogPlayRequest) HasLoopCount() bool {
+	if o != nil && !IsNil(o.LoopCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetLoopCount gets a reference to the given int32 and assigns it to the LoopCount field.
+func (o *DialogPlayRequest) SetLoopCount(v int32) {
+	o.LoopCount = &v
+}
+
+// GetContent returns the Content field value if set, zero value otherwise.
+func (o *DialogPlayRequest) GetContent() PlayContent {
+	if o == nil || IsNil(o.Content) {
+		var ret PlayContent
+		return ret
+	}
+	return *o.Content
+}
+
+// GetContentOk returns a tuple with the Content field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPlayRequest) GetContentOk() (*PlayContent, bool) {
+	if o == nil || IsNil(o.Content) {
+		return nil, false
+	}
+	return o.Content, true
+}
+
+// HasContent returns a boolean if a field has been set.
+func (o *DialogPlayRequest) HasContent() bool {
+	if o != nil && !IsNil(o.Content) {
+		return true
+	}
+
+	return false
+}
+
+// SetContent gets a reference to the given PlayContent and assigns it to the Content field.
+func (o *DialogPlayRequest) SetContent(v PlayContent) {
+	o.Content = &v
+}
+
+func (o DialogPlayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogPlayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.LoopCount) {
+		toSerialize["loopCount"] = o.LoopCount
+	}
+	if !IsNil(o.Content) {
+		toSerialize["content"] = o.Content
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogPlayRequest struct {
+	value *DialogPlayRequest
+	isSet bool
+}
+
+func (v NullableDialogPlayRequest) Get() *DialogPlayRequest {
+	return v.value
+}
+
+func (v *NullableDialogPlayRequest) Set(val *DialogPlayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogPlayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogPlayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogPlayRequest(val *DialogPlayRequest) *NullableDialogPlayRequest {
+	return &NullableDialogPlayRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogPlayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogPlayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_propagation_options.go b/pkg/infobip/models/voice/dialog_propagation_options.go
new file mode 100644
index 0000000..d750b5a
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_propagation_options.go
@@ -0,0 +1,210 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogPropagationOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogPropagationOptions{}
+
+// DialogPropagationOptions struct for DialogPropagationOptions
+type DialogPropagationOptions struct {
+	// Flag indicating if the parent call should be terminated when the child call ends.
+	ChildCallHangup *bool
+	// Flag indicating if a child call's ringing should be propagated to the parent call. The parent call must be `INBOUND`. Cannot be `true` when `ringbackGeneration` is enabled.
+	ChildCallRinging   *bool
+	RingbackGeneration *RingbackGeneration
+}
+
+// NewDialogPropagationOptions instantiates a new DialogPropagationOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogPropagationOptions() *DialogPropagationOptions {
+	this := DialogPropagationOptions{}
+	var childCallHangup bool = true
+	this.ChildCallHangup = &childCallHangup
+	var childCallRinging bool = false
+	this.ChildCallRinging = &childCallRinging
+	return &this
+}
+
+// NewDialogPropagationOptionsWithDefaults instantiates a new DialogPropagationOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogPropagationOptionsWithDefaults() *DialogPropagationOptions {
+	this := DialogPropagationOptions{}
+
+	var childCallHangup bool = true
+	this.ChildCallHangup = &childCallHangup
+	var childCallRinging bool = false
+	this.ChildCallRinging = &childCallRinging
+	return &this
+}
+
+// GetChildCallHangup returns the ChildCallHangup field value if set, zero value otherwise.
+func (o *DialogPropagationOptions) GetChildCallHangup() bool {
+	if o == nil || IsNil(o.ChildCallHangup) {
+		var ret bool
+		return ret
+	}
+	return *o.ChildCallHangup
+}
+
+// GetChildCallHangupOk returns a tuple with the ChildCallHangup field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPropagationOptions) GetChildCallHangupOk() (*bool, bool) {
+	if o == nil || IsNil(o.ChildCallHangup) {
+		return nil, false
+	}
+	return o.ChildCallHangup, true
+}
+
+// HasChildCallHangup returns a boolean if a field has been set.
+func (o *DialogPropagationOptions) HasChildCallHangup() bool {
+	if o != nil && !IsNil(o.ChildCallHangup) {
+		return true
+	}
+
+	return false
+}
+
+// SetChildCallHangup gets a reference to the given bool and assigns it to the ChildCallHangup field.
+func (o *DialogPropagationOptions) SetChildCallHangup(v bool) {
+	o.ChildCallHangup = &v
+}
+
+// GetChildCallRinging returns the ChildCallRinging field value if set, zero value otherwise.
+func (o *DialogPropagationOptions) GetChildCallRinging() bool {
+	if o == nil || IsNil(o.ChildCallRinging) {
+		var ret bool
+		return ret
+	}
+	return *o.ChildCallRinging
+}
+
+// GetChildCallRingingOk returns a tuple with the ChildCallRinging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPropagationOptions) GetChildCallRingingOk() (*bool, bool) {
+	if o == nil || IsNil(o.ChildCallRinging) {
+		return nil, false
+	}
+	return o.ChildCallRinging, true
+}
+
+// HasChildCallRinging returns a boolean if a field has been set.
+func (o *DialogPropagationOptions) HasChildCallRinging() bool {
+	if o != nil && !IsNil(o.ChildCallRinging) {
+		return true
+	}
+
+	return false
+}
+
+// SetChildCallRinging gets a reference to the given bool and assigns it to the ChildCallRinging field.
+func (o *DialogPropagationOptions) SetChildCallRinging(v bool) {
+	o.ChildCallRinging = &v
+}
+
+// GetRingbackGeneration returns the RingbackGeneration field value if set, zero value otherwise.
+func (o *DialogPropagationOptions) GetRingbackGeneration() RingbackGeneration {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		var ret RingbackGeneration
+		return ret
+	}
+	return *o.RingbackGeneration
+}
+
+// GetRingbackGenerationOk returns a tuple with the RingbackGeneration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogPropagationOptions) GetRingbackGenerationOk() (*RingbackGeneration, bool) {
+	if o == nil || IsNil(o.RingbackGeneration) {
+		return nil, false
+	}
+	return o.RingbackGeneration, true
+}
+
+// HasRingbackGeneration returns a boolean if a field has been set.
+func (o *DialogPropagationOptions) HasRingbackGeneration() bool {
+	if o != nil && !IsNil(o.RingbackGeneration) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingbackGeneration gets a reference to the given RingbackGeneration and assigns it to the RingbackGeneration field.
+func (o *DialogPropagationOptions) SetRingbackGeneration(v RingbackGeneration) {
+	o.RingbackGeneration = &v
+}
+
+func (o DialogPropagationOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogPropagationOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ChildCallHangup) {
+		toSerialize["childCallHangup"] = o.ChildCallHangup
+	}
+	if !IsNil(o.ChildCallRinging) {
+		toSerialize["childCallRinging"] = o.ChildCallRinging
+	}
+	if !IsNil(o.RingbackGeneration) {
+		toSerialize["ringbackGeneration"] = o.RingbackGeneration
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogPropagationOptions struct {
+	value *DialogPropagationOptions
+	isSet bool
+}
+
+func (v NullableDialogPropagationOptions) Get() *DialogPropagationOptions {
+	return v.value
+}
+
+func (v *NullableDialogPropagationOptions) Set(val *DialogPropagationOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogPropagationOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogPropagationOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogPropagationOptions(val *DialogPropagationOptions) *NullableDialogPropagationOptions {
+	return &NullableDialogPropagationOptions{value: val, isSet: true}
+}
+
+func (v NullableDialogPropagationOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogPropagationOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_recording_composition.go b/pkg/infobip/models/voice/dialog_recording_composition.go
new file mode 100644
index 0000000..7a1daea
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_recording_composition.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogRecordingComposition type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogRecordingComposition{}
+
+// DialogRecordingComposition struct for DialogRecordingComposition
+type DialogRecordingComposition struct {
+	// Indicates whether to create a single recording of both participants. If set to `true`, both participants are merged into a single audio or video file. Otherwise, both participants will have their own individual audio or video file.
+	Enabled *bool
+}
+
+// NewDialogRecordingComposition instantiates a new DialogRecordingComposition object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogRecordingComposition() *DialogRecordingComposition {
+	this := DialogRecordingComposition{}
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// NewDialogRecordingCompositionWithDefaults instantiates a new DialogRecordingComposition object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogRecordingCompositionWithDefaults() *DialogRecordingComposition {
+	this := DialogRecordingComposition{}
+
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// GetEnabled returns the Enabled field value if set, zero value otherwise.
+func (o *DialogRecordingComposition) GetEnabled() bool {
+	if o == nil || IsNil(o.Enabled) {
+		var ret bool
+		return ret
+	}
+	return *o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingComposition) GetEnabledOk() (*bool, bool) {
+	if o == nil || IsNil(o.Enabled) {
+		return nil, false
+	}
+	return o.Enabled, true
+}
+
+// HasEnabled returns a boolean if a field has been set.
+func (o *DialogRecordingComposition) HasEnabled() bool {
+	if o != nil && !IsNil(o.Enabled) {
+		return true
+	}
+
+	return false
+}
+
+// SetEnabled gets a reference to the given bool and assigns it to the Enabled field.
+func (o *DialogRecordingComposition) SetEnabled(v bool) {
+	o.Enabled = &v
+}
+
+func (o DialogRecordingComposition) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogRecordingComposition) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Enabled) {
+		toSerialize["enabled"] = o.Enabled
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogRecordingComposition struct {
+	value *DialogRecordingComposition
+	isSet bool
+}
+
+func (v NullableDialogRecordingComposition) Get() *DialogRecordingComposition {
+	return v.value
+}
+
+func (v *NullableDialogRecordingComposition) Set(val *DialogRecordingComposition) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogRecordingComposition) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogRecordingComposition) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogRecordingComposition(val *DialogRecordingComposition) *NullableDialogRecordingComposition {
+	return &NullableDialogRecordingComposition{value: val, isSet: true}
+}
+
+func (v NullableDialogRecordingComposition) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogRecordingComposition) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_recording_log.go b/pkg/infobip/models/voice/dialog_recording_log.go
new file mode 100644
index 0000000..32c7c4c
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_recording_log.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogRecordingLog type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogRecordingLog{}
+
+// DialogRecordingLog Dialog recordings.
+type DialogRecordingLog struct {
+	// File(s) with a recording of both dialog calls.
+	ComposedFiles []RecordingFile
+	// File(s) with a recording of individual dialog calls.
+	CallRecordings []Recording
+}
+
+// NewDialogRecordingLog instantiates a new DialogRecordingLog object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogRecordingLog() *DialogRecordingLog {
+	this := DialogRecordingLog{}
+	return &this
+}
+
+// NewDialogRecordingLogWithDefaults instantiates a new DialogRecordingLog object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogRecordingLogWithDefaults() *DialogRecordingLog {
+	this := DialogRecordingLog{}
+
+	return &this
+}
+
+// GetComposedFiles returns the ComposedFiles field value if set, zero value otherwise.
+func (o *DialogRecordingLog) GetComposedFiles() []RecordingFile {
+	if o == nil || IsNil(o.ComposedFiles) {
+		var ret []RecordingFile
+		return ret
+	}
+	return o.ComposedFiles
+}
+
+// GetComposedFilesOk returns a tuple with the ComposedFiles field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingLog) GetComposedFilesOk() ([]RecordingFile, bool) {
+	if o == nil || IsNil(o.ComposedFiles) {
+		return nil, false
+	}
+	return o.ComposedFiles, true
+}
+
+// HasComposedFiles returns a boolean if a field has been set.
+func (o *DialogRecordingLog) HasComposedFiles() bool {
+	if o != nil && !IsNil(o.ComposedFiles) {
+		return true
+	}
+
+	return false
+}
+
+// SetComposedFiles gets a reference to the given []RecordingFile and assigns it to the ComposedFiles field.
+func (o *DialogRecordingLog) SetComposedFiles(v []RecordingFile) {
+	o.ComposedFiles = v
+}
+
+// GetCallRecordings returns the CallRecordings field value if set, zero value otherwise.
+func (o *DialogRecordingLog) GetCallRecordings() []Recording {
+	if o == nil || IsNil(o.CallRecordings) {
+		var ret []Recording
+		return ret
+	}
+	return o.CallRecordings
+}
+
+// GetCallRecordingsOk returns a tuple with the CallRecordings field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingLog) GetCallRecordingsOk() ([]Recording, bool) {
+	if o == nil || IsNil(o.CallRecordings) {
+		return nil, false
+	}
+	return o.CallRecordings, true
+}
+
+// HasCallRecordings returns a boolean if a field has been set.
+func (o *DialogRecordingLog) HasCallRecordings() bool {
+	if o != nil && !IsNil(o.CallRecordings) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallRecordings gets a reference to the given []Recording and assigns it to the CallRecordings field.
+func (o *DialogRecordingLog) SetCallRecordings(v []Recording) {
+	o.CallRecordings = v
+}
+
+func (o DialogRecordingLog) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogRecordingLog) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ComposedFiles) {
+		toSerialize["composedFiles"] = o.ComposedFiles
+	}
+	if !IsNil(o.CallRecordings) {
+		toSerialize["callRecordings"] = o.CallRecordings
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogRecordingLog struct {
+	value *DialogRecordingLog
+	isSet bool
+}
+
+func (v NullableDialogRecordingLog) Get() *DialogRecordingLog {
+	return v.value
+}
+
+func (v *NullableDialogRecordingLog) Set(val *DialogRecordingLog) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogRecordingLog) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogRecordingLog) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogRecordingLog(val *DialogRecordingLog) *NullableDialogRecordingLog {
+	return &NullableDialogRecordingLog{value: val, isSet: true}
+}
+
+func (v NullableDialogRecordingLog) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogRecordingLog) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_recording_page.go b/pkg/infobip/models/voice/dialog_recording_page.go
new file mode 100644
index 0000000..5f31d9b
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_recording_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogRecordingPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogRecordingPage{}
+
+// DialogRecordingPage struct for DialogRecordingPage
+type DialogRecordingPage struct {
+	// The list of the results for this page.
+	Results []DialogRecordingResponse
+	Paging  *PageInfo
+}
+
+// NewDialogRecordingPage instantiates a new DialogRecordingPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogRecordingPage() *DialogRecordingPage {
+	this := DialogRecordingPage{}
+	return &this
+}
+
+// NewDialogRecordingPageWithDefaults instantiates a new DialogRecordingPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogRecordingPageWithDefaults() *DialogRecordingPage {
+	this := DialogRecordingPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *DialogRecordingPage) GetResults() []DialogRecordingResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []DialogRecordingResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingPage) GetResultsOk() ([]DialogRecordingResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *DialogRecordingPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []DialogRecordingResponse and assigns it to the Results field.
+func (o *DialogRecordingPage) SetResults(v []DialogRecordingResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *DialogRecordingPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *DialogRecordingPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *DialogRecordingPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o DialogRecordingPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogRecordingPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogRecordingPage struct {
+	value *DialogRecordingPage
+	isSet bool
+}
+
+func (v NullableDialogRecordingPage) Get() *DialogRecordingPage {
+	return v.value
+}
+
+func (v *NullableDialogRecordingPage) Set(val *DialogRecordingPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogRecordingPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogRecordingPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogRecordingPage(val *DialogRecordingPage) *NullableDialogRecordingPage {
+	return &NullableDialogRecordingPage{value: val, isSet: true}
+}
+
+func (v NullableDialogRecordingPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogRecordingPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_recording_request.go b/pkg/infobip/models/voice/dialog_recording_request.go
new file mode 100644
index 0000000..bab8c0e
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_recording_request.go
@@ -0,0 +1,231 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogRecordingRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogRecordingRequest{}
+
+// DialogRecordingRequest struct for DialogRecordingRequest
+type DialogRecordingRequest struct {
+	RecordingType     RecordingType
+	DialogComposition *DialogRecordingComposition
+	// Custom data.
+	CustomData *map[string]string
+	// Custom name for the recording's zip file. Applicable only when SFTP server is enabled on [Voice settings page](https://portal.infobip.com/apps/voice/recording/settings). Using the same filePrefix will override the files on the SFTP server. For recordings without composition, `callId` and `fileId` will be appended to the `filePrefix` value.
+	FilePrefix *string
+}
+
+type _DialogRecordingRequest DialogRecordingRequest
+
+// NewDialogRecordingRequest instantiates a new DialogRecordingRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogRecordingRequest(recordingType RecordingType) *DialogRecordingRequest {
+	this := DialogRecordingRequest{}
+	this.RecordingType = recordingType
+	return &this
+}
+
+// NewDialogRecordingRequestWithDefaults instantiates a new DialogRecordingRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogRecordingRequestWithDefaults() *DialogRecordingRequest {
+	this := DialogRecordingRequest{}
+
+	return &this
+}
+
+// GetRecordingType returns the RecordingType field value
+func (o *DialogRecordingRequest) GetRecordingType() RecordingType {
+	if o == nil {
+		var ret RecordingType
+		return ret
+	}
+
+	return o.RecordingType
+}
+
+// GetRecordingTypeOk returns a tuple with the RecordingType field value
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingRequest) GetRecordingTypeOk() (*RecordingType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.RecordingType, true
+}
+
+// SetRecordingType sets field value
+func (o *DialogRecordingRequest) SetRecordingType(v RecordingType) {
+	o.RecordingType = v
+}
+
+// GetDialogComposition returns the DialogComposition field value if set, zero value otherwise.
+func (o *DialogRecordingRequest) GetDialogComposition() DialogRecordingComposition {
+	if o == nil || IsNil(o.DialogComposition) {
+		var ret DialogRecordingComposition
+		return ret
+	}
+	return *o.DialogComposition
+}
+
+// GetDialogCompositionOk returns a tuple with the DialogComposition field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingRequest) GetDialogCompositionOk() (*DialogRecordingComposition, bool) {
+	if o == nil || IsNil(o.DialogComposition) {
+		return nil, false
+	}
+	return o.DialogComposition, true
+}
+
+// HasDialogComposition returns a boolean if a field has been set.
+func (o *DialogRecordingRequest) HasDialogComposition() bool {
+	if o != nil && !IsNil(o.DialogComposition) {
+		return true
+	}
+
+	return false
+}
+
+// SetDialogComposition gets a reference to the given DialogRecordingComposition and assigns it to the DialogComposition field.
+func (o *DialogRecordingRequest) SetDialogComposition(v DialogRecordingComposition) {
+	o.DialogComposition = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *DialogRecordingRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *DialogRecordingRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *DialogRecordingRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetFilePrefix returns the FilePrefix field value if set, zero value otherwise.
+func (o *DialogRecordingRequest) GetFilePrefix() string {
+	if o == nil || IsNil(o.FilePrefix) {
+		var ret string
+		return ret
+	}
+	return *o.FilePrefix
+}
+
+// GetFilePrefixOk returns a tuple with the FilePrefix field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingRequest) GetFilePrefixOk() (*string, bool) {
+	if o == nil || IsNil(o.FilePrefix) {
+		return nil, false
+	}
+	return o.FilePrefix, true
+}
+
+// HasFilePrefix returns a boolean if a field has been set.
+func (o *DialogRecordingRequest) HasFilePrefix() bool {
+	if o != nil && !IsNil(o.FilePrefix) {
+		return true
+	}
+
+	return false
+}
+
+// SetFilePrefix gets a reference to the given string and assigns it to the FilePrefix field.
+func (o *DialogRecordingRequest) SetFilePrefix(v string) {
+	o.FilePrefix = &v
+}
+
+func (o DialogRecordingRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogRecordingRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["recordingType"] = o.RecordingType
+	if !IsNil(o.DialogComposition) {
+		toSerialize["dialogComposition"] = o.DialogComposition
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.FilePrefix) {
+		toSerialize["filePrefix"] = o.FilePrefix
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogRecordingRequest struct {
+	value *DialogRecordingRequest
+	isSet bool
+}
+
+func (v NullableDialogRecordingRequest) Get() *DialogRecordingRequest {
+	return v.value
+}
+
+func (v *NullableDialogRecordingRequest) Set(val *DialogRecordingRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogRecordingRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogRecordingRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogRecordingRequest(val *DialogRecordingRequest) *NullableDialogRecordingRequest {
+	return &NullableDialogRecordingRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogRecordingRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogRecordingRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_recording_response.go b/pkg/infobip/models/voice/dialog_recording_response.go
new file mode 100644
index 0000000..3a7838b
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_recording_response.go
@@ -0,0 +1,350 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogRecordingResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogRecordingResponse{}
+
+// DialogRecordingResponse struct for DialogRecordingResponse
+type DialogRecordingResponse struct {
+	// Unique dialog ID.
+	DialogId *string
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	// File(s) with a recording of both dialog participants.
+	ComposedFiles []RecordingFile
+	// File(s) with a recording of one dialog participant.
+	CallRecordings []Recording
+	// Date and time when the (first) recording started.
+	StartTime *Time
+	// Date and time when the (last) recording ended.
+	EndTime *Time
+}
+
+// NewDialogRecordingResponse instantiates a new DialogRecordingResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogRecordingResponse() *DialogRecordingResponse {
+	this := DialogRecordingResponse{}
+	return &this
+}
+
+// NewDialogRecordingResponseWithDefaults instantiates a new DialogRecordingResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogRecordingResponseWithDefaults() *DialogRecordingResponse {
+	this := DialogRecordingResponse{}
+
+	return &this
+}
+
+// GetDialogId returns the DialogId field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetDialogId() string {
+	if o == nil || IsNil(o.DialogId) {
+		var ret string
+		return ret
+	}
+	return *o.DialogId
+}
+
+// GetDialogIdOk returns a tuple with the DialogId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetDialogIdOk() (*string, bool) {
+	if o == nil || IsNil(o.DialogId) {
+		return nil, false
+	}
+	return o.DialogId, true
+}
+
+// HasDialogId returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasDialogId() bool {
+	if o != nil && !IsNil(o.DialogId) {
+		return true
+	}
+
+	return false
+}
+
+// SetDialogId gets a reference to the given string and assigns it to the DialogId field.
+func (o *DialogRecordingResponse) SetDialogId(v string) {
+	o.DialogId = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *DialogRecordingResponse) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *DialogRecordingResponse) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetComposedFiles returns the ComposedFiles field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetComposedFiles() []RecordingFile {
+	if o == nil || IsNil(o.ComposedFiles) {
+		var ret []RecordingFile
+		return ret
+	}
+	return o.ComposedFiles
+}
+
+// GetComposedFilesOk returns a tuple with the ComposedFiles field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetComposedFilesOk() ([]RecordingFile, bool) {
+	if o == nil || IsNil(o.ComposedFiles) {
+		return nil, false
+	}
+	return o.ComposedFiles, true
+}
+
+// HasComposedFiles returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasComposedFiles() bool {
+	if o != nil && !IsNil(o.ComposedFiles) {
+		return true
+	}
+
+	return false
+}
+
+// SetComposedFiles gets a reference to the given []RecordingFile and assigns it to the ComposedFiles field.
+func (o *DialogRecordingResponse) SetComposedFiles(v []RecordingFile) {
+	o.ComposedFiles = v
+}
+
+// GetCallRecordings returns the CallRecordings field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetCallRecordings() []Recording {
+	if o == nil || IsNil(o.CallRecordings) {
+		var ret []Recording
+		return ret
+	}
+	return o.CallRecordings
+}
+
+// GetCallRecordingsOk returns a tuple with the CallRecordings field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetCallRecordingsOk() ([]Recording, bool) {
+	if o == nil || IsNil(o.CallRecordings) {
+		return nil, false
+	}
+	return o.CallRecordings, true
+}
+
+// HasCallRecordings returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasCallRecordings() bool {
+	if o != nil && !IsNil(o.CallRecordings) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallRecordings gets a reference to the given []Recording and assigns it to the CallRecordings field.
+func (o *DialogRecordingResponse) SetCallRecordings(v []Recording) {
+	o.CallRecordings = v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *DialogRecordingResponse) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *DialogRecordingResponse) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRecordingResponse) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *DialogRecordingResponse) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *DialogRecordingResponse) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+func (o DialogRecordingResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogRecordingResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DialogId) {
+		toSerialize["dialogId"] = o.DialogId
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.ComposedFiles) {
+		toSerialize["composedFiles"] = o.ComposedFiles
+	}
+	if !IsNil(o.CallRecordings) {
+		toSerialize["callRecordings"] = o.CallRecordings
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogRecordingResponse struct {
+	value *DialogRecordingResponse
+	isSet bool
+}
+
+func (v NullableDialogRecordingResponse) Get() *DialogRecordingResponse {
+	return v.value
+}
+
+func (v *NullableDialogRecordingResponse) Set(val *DialogRecordingResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogRecordingResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogRecordingResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogRecordingResponse(val *DialogRecordingResponse) *NullableDialogRecordingResponse {
+	return &NullableDialogRecordingResponse{value: val, isSet: true}
+}
+
+func (v NullableDialogRecordingResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogRecordingResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_request.go b/pkg/infobip/models/voice/dialog_request.go
new file mode 100644
index 0000000..575888c
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_request.go
@@ -0,0 +1,271 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogRequest{}
+
+// DialogRequest struct for DialogRequest
+type DialogRequest struct {
+	// Unique parent call ID.
+	ParentCallId     string
+	ChildCallRequest *DialogCallRequest
+	Recording        *DialogRecordingRequest
+	// Max duration in seconds.
+	MaxDuration        *int32
+	PropagationOptions *DialogPropagationOptions
+}
+
+type _DialogRequest DialogRequest
+
+// NewDialogRequest instantiates a new DialogRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogRequest(parentCallId string) *DialogRequest {
+	this := DialogRequest{}
+	this.ParentCallId = parentCallId
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// NewDialogRequestWithDefaults instantiates a new DialogRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogRequestWithDefaults() *DialogRequest {
+	this := DialogRequest{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetParentCallId returns the ParentCallId field value
+func (o *DialogRequest) GetParentCallId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ParentCallId
+}
+
+// GetParentCallIdOk returns a tuple with the ParentCallId field value
+// and a boolean to check if the value has been set.
+func (o *DialogRequest) GetParentCallIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ParentCallId, true
+}
+
+// SetParentCallId sets field value
+func (o *DialogRequest) SetParentCallId(v string) {
+	o.ParentCallId = v
+}
+
+// GetChildCallRequest returns the ChildCallRequest field value if set, zero value otherwise.
+func (o *DialogRequest) GetChildCallRequest() DialogCallRequest {
+	if o == nil || IsNil(o.ChildCallRequest) {
+		var ret DialogCallRequest
+		return ret
+	}
+	return *o.ChildCallRequest
+}
+
+// GetChildCallRequestOk returns a tuple with the ChildCallRequest field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRequest) GetChildCallRequestOk() (*DialogCallRequest, bool) {
+	if o == nil || IsNil(o.ChildCallRequest) {
+		return nil, false
+	}
+	return o.ChildCallRequest, true
+}
+
+// HasChildCallRequest returns a boolean if a field has been set.
+func (o *DialogRequest) HasChildCallRequest() bool {
+	if o != nil && !IsNil(o.ChildCallRequest) {
+		return true
+	}
+
+	return false
+}
+
+// SetChildCallRequest gets a reference to the given DialogCallRequest and assigns it to the ChildCallRequest field.
+func (o *DialogRequest) SetChildCallRequest(v DialogCallRequest) {
+	o.ChildCallRequest = &v
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *DialogRequest) GetRecording() DialogRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret DialogRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRequest) GetRecordingOk() (*DialogRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *DialogRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given DialogRecordingRequest and assigns it to the Recording field.
+func (o *DialogRequest) SetRecording(v DialogRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *DialogRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *DialogRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *DialogRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetPropagationOptions returns the PropagationOptions field value if set, zero value otherwise.
+func (o *DialogRequest) GetPropagationOptions() DialogPropagationOptions {
+	if o == nil || IsNil(o.PropagationOptions) {
+		var ret DialogPropagationOptions
+		return ret
+	}
+	return *o.PropagationOptions
+}
+
+// GetPropagationOptionsOk returns a tuple with the PropagationOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogRequest) GetPropagationOptionsOk() (*DialogPropagationOptions, bool) {
+	if o == nil || IsNil(o.PropagationOptions) {
+		return nil, false
+	}
+	return o.PropagationOptions, true
+}
+
+// HasPropagationOptions returns a boolean if a field has been set.
+func (o *DialogRequest) HasPropagationOptions() bool {
+	if o != nil && !IsNil(o.PropagationOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetPropagationOptions gets a reference to the given DialogPropagationOptions and assigns it to the PropagationOptions field.
+func (o *DialogRequest) SetPropagationOptions(v DialogPropagationOptions) {
+	o.PropagationOptions = &v
+}
+
+func (o DialogRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["parentCallId"] = o.ParentCallId
+	if !IsNil(o.ChildCallRequest) {
+		toSerialize["childCallRequest"] = o.ChildCallRequest
+	}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.PropagationOptions) {
+		toSerialize["propagationOptions"] = o.PropagationOptions
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogRequest struct {
+	value *DialogRequest
+	isSet bool
+}
+
+func (v NullableDialogRequest) Get() *DialogRequest {
+	return v.value
+}
+
+func (v *NullableDialogRequest) Set(val *DialogRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogRequest(val *DialogRequest) *NullableDialogRequest {
+	return &NullableDialogRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_response.go b/pkg/infobip/models/voice/dialog_response.go
new file mode 100644
index 0000000..a408c99
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_response.go
@@ -0,0 +1,421 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogResponse{}
+
+// DialogResponse struct for DialogResponse
+type DialogResponse struct {
+	// Unique dialog ID.
+	Id *string
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	State                *DialogState
+	// Date and time for when the dialog has been created.
+	StartTime *Time
+	// Date and time for when the dialog has been established.
+	EstablishTime *Time
+	// Date and time for when the dialog has been finished.
+	EndTime    *Time
+	ParentCall *Call
+	ChildCall  *Call
+}
+
+// NewDialogResponse instantiates a new DialogResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogResponse() *DialogResponse {
+	this := DialogResponse{}
+	return &this
+}
+
+// NewDialogResponseWithDefaults instantiates a new DialogResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogResponseWithDefaults() *DialogResponse {
+	this := DialogResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *DialogResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *DialogResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *DialogResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *DialogResponse) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *DialogResponse) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *DialogResponse) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *DialogResponse) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *DialogResponse) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *DialogResponse) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetState returns the State field value if set, zero value otherwise.
+func (o *DialogResponse) GetState() DialogState {
+	if o == nil || IsNil(o.State) {
+		var ret DialogState
+		return ret
+	}
+	return *o.State
+}
+
+// GetStateOk returns a tuple with the State field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetStateOk() (*DialogState, bool) {
+	if o == nil || IsNil(o.State) {
+		return nil, false
+	}
+	return o.State, true
+}
+
+// HasState returns a boolean if a field has been set.
+func (o *DialogResponse) HasState() bool {
+	if o != nil && !IsNil(o.State) {
+		return true
+	}
+
+	return false
+}
+
+// SetState gets a reference to the given DialogState and assigns it to the State field.
+func (o *DialogResponse) SetState(v DialogState) {
+	o.State = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *DialogResponse) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *DialogResponse) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *DialogResponse) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEstablishTime returns the EstablishTime field value if set, zero value otherwise.
+func (o *DialogResponse) GetEstablishTime() Time {
+	if o == nil || IsNil(o.EstablishTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EstablishTime
+}
+
+// GetEstablishTimeOk returns a tuple with the EstablishTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetEstablishTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EstablishTime) {
+		return nil, false
+	}
+	return o.EstablishTime, true
+}
+
+// HasEstablishTime returns a boolean if a field has been set.
+func (o *DialogResponse) HasEstablishTime() bool {
+	if o != nil && !IsNil(o.EstablishTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEstablishTime gets a reference to the given Time and assigns it to the EstablishTime field.
+func (o *DialogResponse) SetEstablishTime(v Time) {
+	o.EstablishTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *DialogResponse) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *DialogResponse) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *DialogResponse) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+// GetParentCall returns the ParentCall field value if set, zero value otherwise.
+func (o *DialogResponse) GetParentCall() Call {
+	if o == nil || IsNil(o.ParentCall) {
+		var ret Call
+		return ret
+	}
+	return *o.ParentCall
+}
+
+// GetParentCallOk returns a tuple with the ParentCall field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetParentCallOk() (*Call, bool) {
+	if o == nil || IsNil(o.ParentCall) {
+		return nil, false
+	}
+	return o.ParentCall, true
+}
+
+// HasParentCall returns a boolean if a field has been set.
+func (o *DialogResponse) HasParentCall() bool {
+	if o != nil && !IsNil(o.ParentCall) {
+		return true
+	}
+
+	return false
+}
+
+// SetParentCall gets a reference to the given Call and assigns it to the ParentCall field.
+func (o *DialogResponse) SetParentCall(v Call) {
+	o.ParentCall = &v
+}
+
+// GetChildCall returns the ChildCall field value if set, zero value otherwise.
+func (o *DialogResponse) GetChildCall() Call {
+	if o == nil || IsNil(o.ChildCall) {
+		var ret Call
+		return ret
+	}
+	return *o.ChildCall
+}
+
+// GetChildCallOk returns a tuple with the ChildCall field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogResponse) GetChildCallOk() (*Call, bool) {
+	if o == nil || IsNil(o.ChildCall) {
+		return nil, false
+	}
+	return o.ChildCall, true
+}
+
+// HasChildCall returns a boolean if a field has been set.
+func (o *DialogResponse) HasChildCall() bool {
+	if o != nil && !IsNil(o.ChildCall) {
+		return true
+	}
+
+	return false
+}
+
+// SetChildCall gets a reference to the given Call and assigns it to the ChildCall field.
+func (o *DialogResponse) SetChildCall(v Call) {
+	o.ChildCall = &v
+}
+
+func (o DialogResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.State) {
+		toSerialize["state"] = o.State
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EstablishTime) {
+		toSerialize["establishTime"] = o.EstablishTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.ParentCall) {
+		toSerialize["parentCall"] = o.ParentCall
+	}
+	if !IsNil(o.ChildCall) {
+		toSerialize["childCall"] = o.ChildCall
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogResponse struct {
+	value *DialogResponse
+	isSet bool
+}
+
+func (v NullableDialogResponse) Get() *DialogResponse {
+	return v.value
+}
+
+func (v *NullableDialogResponse) Set(val *DialogResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogResponse(val *DialogResponse) *NullableDialogResponse {
+	return &NullableDialogResponse{value: val, isSet: true}
+}
+
+func (v NullableDialogResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_say_request.go b/pkg/infobip/models/voice/dialog_say_request.go
new file mode 100644
index 0000000..122cf12
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_say_request.go
@@ -0,0 +1,259 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogSayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogSayRequest{}
+
+// DialogSayRequest struct for DialogSayRequest
+type DialogSayRequest struct {
+	// Text to read.
+	Text     string
+	Language Language
+	// Speech rate. Must be within `[0.5 - 2.0]` range, default value is `1`.
+	SpeechRate *float64
+	// Number of times to read the text.
+	LoopCount   *int32
+	Preferences *VoicePreferences
+}
+
+type _DialogSayRequest DialogSayRequest
+
+// NewDialogSayRequest instantiates a new DialogSayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogSayRequest(text string, language Language) *DialogSayRequest {
+	this := DialogSayRequest{}
+	this.Text = text
+	this.Language = language
+	return &this
+}
+
+// NewDialogSayRequestWithDefaults instantiates a new DialogSayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogSayRequestWithDefaults() *DialogSayRequest {
+	this := DialogSayRequest{}
+
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *DialogSayRequest) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *DialogSayRequest) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *DialogSayRequest) SetText(v string) {
+	o.Text = v
+}
+
+// GetLanguage returns the Language field value
+func (o *DialogSayRequest) GetLanguage() Language {
+	if o == nil {
+		var ret Language
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *DialogSayRequest) GetLanguageOk() (*Language, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *DialogSayRequest) SetLanguage(v Language) {
+	o.Language = v
+}
+
+// GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
+func (o *DialogSayRequest) GetSpeechRate() float64 {
+	if o == nil || IsNil(o.SpeechRate) {
+		var ret float64
+		return ret
+	}
+	return *o.SpeechRate
+}
+
+// GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogSayRequest) GetSpeechRateOk() (*float64, bool) {
+	if o == nil || IsNil(o.SpeechRate) {
+		return nil, false
+	}
+	return o.SpeechRate, true
+}
+
+// HasSpeechRate returns a boolean if a field has been set.
+func (o *DialogSayRequest) HasSpeechRate() bool {
+	if o != nil && !IsNil(o.SpeechRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
+func (o *DialogSayRequest) SetSpeechRate(v float64) {
+	o.SpeechRate = &v
+}
+
+// GetLoopCount returns the LoopCount field value if set, zero value otherwise.
+func (o *DialogSayRequest) GetLoopCount() int32 {
+	if o == nil || IsNil(o.LoopCount) {
+		var ret int32
+		return ret
+	}
+	return *o.LoopCount
+}
+
+// GetLoopCountOk returns a tuple with the LoopCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogSayRequest) GetLoopCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.LoopCount) {
+		return nil, false
+	}
+	return o.LoopCount, true
+}
+
+// HasLoopCount returns a boolean if a field has been set.
+func (o *DialogSayRequest) HasLoopCount() bool {
+	if o != nil && !IsNil(o.LoopCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetLoopCount gets a reference to the given int32 and assigns it to the LoopCount field.
+func (o *DialogSayRequest) SetLoopCount(v int32) {
+	o.LoopCount = &v
+}
+
+// GetPreferences returns the Preferences field value if set, zero value otherwise.
+func (o *DialogSayRequest) GetPreferences() VoicePreferences {
+	if o == nil || IsNil(o.Preferences) {
+		var ret VoicePreferences
+		return ret
+	}
+	return *o.Preferences
+}
+
+// GetPreferencesOk returns a tuple with the Preferences field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogSayRequest) GetPreferencesOk() (*VoicePreferences, bool) {
+	if o == nil || IsNil(o.Preferences) {
+		return nil, false
+	}
+	return o.Preferences, true
+}
+
+// HasPreferences returns a boolean if a field has been set.
+func (o *DialogSayRequest) HasPreferences() bool {
+	if o != nil && !IsNil(o.Preferences) {
+		return true
+	}
+
+	return false
+}
+
+// SetPreferences gets a reference to the given VoicePreferences and assigns it to the Preferences field.
+func (o *DialogSayRequest) SetPreferences(v VoicePreferences) {
+	o.Preferences = &v
+}
+
+func (o DialogSayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogSayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["text"] = o.Text
+	toSerialize["language"] = o.Language
+	if !IsNil(o.SpeechRate) {
+		toSerialize["speechRate"] = o.SpeechRate
+	}
+	if !IsNil(o.LoopCount) {
+		toSerialize["loopCount"] = o.LoopCount
+	}
+	if !IsNil(o.Preferences) {
+		toSerialize["preferences"] = o.Preferences
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogSayRequest struct {
+	value *DialogSayRequest
+	isSet bool
+}
+
+func (v NullableDialogSayRequest) Get() *DialogSayRequest {
+	return v.value
+}
+
+func (v *NullableDialogSayRequest) Set(val *DialogSayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogSayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogSayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogSayRequest(val *DialogSayRequest) *NullableDialogSayRequest {
+	return &NullableDialogSayRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogSayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogSayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_state.go b/pkg/infobip/models/voice/dialog_state.go
new file mode 100644
index 0000000..03bb66b
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_state.go
@@ -0,0 +1,116 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// DialogState Dialog state.
+type DialogState string
+
+// List of DialogState
+const (
+	DIALOGSTATE_CREATED         DialogState = "CREATED"
+	DIALOGSTATE_PRE_ESTABLISHED DialogState = "PRE_ESTABLISHED"
+	DIALOGSTATE_ESTABLISHED     DialogState = "ESTABLISHED"
+	DIALOGSTATE_FINISHED        DialogState = "FINISHED"
+	DIALOGSTATE_FAILED          DialogState = "FAILED"
+)
+
+// All allowed values of DialogState enum
+var AllowedDialogStateEnumValues = []DialogState{
+	"CREATED",
+	"PRE_ESTABLISHED",
+	"ESTABLISHED",
+	"FINISHED",
+	"FAILED",
+}
+
+func (v *DialogState) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := DialogState(value)
+	for _, existing := range AllowedDialogStateEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid DialogState", value)
+}
+
+// NewDialogStateFromValue returns a pointer to a valid DialogState
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewDialogStateFromValue(v string) (*DialogState, error) {
+	ev := DialogState(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for DialogState: valid values are %v", v, AllowedDialogStateEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v DialogState) IsValid() bool {
+	for _, existing := range AllowedDialogStateEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to DialogState value
+func (v DialogState) Ptr() *DialogState {
+	return &v
+}
+
+type NullableDialogState struct {
+	value *DialogState
+	isSet bool
+}
+
+func (v NullableDialogState) Get() *DialogState {
+	return v.value
+}
+
+func (v *NullableDialogState) Set(val *DialogState) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogState) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogState) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogState(val *DialogState) *NullableDialogState {
+	return &NullableDialogState{value: val, isSet: true}
+}
+
+func (v NullableDialogState) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogState) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dialog_with_existing_call_request.go b/pkg/infobip/models/voice/dialog_with_existing_call_request.go
new file mode 100644
index 0000000..ab2f76c
--- /dev/null
+++ b/pkg/infobip/models/voice/dialog_with_existing_call_request.go
@@ -0,0 +1,205 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DialogWithExistingCallRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DialogWithExistingCallRequest{}
+
+// DialogWithExistingCallRequest struct for DialogWithExistingCallRequest
+type DialogWithExistingCallRequest struct {
+	Recording *DialogRecordingRequest
+	// Max duration in seconds.
+	MaxDuration        *int32
+	PropagationOptions *DialogPropagationOptions
+}
+
+// NewDialogWithExistingCallRequest instantiates a new DialogWithExistingCallRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDialogWithExistingCallRequest() *DialogWithExistingCallRequest {
+	this := DialogWithExistingCallRequest{}
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// NewDialogWithExistingCallRequestWithDefaults instantiates a new DialogWithExistingCallRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDialogWithExistingCallRequestWithDefaults() *DialogWithExistingCallRequest {
+	this := DialogWithExistingCallRequest{}
+
+	var maxDuration int32 = 28800
+	this.MaxDuration = &maxDuration
+	return &this
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *DialogWithExistingCallRequest) GetRecording() DialogRecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret DialogRecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogWithExistingCallRequest) GetRecordingOk() (*DialogRecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *DialogWithExistingCallRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given DialogRecordingRequest and assigns it to the Recording field.
+func (o *DialogWithExistingCallRequest) SetRecording(v DialogRecordingRequest) {
+	o.Recording = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *DialogWithExistingCallRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogWithExistingCallRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *DialogWithExistingCallRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *DialogWithExistingCallRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetPropagationOptions returns the PropagationOptions field value if set, zero value otherwise.
+func (o *DialogWithExistingCallRequest) GetPropagationOptions() DialogPropagationOptions {
+	if o == nil || IsNil(o.PropagationOptions) {
+		var ret DialogPropagationOptions
+		return ret
+	}
+	return *o.PropagationOptions
+}
+
+// GetPropagationOptionsOk returns a tuple with the PropagationOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DialogWithExistingCallRequest) GetPropagationOptionsOk() (*DialogPropagationOptions, bool) {
+	if o == nil || IsNil(o.PropagationOptions) {
+		return nil, false
+	}
+	return o.PropagationOptions, true
+}
+
+// HasPropagationOptions returns a boolean if a field has been set.
+func (o *DialogWithExistingCallRequest) HasPropagationOptions() bool {
+	if o != nil && !IsNil(o.PropagationOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetPropagationOptions gets a reference to the given DialogPropagationOptions and assigns it to the PropagationOptions field.
+func (o *DialogWithExistingCallRequest) SetPropagationOptions(v DialogPropagationOptions) {
+	o.PropagationOptions = &v
+}
+
+func (o DialogWithExistingCallRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DialogWithExistingCallRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.PropagationOptions) {
+		toSerialize["propagationOptions"] = o.PropagationOptions
+	}
+	return toSerialize, nil
+}
+
+type NullableDialogWithExistingCallRequest struct {
+	value *DialogWithExistingCallRequest
+	isSet bool
+}
+
+func (v NullableDialogWithExistingCallRequest) Get() *DialogWithExistingCallRequest {
+	return v.value
+}
+
+func (v *NullableDialogWithExistingCallRequest) Set(val *DialogWithExistingCallRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDialogWithExistingCallRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDialogWithExistingCallRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDialogWithExistingCallRequest(val *DialogWithExistingCallRequest) *NullableDialogWithExistingCallRequest {
+	return &NullableDialogWithExistingCallRequest{value: val, isSet: true}
+}
+
+func (v NullableDialogWithExistingCallRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDialogWithExistingCallRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dtmf_capture_request.go b/pkg/infobip/models/voice/dtmf_capture_request.go
new file mode 100644
index 0000000..1413ef9
--- /dev/null
+++ b/pkg/infobip/models/voice/dtmf_capture_request.go
@@ -0,0 +1,297 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DtmfCaptureRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DtmfCaptureRequest{}
+
+// DtmfCaptureRequest struct for DtmfCaptureRequest
+type DtmfCaptureRequest struct {
+	// Maximum number of digits to capture.
+	MaxLength int32
+	// The duration, in milliseconds, to wait for the first DTMF digit response.
+	Timeout int32
+	// Digit used to end input if less than `maxLength` digits have been pressed.
+	Terminator *string
+	// Duration, in milliseconds, to wait for a DTMF digit in-between individual digit inputs. If not set, `digitTimeout` will use the same duration as `timeout`.
+	DigitTimeout *int32
+	PlayContent  *PlayContent
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+}
+
+type _DtmfCaptureRequest DtmfCaptureRequest
+
+// NewDtmfCaptureRequest instantiates a new DtmfCaptureRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDtmfCaptureRequest(maxLength int32, timeout int32) *DtmfCaptureRequest {
+	this := DtmfCaptureRequest{}
+	this.MaxLength = maxLength
+	this.Timeout = timeout
+	return &this
+}
+
+// NewDtmfCaptureRequestWithDefaults instantiates a new DtmfCaptureRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDtmfCaptureRequestWithDefaults() *DtmfCaptureRequest {
+	this := DtmfCaptureRequest{}
+
+	return &this
+}
+
+// GetMaxLength returns the MaxLength field value
+func (o *DtmfCaptureRequest) GetMaxLength() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.MaxLength
+}
+
+// GetMaxLengthOk returns a tuple with the MaxLength field value
+// and a boolean to check if the value has been set.
+func (o *DtmfCaptureRequest) GetMaxLengthOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MaxLength, true
+}
+
+// SetMaxLength sets field value
+func (o *DtmfCaptureRequest) SetMaxLength(v int32) {
+	o.MaxLength = v
+}
+
+// GetTimeout returns the Timeout field value
+func (o *DtmfCaptureRequest) GetTimeout() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value
+// and a boolean to check if the value has been set.
+func (o *DtmfCaptureRequest) GetTimeoutOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Timeout, true
+}
+
+// SetTimeout sets field value
+func (o *DtmfCaptureRequest) SetTimeout(v int32) {
+	o.Timeout = v
+}
+
+// GetTerminator returns the Terminator field value if set, zero value otherwise.
+func (o *DtmfCaptureRequest) GetTerminator() string {
+	if o == nil || IsNil(o.Terminator) {
+		var ret string
+		return ret
+	}
+	return *o.Terminator
+}
+
+// GetTerminatorOk returns a tuple with the Terminator field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfCaptureRequest) GetTerminatorOk() (*string, bool) {
+	if o == nil || IsNil(o.Terminator) {
+		return nil, false
+	}
+	return o.Terminator, true
+}
+
+// HasTerminator returns a boolean if a field has been set.
+func (o *DtmfCaptureRequest) HasTerminator() bool {
+	if o != nil && !IsNil(o.Terminator) {
+		return true
+	}
+
+	return false
+}
+
+// SetTerminator gets a reference to the given string and assigns it to the Terminator field.
+func (o *DtmfCaptureRequest) SetTerminator(v string) {
+	o.Terminator = &v
+}
+
+// GetDigitTimeout returns the DigitTimeout field value if set, zero value otherwise.
+func (o *DtmfCaptureRequest) GetDigitTimeout() int32 {
+	if o == nil || IsNil(o.DigitTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.DigitTimeout
+}
+
+// GetDigitTimeoutOk returns a tuple with the DigitTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfCaptureRequest) GetDigitTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.DigitTimeout) {
+		return nil, false
+	}
+	return o.DigitTimeout, true
+}
+
+// HasDigitTimeout returns a boolean if a field has been set.
+func (o *DtmfCaptureRequest) HasDigitTimeout() bool {
+	if o != nil && !IsNil(o.DigitTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetDigitTimeout gets a reference to the given int32 and assigns it to the DigitTimeout field.
+func (o *DtmfCaptureRequest) SetDigitTimeout(v int32) {
+	o.DigitTimeout = &v
+}
+
+// GetPlayContent returns the PlayContent field value if set, zero value otherwise.
+func (o *DtmfCaptureRequest) GetPlayContent() PlayContent {
+	if o == nil || IsNil(o.PlayContent) {
+		var ret PlayContent
+		return ret
+	}
+	return *o.PlayContent
+}
+
+// GetPlayContentOk returns a tuple with the PlayContent field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfCaptureRequest) GetPlayContentOk() (*PlayContent, bool) {
+	if o == nil || IsNil(o.PlayContent) {
+		return nil, false
+	}
+	return o.PlayContent, true
+}
+
+// HasPlayContent returns a boolean if a field has been set.
+func (o *DtmfCaptureRequest) HasPlayContent() bool {
+	if o != nil && !IsNil(o.PlayContent) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlayContent gets a reference to the given PlayContent and assigns it to the PlayContent field.
+func (o *DtmfCaptureRequest) SetPlayContent(v PlayContent) {
+	o.PlayContent = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *DtmfCaptureRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfCaptureRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *DtmfCaptureRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *DtmfCaptureRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o DtmfCaptureRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DtmfCaptureRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["maxLength"] = o.MaxLength
+	toSerialize["timeout"] = o.Timeout
+	if !IsNil(o.Terminator) {
+		toSerialize["terminator"] = o.Terminator
+	}
+	if !IsNil(o.DigitTimeout) {
+		toSerialize["digitTimeout"] = o.DigitTimeout
+	}
+	if !IsNil(o.PlayContent) {
+		toSerialize["playContent"] = o.PlayContent
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableDtmfCaptureRequest struct {
+	value *DtmfCaptureRequest
+	isSet bool
+}
+
+func (v NullableDtmfCaptureRequest) Get() *DtmfCaptureRequest {
+	return v.value
+}
+
+func (v *NullableDtmfCaptureRequest) Set(val *DtmfCaptureRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDtmfCaptureRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDtmfCaptureRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDtmfCaptureRequest(val *DtmfCaptureRequest) *NullableDtmfCaptureRequest {
+	return &NullableDtmfCaptureRequest{value: val, isSet: true}
+}
+
+func (v NullableDtmfCaptureRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDtmfCaptureRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dtmf_options.go b/pkg/infobip/models/voice/dtmf_options.go
new file mode 100644
index 0000000..bf43cb9
--- /dev/null
+++ b/pkg/infobip/models/voice/dtmf_options.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DtmfOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DtmfOptions{}
+
+// DtmfOptions struct for DtmfOptions
+type DtmfOptions struct {
+	// Maximum acceptable number of digits. Capturing is stopped after this number of digits has been entered. Max accepted value is 255. If not set, maximum value will be used.
+	MaxInputLength *int32
+	// Map of expected collected DTMF values with some real meaning. (Example: if you have multilingual IVR, and option for users to press 1 to enter \"English\" menu, you can define {\"1\":\"English\"}, so the reporting and analysis will be easier). When this option is defined additional variable is present in the scenario. If you set your capture action variable name to myVar, then you will get additional variable myVar_Meaning containing the mapped value for a collected DTMF.
+	MappedValues map[string]interface{}
+}
+
+// NewDtmfOptions instantiates a new DtmfOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDtmfOptions() *DtmfOptions {
+	this := DtmfOptions{}
+	return &this
+}
+
+// NewDtmfOptionsWithDefaults instantiates a new DtmfOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDtmfOptionsWithDefaults() *DtmfOptions {
+	this := DtmfOptions{}
+
+	return &this
+}
+
+// GetMaxInputLength returns the MaxInputLength field value if set, zero value otherwise.
+func (o *DtmfOptions) GetMaxInputLength() int32 {
+	if o == nil || IsNil(o.MaxInputLength) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxInputLength
+}
+
+// GetMaxInputLengthOk returns a tuple with the MaxInputLength field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfOptions) GetMaxInputLengthOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxInputLength) {
+		return nil, false
+	}
+	return o.MaxInputLength, true
+}
+
+// HasMaxInputLength returns a boolean if a field has been set.
+func (o *DtmfOptions) HasMaxInputLength() bool {
+	if o != nil && !IsNil(o.MaxInputLength) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxInputLength gets a reference to the given int32 and assigns it to the MaxInputLength field.
+func (o *DtmfOptions) SetMaxInputLength(v int32) {
+	o.MaxInputLength = &v
+}
+
+// GetMappedValues returns the MappedValues field value if set, zero value otherwise.
+func (o *DtmfOptions) GetMappedValues() map[string]interface{} {
+	if o == nil || IsNil(o.MappedValues) {
+		var ret map[string]interface{}
+		return ret
+	}
+	return o.MappedValues
+}
+
+// GetMappedValuesOk returns a tuple with the MappedValues field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfOptions) GetMappedValuesOk() (map[string]interface{}, bool) {
+	if o == nil || IsNil(o.MappedValues) {
+		return map[string]interface{}{}, false
+	}
+	return o.MappedValues, true
+}
+
+// HasMappedValues returns a boolean if a field has been set.
+func (o *DtmfOptions) HasMappedValues() bool {
+	if o != nil && !IsNil(o.MappedValues) {
+		return true
+	}
+
+	return false
+}
+
+// SetMappedValues gets a reference to the given map[string]interface{} and assigns it to the MappedValues field.
+func (o *DtmfOptions) SetMappedValues(v map[string]interface{}) {
+	o.MappedValues = v
+}
+
+func (o DtmfOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DtmfOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MaxInputLength) {
+		toSerialize["maxInputLength"] = o.MaxInputLength
+	}
+	if !IsNil(o.MappedValues) {
+		toSerialize["mappedValues"] = o.MappedValues
+	}
+	return toSerialize, nil
+}
+
+type NullableDtmfOptions struct {
+	value *DtmfOptions
+	isSet bool
+}
+
+func (v NullableDtmfOptions) Get() *DtmfOptions {
+	return v.value
+}
+
+func (v *NullableDtmfOptions) Set(val *DtmfOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDtmfOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDtmfOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDtmfOptions(val *DtmfOptions) *NullableDtmfOptions {
+	return &NullableDtmfOptions{value: val, isSet: true}
+}
+
+func (v NullableDtmfOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDtmfOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dtmf_send_request.go b/pkg/infobip/models/voice/dtmf_send_request.go
new file mode 100644
index 0000000..1a5bc48
--- /dev/null
+++ b/pkg/infobip/models/voice/dtmf_send_request.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DtmfSendRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DtmfSendRequest{}
+
+// DtmfSendRequest struct for DtmfSendRequest
+type DtmfSendRequest struct {
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+	// DTMF digits to send.
+	Dtmf string
+}
+
+type _DtmfSendRequest DtmfSendRequest
+
+// NewDtmfSendRequest instantiates a new DtmfSendRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewDtmfSendRequest(dtmf string) *DtmfSendRequest {
+	this := DtmfSendRequest{}
+	this.Dtmf = dtmf
+	return &this
+}
+
+// NewDtmfSendRequestWithDefaults instantiates a new DtmfSendRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDtmfSendRequestWithDefaults() *DtmfSendRequest {
+	this := DtmfSendRequest{}
+
+	return &this
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *DtmfSendRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfSendRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *DtmfSendRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *DtmfSendRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetDtmf returns the Dtmf field value
+func (o *DtmfSendRequest) GetDtmf() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value
+// and a boolean to check if the value has been set.
+func (o *DtmfSendRequest) GetDtmfOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Dtmf, true
+}
+
+// SetDtmf sets field value
+func (o *DtmfSendRequest) SetDtmf(v string) {
+	o.Dtmf = v
+}
+
+func (o DtmfSendRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DtmfSendRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	toSerialize["dtmf"] = o.Dtmf
+	return toSerialize, nil
+}
+
+type NullableDtmfSendRequest struct {
+	value *DtmfSendRequest
+	isSet bool
+}
+
+func (v NullableDtmfSendRequest) Get() *DtmfSendRequest {
+	return v.value
+}
+
+func (v *NullableDtmfSendRequest) Set(val *DtmfSendRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDtmfSendRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDtmfSendRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDtmfSendRequest(val *DtmfSendRequest) *NullableDtmfSendRequest {
+	return &NullableDtmfSendRequest{value: val, isSet: true}
+}
+
+func (v NullableDtmfSendRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDtmfSendRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dtmf_termination.go b/pkg/infobip/models/voice/dtmf_termination.go
new file mode 100644
index 0000000..90b564c
--- /dev/null
+++ b/pkg/infobip/models/voice/dtmf_termination.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the DtmfTermination type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &DtmfTermination{}
+
+// DtmfTermination struct for DtmfTermination
+type DtmfTermination struct {
+	Type TerminationType
+	// Digits used to end the audio playback. If no digits are set, any DTMF digit will end the audio playback. After first DTMF digit is pressed, playback will stop and pressed digit will be present in `PLAY_FINISHED` or `SAY_FINISHED` event.  If terminator is set to `123`, pressing either `1`, `2` or `3` will terminate the playback.
+	Terminator *string
+}
+
+// NewDtmfTermination instantiates a new DtmfTermination object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewDtmfTermination() *DtmfTermination {
+	this := DtmfTermination{}
+	this.Type = "DTMF"
+	return &this
+}
+
+// NewDtmfTerminationWithDefaults instantiates a new DtmfTermination object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewDtmfTerminationWithDefaults() *DtmfTermination {
+	this := DtmfTermination{}
+	this.Type = "DTMF"
+	return &this
+}
+
+// GetTerminator returns the Terminator field value if set, zero value otherwise.
+func (o *DtmfTermination) GetTerminator() string {
+	if o == nil || IsNil(o.Terminator) {
+		var ret string
+		return ret
+	}
+	return *o.Terminator
+}
+
+// GetTerminatorOk returns a tuple with the Terminator field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *DtmfTermination) GetTerminatorOk() (*string, bool) {
+	if o == nil || IsNil(o.Terminator) {
+		return nil, false
+	}
+	return o.Terminator, true
+}
+
+// HasTerminator returns a boolean if a field has been set.
+func (o *DtmfTermination) HasTerminator() bool {
+	if o != nil && !IsNil(o.Terminator) {
+		return true
+	}
+
+	return false
+}
+
+// SetTerminator gets a reference to the given string and assigns it to the Terminator field.
+func (o *DtmfTermination) SetTerminator(v string) {
+	o.Terminator = &v
+}
+
+func (o DtmfTermination) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o DtmfTermination) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Terminator) {
+		toSerialize["terminator"] = o.Terminator
+	}
+	return toSerialize, nil
+}
+
+type NullableDtmfTermination struct {
+	value *DtmfTermination
+	isSet bool
+}
+
+func (v NullableDtmfTermination) Get() *DtmfTermination {
+	return v.value
+}
+
+func (v *NullableDtmfTermination) Set(val *DtmfTermination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDtmfTermination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDtmfTermination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDtmfTermination(val *DtmfTermination) *NullableDtmfTermination {
+	return &NullableDtmfTermination{value: val, isSet: true}
+}
+
+func (v NullableDtmfTermination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDtmfTermination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/dtmf_type.go b/pkg/infobip/models/voice/dtmf_type.go
new file mode 100644
index 0000000..b294ee0
--- /dev/null
+++ b/pkg/infobip/models/voice/dtmf_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// DtmfType DTMF type.
+type DtmfType string
+
+// List of DtmfType
+const (
+	DTMFTYPE_RFC2833 DtmfType = "RFC2833"
+	DTMFTYPE_INBAND  DtmfType = "INBAND"
+)
+
+// All allowed values of DtmfType enum
+var AllowedDtmfTypeEnumValues = []DtmfType{
+	"RFC2833",
+	"INBAND",
+}
+
+func (v *DtmfType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := DtmfType(value)
+	for _, existing := range AllowedDtmfTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid DtmfType", value)
+}
+
+// NewDtmfTypeFromValue returns a pointer to a valid DtmfType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewDtmfTypeFromValue(v string) (*DtmfType, error) {
+	ev := DtmfType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for DtmfType: valid values are %v", v, AllowedDtmfTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v DtmfType) IsValid() bool {
+	for _, existing := range AllowedDtmfTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to DtmfType value
+func (v DtmfType) Ptr() *DtmfType {
+	return &v
+}
+
+type NullableDtmfType struct {
+	value *DtmfType
+	isSet bool
+}
+
+func (v NullableDtmfType) Get() *DtmfType {
+	return v.value
+}
+
+func (v *NullableDtmfType) Set(val *DtmfType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableDtmfType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableDtmfType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableDtmfType(val *DtmfType) *NullableDtmfType {
+	return &NullableDtmfType{value: val, isSet: true}
+}
+
+func (v NullableDtmfType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableDtmfType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/error_code.go b/pkg/infobip/models/voice/error_code.go
new file mode 100644
index 0000000..802a924
--- /dev/null
+++ b/pkg/infobip/models/voice/error_code.go
@@ -0,0 +1,132 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ErrorCode Error code to hang up with. There are rules for using error codes.  `NORMAL_HANGUP` - Call needs to be established.  `MACHINE_DETECTED` - Call needs to be established and must be `OUTBOUND`.  `NO_ANSWER` - Call cannot be established.  `BUSY` - Call cannot be established.  `CANCELLED` - Call cannot be established.  `REJECTED` - Call cannot be established.  `FORBIDDEN` - Call cannot be established.  `DESTINATION_NOT_FOUND` - Call cannot be established.  `DESTINATION_UNAVAILABLE` - Call cannot be established.  `INVALID_DESTINATION` - Call cannot be established.  `SERVICE_UNAVAILABLE` - Call cannot be established.
+type ErrorCode string
+
+// List of ErrorCode
+const (
+	ERRORCODE_NORMAL_HANGUP           ErrorCode = "NORMAL_HANGUP"
+	ERRORCODE_MACHINE_DETECTED        ErrorCode = "MACHINE_DETECTED"
+	ERRORCODE_NO_ANSWER               ErrorCode = "NO_ANSWER"
+	ERRORCODE_BUSY                    ErrorCode = "BUSY"
+	ERRORCODE_CANCELLED               ErrorCode = "CANCELLED"
+	ERRORCODE_REJECTED                ErrorCode = "REJECTED"
+	ERRORCODE_FORBIDDEN               ErrorCode = "FORBIDDEN"
+	ERRORCODE_DESTINATION_NOT_FOUND   ErrorCode = "DESTINATION_NOT_FOUND"
+	ERRORCODE_DESTINATION_UNAVAILABLE ErrorCode = "DESTINATION_UNAVAILABLE"
+	ERRORCODE_INVALID_DESTINATION     ErrorCode = "INVALID_DESTINATION"
+	ERRORCODE_INVALID_REQUEST         ErrorCode = "INVALID_REQUEST"
+	ERRORCODE_REQUEST_TIMEOUT         ErrorCode = "REQUEST_TIMEOUT"
+	ERRORCODE_SERVICE_UNAVAILABLE     ErrorCode = "SERVICE_UNAVAILABLE"
+)
+
+// All allowed values of ErrorCode enum
+var AllowedErrorCodeEnumValues = []ErrorCode{
+	"NORMAL_HANGUP",
+	"MACHINE_DETECTED",
+	"NO_ANSWER",
+	"BUSY",
+	"CANCELLED",
+	"REJECTED",
+	"FORBIDDEN",
+	"DESTINATION_NOT_FOUND",
+	"DESTINATION_UNAVAILABLE",
+	"INVALID_DESTINATION",
+	"INVALID_REQUEST",
+	"REQUEST_TIMEOUT",
+	"SERVICE_UNAVAILABLE",
+}
+
+func (v *ErrorCode) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ErrorCode(value)
+	for _, existing := range AllowedErrorCodeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ErrorCode", value)
+}
+
+// NewErrorCodeFromValue returns a pointer to a valid ErrorCode
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewErrorCodeFromValue(v string) (*ErrorCode, error) {
+	ev := ErrorCode(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ErrorCode: valid values are %v", v, AllowedErrorCodeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ErrorCode) IsValid() bool {
+	for _, existing := range AllowedErrorCodeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ErrorCode value
+func (v ErrorCode) Ptr() *ErrorCode {
+	return &v
+}
+
+type NullableErrorCode struct {
+	value *ErrorCode
+	isSet bool
+}
+
+func (v NullableErrorCode) Get() *ErrorCode {
+	return v.value
+}
+
+func (v *NullableErrorCode) Set(val *ErrorCode) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableErrorCode) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableErrorCode) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableErrorCode(val *ErrorCode) *NullableErrorCode {
+	return &NullableErrorCode{value: val, isSet: true}
+}
+
+func (v NullableErrorCode) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableErrorCode) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/error_code_info.go b/pkg/infobip/models/voice/error_code_info.go
new file mode 100644
index 0000000..dad7196
--- /dev/null
+++ b/pkg/infobip/models/voice/error_code_info.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ErrorCodeInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ErrorCodeInfo{}
+
+// ErrorCodeInfo Reason why the call has finished.
+type ErrorCodeInfo struct {
+	// Unique ErrorCode ID.
+	Id *int32
+	// Unique ErrorCode name in machine-readable format.
+	Name *string
+	// ErrorCode description in human-readable format.
+	Description *string
+}
+
+// NewErrorCodeInfo instantiates a new ErrorCodeInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewErrorCodeInfo() *ErrorCodeInfo {
+	this := ErrorCodeInfo{}
+	return &this
+}
+
+// NewErrorCodeInfoWithDefaults instantiates a new ErrorCodeInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewErrorCodeInfoWithDefaults() *ErrorCodeInfo {
+	this := ErrorCodeInfo{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *ErrorCodeInfo) GetId() int32 {
+	if o == nil || IsNil(o.Id) {
+		var ret int32
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ErrorCodeInfo) GetIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *ErrorCodeInfo) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given int32 and assigns it to the Id field.
+func (o *ErrorCodeInfo) SetId(v int32) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *ErrorCodeInfo) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ErrorCodeInfo) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *ErrorCodeInfo) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *ErrorCodeInfo) SetName(v string) {
+	o.Name = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *ErrorCodeInfo) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ErrorCodeInfo) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *ErrorCodeInfo) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *ErrorCodeInfo) SetDescription(v string) {
+	o.Description = &v
+}
+
+func (o ErrorCodeInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ErrorCodeInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	return toSerialize, nil
+}
+
+type NullableErrorCodeInfo struct {
+	value *ErrorCodeInfo
+	isSet bool
+}
+
+func (v NullableErrorCodeInfo) Get() *ErrorCodeInfo {
+	return v.value
+}
+
+func (v *NullableErrorCodeInfo) Set(val *ErrorCodeInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableErrorCodeInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableErrorCodeInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableErrorCodeInfo(val *ErrorCodeInfo) *NullableErrorCodeInfo {
+	return &NullableErrorCodeInfo{value: val, isSet: true}
+}
+
+func (v NullableErrorCodeInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableErrorCodeInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/extended_sip_trunk_status_response.go b/pkg/infobip/models/voice/extended_sip_trunk_status_response.go
new file mode 100644
index 0000000..7510329
--- /dev/null
+++ b/pkg/infobip/models/voice/extended_sip_trunk_status_response.go
@@ -0,0 +1,237 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ExtendedSipTrunkStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ExtendedSipTrunkStatusResponse{}
+
+// ExtendedSipTrunkStatusResponse struct for ExtendedSipTrunkStatusResponse
+type ExtendedSipTrunkStatusResponse struct {
+	AdminStatus        *SipTrunkAdminStatus
+	ActionStatus       *SipTrunkActionStatusResponse
+	RegistrationStatus *SipTrunkRegistrationStatus
+	// Number of active calls.
+	ActiveCalls *int32
+}
+
+// NewExtendedSipTrunkStatusResponse instantiates a new ExtendedSipTrunkStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewExtendedSipTrunkStatusResponse() *ExtendedSipTrunkStatusResponse {
+	this := ExtendedSipTrunkStatusResponse{}
+	return &this
+}
+
+// NewExtendedSipTrunkStatusResponseWithDefaults instantiates a new ExtendedSipTrunkStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewExtendedSipTrunkStatusResponseWithDefaults() *ExtendedSipTrunkStatusResponse {
+	this := ExtendedSipTrunkStatusResponse{}
+
+	return &this
+}
+
+// GetAdminStatus returns the AdminStatus field value if set, zero value otherwise.
+func (o *ExtendedSipTrunkStatusResponse) GetAdminStatus() SipTrunkAdminStatus {
+	if o == nil || IsNil(o.AdminStatus) {
+		var ret SipTrunkAdminStatus
+		return ret
+	}
+	return *o.AdminStatus
+}
+
+// GetAdminStatusOk returns a tuple with the AdminStatus field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ExtendedSipTrunkStatusResponse) GetAdminStatusOk() (*SipTrunkAdminStatus, bool) {
+	if o == nil || IsNil(o.AdminStatus) {
+		return nil, false
+	}
+	return o.AdminStatus, true
+}
+
+// HasAdminStatus returns a boolean if a field has been set.
+func (o *ExtendedSipTrunkStatusResponse) HasAdminStatus() bool {
+	if o != nil && !IsNil(o.AdminStatus) {
+		return true
+	}
+
+	return false
+}
+
+// SetAdminStatus gets a reference to the given SipTrunkAdminStatus and assigns it to the AdminStatus field.
+func (o *ExtendedSipTrunkStatusResponse) SetAdminStatus(v SipTrunkAdminStatus) {
+	o.AdminStatus = &v
+}
+
+// GetActionStatus returns the ActionStatus field value if set, zero value otherwise.
+func (o *ExtendedSipTrunkStatusResponse) GetActionStatus() SipTrunkActionStatusResponse {
+	if o == nil || IsNil(o.ActionStatus) {
+		var ret SipTrunkActionStatusResponse
+		return ret
+	}
+	return *o.ActionStatus
+}
+
+// GetActionStatusOk returns a tuple with the ActionStatus field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ExtendedSipTrunkStatusResponse) GetActionStatusOk() (*SipTrunkActionStatusResponse, bool) {
+	if o == nil || IsNil(o.ActionStatus) {
+		return nil, false
+	}
+	return o.ActionStatus, true
+}
+
+// HasActionStatus returns a boolean if a field has been set.
+func (o *ExtendedSipTrunkStatusResponse) HasActionStatus() bool {
+	if o != nil && !IsNil(o.ActionStatus) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionStatus gets a reference to the given SipTrunkActionStatusResponse and assigns it to the ActionStatus field.
+func (o *ExtendedSipTrunkStatusResponse) SetActionStatus(v SipTrunkActionStatusResponse) {
+	o.ActionStatus = &v
+}
+
+// GetRegistrationStatus returns the RegistrationStatus field value if set, zero value otherwise.
+func (o *ExtendedSipTrunkStatusResponse) GetRegistrationStatus() SipTrunkRegistrationStatus {
+	if o == nil || IsNil(o.RegistrationStatus) {
+		var ret SipTrunkRegistrationStatus
+		return ret
+	}
+	return *o.RegistrationStatus
+}
+
+// GetRegistrationStatusOk returns a tuple with the RegistrationStatus field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ExtendedSipTrunkStatusResponse) GetRegistrationStatusOk() (*SipTrunkRegistrationStatus, bool) {
+	if o == nil || IsNil(o.RegistrationStatus) {
+		return nil, false
+	}
+	return o.RegistrationStatus, true
+}
+
+// HasRegistrationStatus returns a boolean if a field has been set.
+func (o *ExtendedSipTrunkStatusResponse) HasRegistrationStatus() bool {
+	if o != nil && !IsNil(o.RegistrationStatus) {
+		return true
+	}
+
+	return false
+}
+
+// SetRegistrationStatus gets a reference to the given SipTrunkRegistrationStatus and assigns it to the RegistrationStatus field.
+func (o *ExtendedSipTrunkStatusResponse) SetRegistrationStatus(v SipTrunkRegistrationStatus) {
+	o.RegistrationStatus = &v
+}
+
+// GetActiveCalls returns the ActiveCalls field value if set, zero value otherwise.
+func (o *ExtendedSipTrunkStatusResponse) GetActiveCalls() int32 {
+	if o == nil || IsNil(o.ActiveCalls) {
+		var ret int32
+		return ret
+	}
+	return *o.ActiveCalls
+}
+
+// GetActiveCallsOk returns a tuple with the ActiveCalls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ExtendedSipTrunkStatusResponse) GetActiveCallsOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActiveCalls) {
+		return nil, false
+	}
+	return o.ActiveCalls, true
+}
+
+// HasActiveCalls returns a boolean if a field has been set.
+func (o *ExtendedSipTrunkStatusResponse) HasActiveCalls() bool {
+	if o != nil && !IsNil(o.ActiveCalls) {
+		return true
+	}
+
+	return false
+}
+
+// SetActiveCalls gets a reference to the given int32 and assigns it to the ActiveCalls field.
+func (o *ExtendedSipTrunkStatusResponse) SetActiveCalls(v int32) {
+	o.ActiveCalls = &v
+}
+
+func (o ExtendedSipTrunkStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ExtendedSipTrunkStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.AdminStatus) {
+		toSerialize["adminStatus"] = o.AdminStatus
+	}
+	if !IsNil(o.ActionStatus) {
+		toSerialize["actionStatus"] = o.ActionStatus
+	}
+	if !IsNil(o.RegistrationStatus) {
+		toSerialize["registrationStatus"] = o.RegistrationStatus
+	}
+	if !IsNil(o.ActiveCalls) {
+		toSerialize["activeCalls"] = o.ActiveCalls
+	}
+	return toSerialize, nil
+}
+
+type NullableExtendedSipTrunkStatusResponse struct {
+	value *ExtendedSipTrunkStatusResponse
+	isSet bool
+}
+
+func (v NullableExtendedSipTrunkStatusResponse) Get() *ExtendedSipTrunkStatusResponse {
+	return v.value
+}
+
+func (v *NullableExtendedSipTrunkStatusResponse) Set(val *ExtendedSipTrunkStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableExtendedSipTrunkStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableExtendedSipTrunkStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableExtendedSipTrunkStatusResponse(val *ExtendedSipTrunkStatusResponse) *NullableExtendedSipTrunkStatusResponse {
+	return &NullableExtendedSipTrunkStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableExtendedSipTrunkStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableExtendedSipTrunkStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/fax_type.go b/pkg/infobip/models/voice/fax_type.go
new file mode 100644
index 0000000..4ce247c
--- /dev/null
+++ b/pkg/infobip/models/voice/fax_type.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FaxType Fax type.
+type FaxType string
+
+// List of FaxType
+const (
+	FAXTYPE_NONE   FaxType = "NONE"
+	FAXTYPE_INBAND FaxType = "INBAND"
+	FAXTYPE_T38    FaxType = "T38"
+)
+
+// All allowed values of FaxType enum
+var AllowedFaxTypeEnumValues = []FaxType{
+	"NONE",
+	"INBAND",
+	"T38",
+}
+
+func (v *FaxType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FaxType(value)
+	for _, existing := range AllowedFaxTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FaxType", value)
+}
+
+// NewFaxTypeFromValue returns a pointer to a valid FaxType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFaxTypeFromValue(v string) (*FaxType, error) {
+	ev := FaxType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FaxType: valid values are %v", v, AllowedFaxTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FaxType) IsValid() bool {
+	for _, existing := range AllowedFaxTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FaxType value
+func (v FaxType) Ptr() *FaxType {
+	return &v
+}
+
+type NullableFaxType struct {
+	value *FaxType
+	isSet bool
+}
+
+func (v NullableFaxType) Get() *FaxType {
+	return v.value
+}
+
+func (v *NullableFaxType) Set(val *FaxType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFaxType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFaxType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFaxType(val *FaxType) *NullableFaxType {
+	return &NullableFaxType{value: val, isSet: true}
+}
+
+func (v NullableFaxType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFaxType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/file.go b/pkg/infobip/models/voice/file.go
new file mode 100644
index 0000000..e4fb875
--- /dev/null
+++ b/pkg/infobip/models/voice/file.go
@@ -0,0 +1,370 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the File type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &File{}
+
+// File struct for File
+type File struct {
+	// File ID.
+	Id *string
+	// File name.
+	Name       string
+	FileFormat FileFormat
+	// File size in bytes.
+	Size           *int64
+	CreationMethod *CreationMethod
+	// File creation time.
+	CreationTime *Time
+	// File expiration time.
+	ExpirationTime *Time
+	// File duration in seconds.
+	Duration *int64
+}
+
+type _File File
+
+// NewFile instantiates a new File object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFile(name string, fileFormat FileFormat) *File {
+	this := File{}
+	this.Name = name
+	this.FileFormat = fileFormat
+	return &this
+}
+
+// NewFileWithDefaults instantiates a new File object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFileWithDefaults() *File {
+	this := File{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *File) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *File) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *File) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *File) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value
+func (o *File) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *File) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *File) SetName(v string) {
+	o.Name = v
+}
+
+// GetFileFormat returns the FileFormat field value
+func (o *File) GetFileFormat() FileFormat {
+	if o == nil {
+		var ret FileFormat
+		return ret
+	}
+
+	return o.FileFormat
+}
+
+// GetFileFormatOk returns a tuple with the FileFormat field value
+// and a boolean to check if the value has been set.
+func (o *File) GetFileFormatOk() (*FileFormat, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FileFormat, true
+}
+
+// SetFileFormat sets field value
+func (o *File) SetFileFormat(v FileFormat) {
+	o.FileFormat = v
+}
+
+// GetSize returns the Size field value if set, zero value otherwise.
+func (o *File) GetSize() int64 {
+	if o == nil || IsNil(o.Size) {
+		var ret int64
+		return ret
+	}
+	return *o.Size
+}
+
+// GetSizeOk returns a tuple with the Size field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *File) GetSizeOk() (*int64, bool) {
+	if o == nil || IsNil(o.Size) {
+		return nil, false
+	}
+	return o.Size, true
+}
+
+// HasSize returns a boolean if a field has been set.
+func (o *File) HasSize() bool {
+	if o != nil && !IsNil(o.Size) {
+		return true
+	}
+
+	return false
+}
+
+// SetSize gets a reference to the given int64 and assigns it to the Size field.
+func (o *File) SetSize(v int64) {
+	o.Size = &v
+}
+
+// GetCreationMethod returns the CreationMethod field value if set, zero value otherwise.
+func (o *File) GetCreationMethod() CreationMethod {
+	if o == nil || IsNil(o.CreationMethod) {
+		var ret CreationMethod
+		return ret
+	}
+	return *o.CreationMethod
+}
+
+// GetCreationMethodOk returns a tuple with the CreationMethod field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *File) GetCreationMethodOk() (*CreationMethod, bool) {
+	if o == nil || IsNil(o.CreationMethod) {
+		return nil, false
+	}
+	return o.CreationMethod, true
+}
+
+// HasCreationMethod returns a boolean if a field has been set.
+func (o *File) HasCreationMethod() bool {
+	if o != nil && !IsNil(o.CreationMethod) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreationMethod gets a reference to the given CreationMethod and assigns it to the CreationMethod field.
+func (o *File) SetCreationMethod(v CreationMethod) {
+	o.CreationMethod = &v
+}
+
+// GetCreationTime returns the CreationTime field value if set, zero value otherwise.
+func (o *File) GetCreationTime() Time {
+	if o == nil || IsNil(o.CreationTime) {
+		var ret Time
+		return ret
+	}
+	return *o.CreationTime
+}
+
+// GetCreationTimeOk returns a tuple with the CreationTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *File) GetCreationTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.CreationTime) {
+		return nil, false
+	}
+	return o.CreationTime, true
+}
+
+// HasCreationTime returns a boolean if a field has been set.
+func (o *File) HasCreationTime() bool {
+	if o != nil && !IsNil(o.CreationTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreationTime gets a reference to the given Time and assigns it to the CreationTime field.
+func (o *File) SetCreationTime(v Time) {
+	o.CreationTime = &v
+}
+
+// GetExpirationTime returns the ExpirationTime field value if set, zero value otherwise.
+func (o *File) GetExpirationTime() Time {
+	if o == nil || IsNil(o.ExpirationTime) {
+		var ret Time
+		return ret
+	}
+	return *o.ExpirationTime
+}
+
+// GetExpirationTimeOk returns a tuple with the ExpirationTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *File) GetExpirationTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.ExpirationTime) {
+		return nil, false
+	}
+	return o.ExpirationTime, true
+}
+
+// HasExpirationTime returns a boolean if a field has been set.
+func (o *File) HasExpirationTime() bool {
+	if o != nil && !IsNil(o.ExpirationTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetExpirationTime gets a reference to the given Time and assigns it to the ExpirationTime field.
+func (o *File) SetExpirationTime(v Time) {
+	o.ExpirationTime = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *File) GetDuration() int64 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int64
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *File) GetDurationOk() (*int64, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *File) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int64 and assigns it to the Duration field.
+func (o *File) SetDuration(v int64) {
+	o.Duration = &v
+}
+
+func (o File) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o File) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	toSerialize["name"] = o.Name
+	toSerialize["fileFormat"] = o.FileFormat
+	if !IsNil(o.Size) {
+		toSerialize["size"] = o.Size
+	}
+	if !IsNil(o.CreationMethod) {
+		toSerialize["creationMethod"] = o.CreationMethod
+	}
+	if !IsNil(o.CreationTime) {
+		toSerialize["creationTime"] = o.CreationTime
+	}
+	if !IsNil(o.ExpirationTime) {
+		toSerialize["expirationTime"] = o.ExpirationTime
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	return toSerialize, nil
+}
+
+type NullableFile struct {
+	value *File
+	isSet bool
+}
+
+func (v NullableFile) Get() *File {
+	return v.value
+}
+
+func (v *NullableFile) Set(val *File) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFile) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFile) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFile(val *File) *NullableFile {
+	return &NullableFile{value: val, isSet: true}
+}
+
+func (v NullableFile) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFile) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/file_format.go b/pkg/infobip/models/voice/file_format.go
new file mode 100644
index 0000000..dfd2fb2
--- /dev/null
+++ b/pkg/infobip/models/voice/file_format.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// FileFormat File format.
+type FileFormat string
+
+// List of FileFormat
+const (
+	FILEFORMAT_MP3 FileFormat = "MP3"
+	FILEFORMAT_WAV FileFormat = "WAV"
+	FILEFORMAT_MP4 FileFormat = "MP4"
+)
+
+// All allowed values of FileFormat enum
+var AllowedFileFormatEnumValues = []FileFormat{
+	"MP3",
+	"WAV",
+	"MP4",
+}
+
+func (v *FileFormat) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := FileFormat(value)
+	for _, existing := range AllowedFileFormatEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid FileFormat", value)
+}
+
+// NewFileFormatFromValue returns a pointer to a valid FileFormat
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewFileFormatFromValue(v string) (*FileFormat, error) {
+	ev := FileFormat(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for FileFormat: valid values are %v", v, AllowedFileFormatEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v FileFormat) IsValid() bool {
+	for _, existing := range AllowedFileFormatEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to FileFormat value
+func (v FileFormat) Ptr() *FileFormat {
+	return &v
+}
+
+type NullableFileFormat struct {
+	value *FileFormat
+	isSet bool
+}
+
+func (v NullableFileFormat) Get() *FileFormat {
+	return v.value
+}
+
+func (v *NullableFileFormat) Set(val *FileFormat) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFileFormat) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFileFormat) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFileFormat(val *FileFormat) *NullableFileFormat {
+	return &NullableFileFormat{value: val, isSet: true}
+}
+
+func (v NullableFileFormat) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFileFormat) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/file_page.go b/pkg/infobip/models/voice/file_page.go
new file mode 100644
index 0000000..de959df
--- /dev/null
+++ b/pkg/infobip/models/voice/file_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FilePage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FilePage{}
+
+// FilePage struct for FilePage
+type FilePage struct {
+	// The list of the results for this page.
+	Results []File
+	Paging  *PageInfo
+}
+
+// NewFilePage instantiates a new FilePage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewFilePage() *FilePage {
+	this := FilePage{}
+	return &this
+}
+
+// NewFilePageWithDefaults instantiates a new FilePage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFilePageWithDefaults() *FilePage {
+	this := FilePage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *FilePage) GetResults() []File {
+	if o == nil || IsNil(o.Results) {
+		var ret []File
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FilePage) GetResultsOk() ([]File, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *FilePage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []File and assigns it to the Results field.
+func (o *FilePage) SetResults(v []File) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *FilePage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *FilePage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *FilePage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *FilePage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o FilePage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FilePage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableFilePage struct {
+	value *FilePage
+	isSet bool
+}
+
+func (v NullableFilePage) Get() *FilePage {
+	return v.value
+}
+
+func (v *NullableFilePage) Set(val *FilePage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFilePage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFilePage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFilePage(val *FilePage) *NullableFilePage {
+	return &NullableFilePage{value: val, isSet: true}
+}
+
+func (v NullableFilePage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFilePage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/file_play_content.go b/pkg/infobip/models/voice/file_play_content.go
new file mode 100644
index 0000000..99a7f1d
--- /dev/null
+++ b/pkg/infobip/models/voice/file_play_content.go
@@ -0,0 +1,125 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FilePlayContent type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FilePlayContent{}
+
+// FilePlayContent struct for FilePlayContent
+type FilePlayContent struct {
+	Type   PlayContentType
+	FileId string
+}
+
+type _FilePlayContent FilePlayContent
+
+// NewFilePlayContent instantiates a new FilePlayContent object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewFilePlayContent(fileId string) *FilePlayContent {
+	this := FilePlayContent{}
+	this.Type = "FILE"
+	this.FileId = fileId
+	return &this
+}
+
+// NewFilePlayContentWithDefaults instantiates a new FilePlayContent object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFilePlayContentWithDefaults() *FilePlayContent {
+	this := FilePlayContent{}
+	this.Type = "FILE"
+	return &this
+}
+
+// GetFileId returns the FileId field value
+func (o *FilePlayContent) GetFileId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value
+// and a boolean to check if the value has been set.
+func (o *FilePlayContent) GetFileIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FileId, true
+}
+
+// SetFileId sets field value
+func (o *FilePlayContent) SetFileId(v string) {
+	o.FileId = v
+}
+
+func (o FilePlayContent) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FilePlayContent) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["fileId"] = o.FileId
+	return toSerialize, nil
+}
+
+type NullableFilePlayContent struct {
+	value *FilePlayContent
+	isSet bool
+}
+
+func (v NullableFilePlayContent) Get() *FilePlayContent {
+	return v.value
+}
+
+func (v *NullableFilePlayContent) Set(val *FilePlayContent) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFilePlayContent) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFilePlayContent) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFilePlayContent(val *FilePlayContent) *NullableFilePlayContent {
+	return &NullableFilePlayContent{value: val, isSet: true}
+}
+
+func (v NullableFilePlayContent) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFilePlayContent) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/for_each.go b/pkg/infobip/models/voice/for_each.go
new file mode 100644
index 0000000..9fa4841
--- /dev/null
+++ b/pkg/infobip/models/voice/for_each.go
@@ -0,0 +1,215 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ForEach type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ForEach{}
+
+// ForEach For-each action is a control statement that executes a block of code for each of the values within the supplied list. The Supplied list of values can be static or dynamic (defined as user variable).
+type ForEach struct {
+	// Variable name that will be used inside the loop to represent single value from supplied list of values.
+	ForEach string
+	// Variable name that will be used inside the loop to represent single value from supplied list of values.
+	In string
+	// Variable name that will be used inside the loop to represent single value from supplied list of values.
+	Delimiter *string
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Do []ScriptInner
+}
+
+type _ForEach ForEach
+
+// NewForEach instantiates a new ForEach object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewForEach(forEach string, in string, do []ScriptInner) *ForEach {
+	this := ForEach{}
+	this.ForEach = forEach
+	this.In = in
+	this.Do = do
+	return &this
+}
+
+// NewForEachWithDefaults instantiates a new ForEach object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewForEachWithDefaults() *ForEach {
+	this := ForEach{}
+
+	return &this
+}
+
+// GetForEach returns the ForEach field value
+func (o *ForEach) GetForEach() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ForEach
+}
+
+// GetForEachOk returns a tuple with the ForEach field value
+// and a boolean to check if the value has been set.
+func (o *ForEach) GetForEachOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ForEach, true
+}
+
+// SetForEach sets field value
+func (o *ForEach) SetForEach(v string) {
+	o.ForEach = v
+}
+
+// GetIn returns the In field value
+func (o *ForEach) GetIn() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.In
+}
+
+// GetInOk returns a tuple with the In field value
+// and a boolean to check if the value has been set.
+func (o *ForEach) GetInOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.In, true
+}
+
+// SetIn sets field value
+func (o *ForEach) SetIn(v string) {
+	o.In = v
+}
+
+// GetDelimiter returns the Delimiter field value if set, zero value otherwise.
+func (o *ForEach) GetDelimiter() string {
+	if o == nil || IsNil(o.Delimiter) {
+		var ret string
+		return ret
+	}
+	return *o.Delimiter
+}
+
+// GetDelimiterOk returns a tuple with the Delimiter field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ForEach) GetDelimiterOk() (*string, bool) {
+	if o == nil || IsNil(o.Delimiter) {
+		return nil, false
+	}
+	return o.Delimiter, true
+}
+
+// HasDelimiter returns a boolean if a field has been set.
+func (o *ForEach) HasDelimiter() bool {
+	if o != nil && !IsNil(o.Delimiter) {
+		return true
+	}
+
+	return false
+}
+
+// SetDelimiter gets a reference to the given string and assigns it to the Delimiter field.
+func (o *ForEach) SetDelimiter(v string) {
+	o.Delimiter = &v
+}
+
+// GetDo returns the Do field value
+func (o *ForEach) GetDo() []ScriptInner {
+	if o == nil {
+		var ret []ScriptInner
+		return ret
+	}
+
+	return o.Do
+}
+
+// GetDoOk returns a tuple with the Do field value
+// and a boolean to check if the value has been set.
+func (o *ForEach) GetDoOk() ([]ScriptInner, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Do, true
+}
+
+// SetDo sets field value
+func (o *ForEach) SetDo(v []ScriptInner) {
+	o.Do = v
+}
+
+func (o ForEach) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ForEach) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["for-each"] = o.ForEach
+	toSerialize["in"] = o.In
+	if !IsNil(o.Delimiter) {
+		toSerialize["delimiter"] = o.Delimiter
+	}
+	toSerialize["do"] = o.Do
+	return toSerialize, nil
+}
+
+type NullableForEach struct {
+	value *ForEach
+	isSet bool
+}
+
+func (v NullableForEach) Get() *ForEach {
+	return v.value
+}
+
+func (v *NullableForEach) Set(val *ForEach) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableForEach) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableForEach) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableForEach(val *ForEach) *NullableForEach {
+	return &NullableForEach{value: val, isSet: true}
+}
+
+func (v NullableForEach) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableForEach) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/freshworks_provider.go b/pkg/infobip/models/voice/freshworks_provider.go
new file mode 100644
index 0000000..ecf86c5
--- /dev/null
+++ b/pkg/infobip/models/voice/freshworks_provider.go
@@ -0,0 +1,154 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the FreshworksProvider type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &FreshworksProvider{}
+
+// FreshworksProvider struct for FreshworksProvider
+type FreshworksProvider struct {
+	Type ProviderTrunkType
+	// Twilio account sid of the trunk.
+	AccountSid string
+	// Sip domain related to the trunk.
+	SipDomain string
+}
+
+type _FreshworksProvider FreshworksProvider
+
+// NewFreshworksProvider instantiates a new FreshworksProvider object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewFreshworksProvider(accountSid string, sipDomain string) *FreshworksProvider {
+	this := FreshworksProvider{}
+	this.Type = "FRESHWORKS"
+	this.AccountSid = accountSid
+	this.SipDomain = sipDomain
+	return &this
+}
+
+// NewFreshworksProviderWithDefaults instantiates a new FreshworksProvider object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewFreshworksProviderWithDefaults() *FreshworksProvider {
+	this := FreshworksProvider{}
+	this.Type = "FRESHWORKS"
+	return &this
+}
+
+// GetAccountSid returns the AccountSid field value
+func (o *FreshworksProvider) GetAccountSid() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.AccountSid
+}
+
+// GetAccountSidOk returns a tuple with the AccountSid field value
+// and a boolean to check if the value has been set.
+func (o *FreshworksProvider) GetAccountSidOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.AccountSid, true
+}
+
+// SetAccountSid sets field value
+func (o *FreshworksProvider) SetAccountSid(v string) {
+	o.AccountSid = v
+}
+
+// GetSipDomain returns the SipDomain field value
+func (o *FreshworksProvider) GetSipDomain() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.SipDomain
+}
+
+// GetSipDomainOk returns a tuple with the SipDomain field value
+// and a boolean to check if the value has been set.
+func (o *FreshworksProvider) GetSipDomainOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SipDomain, true
+}
+
+// SetSipDomain sets field value
+func (o *FreshworksProvider) SetSipDomain(v string) {
+	o.SipDomain = v
+}
+
+func (o FreshworksProvider) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o FreshworksProvider) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["accountSid"] = o.AccountSid
+	toSerialize["sipDomain"] = o.SipDomain
+	return toSerialize, nil
+}
+
+type NullableFreshworksProvider struct {
+	value *FreshworksProvider
+	isSet bool
+}
+
+func (v NullableFreshworksProvider) Get() *FreshworksProvider {
+	return v.value
+}
+
+func (v *NullableFreshworksProvider) Set(val *FreshworksProvider) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableFreshworksProvider) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableFreshworksProvider) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableFreshworksProvider(val *FreshworksProvider) *NullableFreshworksProvider {
+	return &NullableFreshworksProvider{value: val, isSet: true}
+}
+
+func (v NullableFreshworksProvider) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableFreshworksProvider) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/gender.go b/pkg/infobip/models/voice/gender.go
new file mode 100644
index 0000000..9b0d8a1
--- /dev/null
+++ b/pkg/infobip/models/voice/gender.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// Gender Voice gender in which text would be synthesized.
+type Gender string
+
+// List of Gender
+const (
+	GENDER_FEMALE Gender = "FEMALE"
+	GENDER_MALE   Gender = "MALE"
+)
+
+// All allowed values of Gender enum
+var AllowedGenderEnumValues = []Gender{
+	"FEMALE",
+	"MALE",
+}
+
+func (v *Gender) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := Gender(value)
+	for _, existing := range AllowedGenderEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid Gender", value)
+}
+
+// NewGenderFromValue returns a pointer to a valid Gender
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewGenderFromValue(v string) (*Gender, error) {
+	ev := Gender(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for Gender: valid values are %v", v, AllowedGenderEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v Gender) IsValid() bool {
+	for _, existing := range AllowedGenderEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to Gender value
+func (v Gender) Ptr() *Gender {
+	return &v
+}
+
+type NullableGender struct {
+	value *Gender
+	isSet bool
+}
+
+func (v NullableGender) Get() *Gender {
+	return v.value
+}
+
+func (v *NullableGender) Set(val *Gender) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGender) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGender) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGender(val *Gender) *NullableGender {
+	return &NullableGender{value: val, isSet: true}
+}
+
+func (v NullableGender) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGender) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/genesys_cloud_provider.go b/pkg/infobip/models/voice/genesys_cloud_provider.go
new file mode 100644
index 0000000..8f78018
--- /dev/null
+++ b/pkg/infobip/models/voice/genesys_cloud_provider.go
@@ -0,0 +1,199 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the GenesysCloudProvider type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &GenesysCloudProvider{}
+
+// GenesysCloudProvider struct for GenesysCloudProvider
+type GenesysCloudProvider struct {
+	Type   ProviderTrunkType
+	Region GenesysCloudRegion
+	// Outbound termination FQDN.
+	OutboundTerminationFQDN *string
+	// Inbound termination identifier.
+	InboundTerminationIdentifier *string
+}
+
+type _GenesysCloudProvider GenesysCloudProvider
+
+// NewGenesysCloudProvider instantiates a new GenesysCloudProvider object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewGenesysCloudProvider(region GenesysCloudRegion) *GenesysCloudProvider {
+	this := GenesysCloudProvider{}
+	this.Type = "GENESYS_CLOUD"
+	this.Region = region
+	return &this
+}
+
+// NewGenesysCloudProviderWithDefaults instantiates a new GenesysCloudProvider object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewGenesysCloudProviderWithDefaults() *GenesysCloudProvider {
+	this := GenesysCloudProvider{}
+	this.Type = "GENESYS_CLOUD"
+	return &this
+}
+
+// GetRegion returns the Region field value
+func (o *GenesysCloudProvider) GetRegion() GenesysCloudRegion {
+	if o == nil {
+		var ret GenesysCloudRegion
+		return ret
+	}
+
+	return o.Region
+}
+
+// GetRegionOk returns a tuple with the Region field value
+// and a boolean to check if the value has been set.
+func (o *GenesysCloudProvider) GetRegionOk() (*GenesysCloudRegion, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Region, true
+}
+
+// SetRegion sets field value
+func (o *GenesysCloudProvider) SetRegion(v GenesysCloudRegion) {
+	o.Region = v
+}
+
+// GetOutboundTerminationFQDN returns the OutboundTerminationFQDN field value if set, zero value otherwise.
+func (o *GenesysCloudProvider) GetOutboundTerminationFQDN() string {
+	if o == nil || IsNil(o.OutboundTerminationFQDN) {
+		var ret string
+		return ret
+	}
+	return *o.OutboundTerminationFQDN
+}
+
+// GetOutboundTerminationFQDNOk returns a tuple with the OutboundTerminationFQDN field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GenesysCloudProvider) GetOutboundTerminationFQDNOk() (*string, bool) {
+	if o == nil || IsNil(o.OutboundTerminationFQDN) {
+		return nil, false
+	}
+	return o.OutboundTerminationFQDN, true
+}
+
+// HasOutboundTerminationFQDN returns a boolean if a field has been set.
+func (o *GenesysCloudProvider) HasOutboundTerminationFQDN() bool {
+	if o != nil && !IsNil(o.OutboundTerminationFQDN) {
+		return true
+	}
+
+	return false
+}
+
+// SetOutboundTerminationFQDN gets a reference to the given string and assigns it to the OutboundTerminationFQDN field.
+func (o *GenesysCloudProvider) SetOutboundTerminationFQDN(v string) {
+	o.OutboundTerminationFQDN = &v
+}
+
+// GetInboundTerminationIdentifier returns the InboundTerminationIdentifier field value if set, zero value otherwise.
+func (o *GenesysCloudProvider) GetInboundTerminationIdentifier() string {
+	if o == nil || IsNil(o.InboundTerminationIdentifier) {
+		var ret string
+		return ret
+	}
+	return *o.InboundTerminationIdentifier
+}
+
+// GetInboundTerminationIdentifierOk returns a tuple with the InboundTerminationIdentifier field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GenesysCloudProvider) GetInboundTerminationIdentifierOk() (*string, bool) {
+	if o == nil || IsNil(o.InboundTerminationIdentifier) {
+		return nil, false
+	}
+	return o.InboundTerminationIdentifier, true
+}
+
+// HasInboundTerminationIdentifier returns a boolean if a field has been set.
+func (o *GenesysCloudProvider) HasInboundTerminationIdentifier() bool {
+	if o != nil && !IsNil(o.InboundTerminationIdentifier) {
+		return true
+	}
+
+	return false
+}
+
+// SetInboundTerminationIdentifier gets a reference to the given string and assigns it to the InboundTerminationIdentifier field.
+func (o *GenesysCloudProvider) SetInboundTerminationIdentifier(v string) {
+	o.InboundTerminationIdentifier = &v
+}
+
+func (o GenesysCloudProvider) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o GenesysCloudProvider) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["region"] = o.Region
+	if !IsNil(o.OutboundTerminationFQDN) {
+		toSerialize["outboundTerminationFQDN"] = o.OutboundTerminationFQDN
+	}
+	if !IsNil(o.InboundTerminationIdentifier) {
+		toSerialize["inboundTerminationIdentifier"] = o.InboundTerminationIdentifier
+	}
+	return toSerialize, nil
+}
+
+type NullableGenesysCloudProvider struct {
+	value *GenesysCloudProvider
+	isSet bool
+}
+
+func (v NullableGenesysCloudProvider) Get() *GenesysCloudProvider {
+	return v.value
+}
+
+func (v *NullableGenesysCloudProvider) Set(val *GenesysCloudProvider) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGenesysCloudProvider) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGenesysCloudProvider) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGenesysCloudProvider(val *GenesysCloudProvider) *NullableGenesysCloudProvider {
+	return &NullableGenesysCloudProvider{value: val, isSet: true}
+}
+
+func (v NullableGenesysCloudProvider) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGenesysCloudProvider) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/genesys_cloud_region.go b/pkg/infobip/models/voice/genesys_cloud_region.go
new file mode 100644
index 0000000..97dff71
--- /dev/null
+++ b/pkg/infobip/models/voice/genesys_cloud_region.go
@@ -0,0 +1,136 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// GenesysCloudRegion Genesys cloud region.
+type GenesysCloudRegion string
+
+// List of GenesysCloudRegion
+const (
+	GENESYSCLOUDREGION_NA_US_EAST_1   GenesysCloudRegion = "NA_US_EAST_1"
+	GENESYSCLOUDREGION_NA_US_EAST_2   GenesysCloudRegion = "NA_US_EAST_2"
+	GENESYSCLOUDREGION_NA_US_WEST_2   GenesysCloudRegion = "NA_US_WEST_2"
+	GENESYSCLOUDREGION_CA_CENTRAL_1   GenesysCloudRegion = "CA_CENTRAL_1"
+	GENESYSCLOUDREGION_SA_EAST_1      GenesysCloudRegion = "SA_EAST_1"
+	GENESYSCLOUDREGION_EU_CENTRAL_1   GenesysCloudRegion = "EU_CENTRAL_1"
+	GENESYSCLOUDREGION_EU_CENTRAL_2   GenesysCloudRegion = "EU_CENTRAL_2"
+	GENESYSCLOUDREGION_EU_WEST_1      GenesysCloudRegion = "EU_WEST_1"
+	GENESYSCLOUDREGION_EU_WEST_2      GenesysCloudRegion = "EU_WEST_2"
+	GENESYSCLOUDREGION_ME_CENTRAL_1   GenesysCloudRegion = "ME_CENTRAL_1"
+	GENESYSCLOUDREGION_AP_SOUTH_1     GenesysCloudRegion = "AP_SOUTH_1"
+	GENESYSCLOUDREGION_AP_NORTHEAST_3 GenesysCloudRegion = "AP_NORTHEAST_3"
+	GENESYSCLOUDREGION_AP_NORTHEAST_2 GenesysCloudRegion = "AP_NORTHEAST_2"
+	GENESYSCLOUDREGION_AP_SOUTHEAST_2 GenesysCloudRegion = "AP_SOUTHEAST_2"
+	GENESYSCLOUDREGION_AP_NORTHEAST_1 GenesysCloudRegion = "AP_NORTHEAST_1"
+)
+
+// All allowed values of GenesysCloudRegion enum
+var AllowedGenesysCloudRegionEnumValues = []GenesysCloudRegion{
+	"NA_US_EAST_1",
+	"NA_US_EAST_2",
+	"NA_US_WEST_2",
+	"CA_CENTRAL_1",
+	"SA_EAST_1",
+	"EU_CENTRAL_1",
+	"EU_CENTRAL_2",
+	"EU_WEST_1",
+	"EU_WEST_2",
+	"ME_CENTRAL_1",
+	"AP_SOUTH_1",
+	"AP_NORTHEAST_3",
+	"AP_NORTHEAST_2",
+	"AP_SOUTHEAST_2",
+	"AP_NORTHEAST_1",
+}
+
+func (v *GenesysCloudRegion) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := GenesysCloudRegion(value)
+	for _, existing := range AllowedGenesysCloudRegionEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid GenesysCloudRegion", value)
+}
+
+// NewGenesysCloudRegionFromValue returns a pointer to a valid GenesysCloudRegion
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewGenesysCloudRegionFromValue(v string) (*GenesysCloudRegion, error) {
+	ev := GenesysCloudRegion(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for GenesysCloudRegion: valid values are %v", v, AllowedGenesysCloudRegionEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v GenesysCloudRegion) IsValid() bool {
+	for _, existing := range AllowedGenesysCloudRegionEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to GenesysCloudRegion value
+func (v GenesysCloudRegion) Ptr() *GenesysCloudRegion {
+	return &v
+}
+
+type NullableGenesysCloudRegion struct {
+	value *GenesysCloudRegion
+	isSet bool
+}
+
+func (v NullableGenesysCloudRegion) Get() *GenesysCloudRegion {
+	return v.value
+}
+
+func (v *NullableGenesysCloudRegion) Set(val *GenesysCloudRegion) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGenesysCloudRegion) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGenesysCloudRegion) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGenesysCloudRegion(val *GenesysCloudRegion) *NullableGenesysCloudRegion {
+	return &NullableGenesysCloudRegion{value: val, isSet: true}
+}
+
+func (v NullableGenesysCloudRegion) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGenesysCloudRegion) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/get_voices_response.go b/pkg/infobip/models/voice/get_voices_response.go
new file mode 100644
index 0000000..18e8ba0
--- /dev/null
+++ b/pkg/infobip/models/voice/get_voices_response.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the GetVoicesResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &GetVoicesResponse{}
+
+// GetVoicesResponse struct for GetVoicesResponse
+type GetVoicesResponse struct {
+	// Array of voices belonging to the specified language.
+	Voices []SynthesisVoiceResponse
+}
+
+// NewGetVoicesResponse instantiates a new GetVoicesResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewGetVoicesResponse() *GetVoicesResponse {
+	this := GetVoicesResponse{}
+	return &this
+}
+
+// NewGetVoicesResponseWithDefaults instantiates a new GetVoicesResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewGetVoicesResponseWithDefaults() *GetVoicesResponse {
+	this := GetVoicesResponse{}
+
+	return &this
+}
+
+// GetVoices returns the Voices field value if set, zero value otherwise.
+func (o *GetVoicesResponse) GetVoices() []SynthesisVoiceResponse {
+	if o == nil || IsNil(o.Voices) {
+		var ret []SynthesisVoiceResponse
+		return ret
+	}
+	return o.Voices
+}
+
+// GetVoicesOk returns a tuple with the Voices field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GetVoicesResponse) GetVoicesOk() ([]SynthesisVoiceResponse, bool) {
+	if o == nil || IsNil(o.Voices) {
+		return nil, false
+	}
+	return o.Voices, true
+}
+
+// HasVoices returns a boolean if a field has been set.
+func (o *GetVoicesResponse) HasVoices() bool {
+	if o != nil && !IsNil(o.Voices) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoices gets a reference to the given []SynthesisVoiceResponse and assigns it to the Voices field.
+func (o *GetVoicesResponse) SetVoices(v []SynthesisVoiceResponse) {
+	o.Voices = v
+}
+
+func (o GetVoicesResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o GetVoicesResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Voices) {
+		toSerialize["voices"] = o.Voices
+	}
+	return toSerialize, nil
+}
+
+type NullableGetVoicesResponse struct {
+	value *GetVoicesResponse
+	isSet bool
+}
+
+func (v NullableGetVoicesResponse) Get() *GetVoicesResponse {
+	return v.value
+}
+
+func (v *NullableGetVoicesResponse) Set(val *GetVoicesResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGetVoicesResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGetVoicesResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGetVoicesResponse(val *GetVoicesResponse) *NullableGetVoicesResponse {
+	return &NullableGetVoicesResponse{value: val, isSet: true}
+}
+
+func (v NullableGetVoicesResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGetVoicesResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/go_to.go b/pkg/infobip/models/voice/go_to.go
new file mode 100644
index 0000000..15a8c85
--- /dev/null
+++ b/pkg/infobip/models/voice/go_to.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the GoTo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &GoTo{}
+
+// GoTo Go-To action is used to go back to some specified action that was already executed in the scenario and continue the execution from that point.
+type GoTo struct {
+	// The actionId of an action to which to jump
+	GoTo    int32
+	Options *GoToOptions
+}
+
+type _GoTo GoTo
+
+// NewGoTo instantiates a new GoTo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewGoTo(goTo int32) *GoTo {
+	this := GoTo{}
+	this.GoTo = goTo
+	return &this
+}
+
+// NewGoToWithDefaults instantiates a new GoTo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewGoToWithDefaults() *GoTo {
+	this := GoTo{}
+
+	return &this
+}
+
+// GetGoTo returns the GoTo field value
+func (o *GoTo) GetGoTo() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.GoTo
+}
+
+// GetGoToOk returns a tuple with the GoTo field value
+// and a boolean to check if the value has been set.
+func (o *GoTo) GetGoToOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.GoTo, true
+}
+
+// SetGoTo sets field value
+func (o *GoTo) SetGoTo(v int32) {
+	o.GoTo = v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *GoTo) GetOptions() GoToOptions {
+	if o == nil || IsNil(o.Options) {
+		var ret GoToOptions
+		return ret
+	}
+	return *o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GoTo) GetOptionsOk() (*GoToOptions, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *GoTo) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given GoToOptions and assigns it to the Options field.
+func (o *GoTo) SetOptions(v GoToOptions) {
+	o.Options = &v
+}
+
+func (o GoTo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o GoTo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["goTo"] = o.GoTo
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	return toSerialize, nil
+}
+
+type NullableGoTo struct {
+	value *GoTo
+	isSet bool
+}
+
+func (v NullableGoTo) Get() *GoTo {
+	return v.value
+}
+
+func (v *NullableGoTo) Set(val *GoTo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGoTo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGoTo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGoTo(val *GoTo) *NullableGoTo {
+	return &NullableGoTo{value: val, isSet: true}
+}
+
+func (v NullableGoTo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGoTo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/go_to_options.go b/pkg/infobip/models/voice/go_to_options.go
new file mode 100644
index 0000000..87f42ed
--- /dev/null
+++ b/pkg/infobip/models/voice/go_to_options.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the GoToOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &GoToOptions{}
+
+// GoToOptions struct for GoToOptions
+type GoToOptions struct {
+	// Maximum number of times goto can jump to specified action. Valid values are from 1 to 100.
+	GoToLimit *int32
+	// Name of the variable which counts passes through goto action
+	CountVariable *string
+}
+
+// NewGoToOptions instantiates a new GoToOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewGoToOptions() *GoToOptions {
+	this := GoToOptions{}
+	return &this
+}
+
+// NewGoToOptionsWithDefaults instantiates a new GoToOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewGoToOptionsWithDefaults() *GoToOptions {
+	this := GoToOptions{}
+
+	return &this
+}
+
+// GetGoToLimit returns the GoToLimit field value if set, zero value otherwise.
+func (o *GoToOptions) GetGoToLimit() int32 {
+	if o == nil || IsNil(o.GoToLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.GoToLimit
+}
+
+// GetGoToLimitOk returns a tuple with the GoToLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GoToOptions) GetGoToLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.GoToLimit) {
+		return nil, false
+	}
+	return o.GoToLimit, true
+}
+
+// HasGoToLimit returns a boolean if a field has been set.
+func (o *GoToOptions) HasGoToLimit() bool {
+	if o != nil && !IsNil(o.GoToLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetGoToLimit gets a reference to the given int32 and assigns it to the GoToLimit field.
+func (o *GoToOptions) SetGoToLimit(v int32) {
+	o.GoToLimit = &v
+}
+
+// GetCountVariable returns the CountVariable field value if set, zero value otherwise.
+func (o *GoToOptions) GetCountVariable() string {
+	if o == nil || IsNil(o.CountVariable) {
+		var ret string
+		return ret
+	}
+	return *o.CountVariable
+}
+
+// GetCountVariableOk returns a tuple with the CountVariable field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *GoToOptions) GetCountVariableOk() (*string, bool) {
+	if o == nil || IsNil(o.CountVariable) {
+		return nil, false
+	}
+	return o.CountVariable, true
+}
+
+// HasCountVariable returns a boolean if a field has been set.
+func (o *GoToOptions) HasCountVariable() bool {
+	if o != nil && !IsNil(o.CountVariable) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountVariable gets a reference to the given string and assigns it to the CountVariable field.
+func (o *GoToOptions) SetCountVariable(v string) {
+	o.CountVariable = &v
+}
+
+func (o GoToOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o GoToOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.GoToLimit) {
+		toSerialize["goToLimit"] = o.GoToLimit
+	}
+	if !IsNil(o.CountVariable) {
+		toSerialize["countVariable"] = o.CountVariable
+	}
+	return toSerialize, nil
+}
+
+type NullableGoToOptions struct {
+	value *GoToOptions
+	isSet bool
+}
+
+func (v NullableGoToOptions) Get() *GoToOptions {
+	return v.value
+}
+
+func (v *NullableGoToOptions) Set(val *GoToOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableGoToOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableGoToOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableGoToOptions(val *GoToOptions) *NullableGoToOptions {
+	return &NullableGoToOptions{value: val, isSet: true}
+}
+
+func (v NullableGoToOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableGoToOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/hangup.go b/pkg/infobip/models/voice/hangup.go
new file mode 100644
index 0000000..b87f7d6
--- /dev/null
+++ b/pkg/infobip/models/voice/hangup.go
@@ -0,0 +1,108 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// Hangup Hangup action marks the end of the IVR flow execution, leading to the call actually being hung up.
+type Hangup string
+
+// List of Hangup
+const (
+	HANGUP_HANGUP Hangup = "hangup"
+)
+
+// All allowed values of Hangup enum
+var AllowedHangupEnumValues = []Hangup{
+	"hangup",
+}
+
+func (v *Hangup) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := Hangup(value)
+	for _, existing := range AllowedHangupEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid Hangup", value)
+}
+
+// NewHangupFromValue returns a pointer to a valid Hangup
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewHangupFromValue(v string) (*Hangup, error) {
+	ev := Hangup(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for Hangup: valid values are %v", v, AllowedHangupEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v Hangup) IsValid() bool {
+	for _, existing := range AllowedHangupEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to Hangup value
+func (v Hangup) Ptr() *Hangup {
+	return &v
+}
+
+type NullableHangup struct {
+	value *Hangup
+	isSet bool
+}
+
+func (v NullableHangup) Get() *Hangup {
+	return v.value
+}
+
+func (v *NullableHangup) Set(val *Hangup) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableHangup) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableHangup) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableHangup(val *Hangup) *NullableHangup {
+	return &NullableHangup{value: val, isSet: true}
+}
+
+func (v NullableHangup) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableHangup) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/hangup_request.go b/pkg/infobip/models/voice/hangup_request.go
new file mode 100644
index 0000000..884752c
--- /dev/null
+++ b/pkg/infobip/models/voice/hangup_request.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the HangupRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &HangupRequest{}
+
+// HangupRequest Hangup request.
+type HangupRequest struct {
+	ErrorCode *ErrorCode
+}
+
+// NewHangupRequest instantiates a new HangupRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewHangupRequest() *HangupRequest {
+	this := HangupRequest{}
+	return &this
+}
+
+// NewHangupRequestWithDefaults instantiates a new HangupRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewHangupRequestWithDefaults() *HangupRequest {
+	this := HangupRequest{}
+
+	return &this
+}
+
+// GetErrorCode returns the ErrorCode field value if set, zero value otherwise.
+func (o *HangupRequest) GetErrorCode() ErrorCode {
+	if o == nil || IsNil(o.ErrorCode) {
+		var ret ErrorCode
+		return ret
+	}
+	return *o.ErrorCode
+}
+
+// GetErrorCodeOk returns a tuple with the ErrorCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *HangupRequest) GetErrorCodeOk() (*ErrorCode, bool) {
+	if o == nil || IsNil(o.ErrorCode) {
+		return nil, false
+	}
+	return o.ErrorCode, true
+}
+
+// HasErrorCode returns a boolean if a field has been set.
+func (o *HangupRequest) HasErrorCode() bool {
+	if o != nil && !IsNil(o.ErrorCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetErrorCode gets a reference to the given ErrorCode and assigns it to the ErrorCode field.
+func (o *HangupRequest) SetErrorCode(v ErrorCode) {
+	o.ErrorCode = &v
+}
+
+func (o HangupRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o HangupRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ErrorCode) {
+		toSerialize["errorCode"] = o.ErrorCode
+	}
+	return toSerialize, nil
+}
+
+type NullableHangupRequest struct {
+	value *HangupRequest
+	isSet bool
+}
+
+func (v NullableHangupRequest) Get() *HangupRequest {
+	return v.value
+}
+
+func (v *NullableHangupRequest) Set(val *HangupRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableHangupRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableHangupRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableHangupRequest(val *HangupRequest) *NullableHangupRequest {
+	return &NullableHangupRequest{value: val, isSet: true}
+}
+
+func (v NullableHangupRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableHangupRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/hangup_source.go b/pkg/infobip/models/voice/hangup_source.go
new file mode 100644
index 0000000..25ae583
--- /dev/null
+++ b/pkg/infobip/models/voice/hangup_source.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// HangupSource Hangup source.
+type HangupSource string
+
+// List of HangupSource
+const (
+	HANGUPSOURCE_ENDPOINT HangupSource = "ENDPOINT"
+	HANGUPSOURCE_API      HangupSource = "API"
+	HANGUPSOURCE_PLATFORM HangupSource = "PLATFORM"
+)
+
+// All allowed values of HangupSource enum
+var AllowedHangupSourceEnumValues = []HangupSource{
+	"ENDPOINT",
+	"API",
+	"PLATFORM",
+}
+
+func (v *HangupSource) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := HangupSource(value)
+	for _, existing := range AllowedHangupSourceEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid HangupSource", value)
+}
+
+// NewHangupSourceFromValue returns a pointer to a valid HangupSource
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewHangupSourceFromValue(v string) (*HangupSource, error) {
+	ev := HangupSource(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for HangupSource: valid values are %v", v, AllowedHangupSourceEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v HangupSource) IsValid() bool {
+	for _, existing := range AllowedHangupSourceEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to HangupSource value
+func (v HangupSource) Ptr() *HangupSource {
+	return &v
+}
+
+type NullableHangupSource struct {
+	value *HangupSource
+	isSet bool
+}
+
+func (v NullableHangupSource) Get() *HangupSource {
+	return v.value
+}
+
+func (v *NullableHangupSource) Set(val *HangupSource) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableHangupSource) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableHangupSource) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableHangupSource(val *HangupSource) *NullableHangupSource {
+	return &NullableHangupSource{value: val, isSet: true}
+}
+
+func (v NullableHangupSource) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableHangupSource) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/hmac_algorithm.go b/pkg/infobip/models/voice/hmac_algorithm.go
new file mode 100644
index 0000000..e6bbd00
--- /dev/null
+++ b/pkg/infobip/models/voice/hmac_algorithm.go
@@ -0,0 +1,118 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// HmacAlgorithm Hmac algorithm.
+type HmacAlgorithm string
+
+// List of HmacAlgorithm
+const (
+	HMACALGORITHM_MD5     HmacAlgorithm = "HMAC_MD5"
+	HMACALGORITHM_SHA_1   HmacAlgorithm = "HMAC_SHA_1"
+	HMACALGORITHM_SHA_224 HmacAlgorithm = "HMAC_SHA_224"
+	HMACALGORITHM_SHA_256 HmacAlgorithm = "HMAC_SHA_256"
+	HMACALGORITHM_SHA_384 HmacAlgorithm = "HMAC_SHA_384"
+	HMACALGORITHM_SHA_512 HmacAlgorithm = "HMAC_SHA_512"
+)
+
+// All allowed values of HmacAlgorithm enum
+var AllowedHmacAlgorithmEnumValues = []HmacAlgorithm{
+	"HMAC_MD5",
+	"HMAC_SHA_1",
+	"HMAC_SHA_224",
+	"HMAC_SHA_256",
+	"HMAC_SHA_384",
+	"HMAC_SHA_512",
+}
+
+func (v *HmacAlgorithm) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := HmacAlgorithm(value)
+	for _, existing := range AllowedHmacAlgorithmEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid HmacAlgorithm", value)
+}
+
+// NewHmacAlgorithmFromValue returns a pointer to a valid HmacAlgorithm
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewHmacAlgorithmFromValue(v string) (*HmacAlgorithm, error) {
+	ev := HmacAlgorithm(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for HmacAlgorithm: valid values are %v", v, AllowedHmacAlgorithmEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v HmacAlgorithm) IsValid() bool {
+	for _, existing := range AllowedHmacAlgorithmEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to HmacAlgorithm value
+func (v HmacAlgorithm) Ptr() *HmacAlgorithm {
+	return &v
+}
+
+type NullableHmacAlgorithm struct {
+	value *HmacAlgorithm
+	isSet bool
+}
+
+func (v NullableHmacAlgorithm) Get() *HmacAlgorithm {
+	return v.value
+}
+
+func (v *NullableHmacAlgorithm) Set(val *HmacAlgorithm) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableHmacAlgorithm) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableHmacAlgorithm) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableHmacAlgorithm(val *HmacAlgorithm) *NullableHmacAlgorithm {
+	return &NullableHmacAlgorithm{value: val, isSet: true}
+}
+
+func (v NullableHmacAlgorithm) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableHmacAlgorithm) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/hmac_security_config.go b/pkg/infobip/models/voice/hmac_security_config.go
new file mode 100644
index 0000000..88fb08e
--- /dev/null
+++ b/pkg/infobip/models/voice/hmac_security_config.go
@@ -0,0 +1,151 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the HmacSecurityConfig type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &HmacSecurityConfig{}
+
+// HmacSecurityConfig struct for HmacSecurityConfig
+type HmacSecurityConfig struct {
+	Type CallRoutingUrlSecurityConfigType
+	// Algorithm used for encryption.
+	SecretKey string
+	Algorithm HmacAlgorithm
+}
+
+type _HmacSecurityConfig HmacSecurityConfig
+
+// NewHmacSecurityConfig instantiates a new HmacSecurityConfig object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewHmacSecurityConfig(secretKey string, algorithm HmacAlgorithm) *HmacSecurityConfig {
+	this := HmacSecurityConfig{}
+	this.Type = "HMAC"
+	this.SecretKey = secretKey
+	this.Algorithm = algorithm
+	return &this
+}
+
+// NewHmacSecurityConfigWithDefaults instantiates a new HmacSecurityConfig object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewHmacSecurityConfigWithDefaults() *HmacSecurityConfig {
+	this := HmacSecurityConfig{}
+	this.Type = "HMAC"
+	return &this
+}
+
+// GetSecretKey returns the SecretKey field value
+func (o *HmacSecurityConfig) GetSecretKey() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.SecretKey
+}
+
+// GetSecretKeyOk returns a tuple with the SecretKey field value
+// and a boolean to check if the value has been set.
+func (o *HmacSecurityConfig) GetSecretKeyOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SecretKey, true
+}
+
+// SetSecretKey sets field value
+func (o *HmacSecurityConfig) SetSecretKey(v string) {
+	o.SecretKey = v
+}
+
+// GetAlgorithm returns the Algorithm field value
+func (o *HmacSecurityConfig) GetAlgorithm() HmacAlgorithm {
+	if o == nil {
+		var ret HmacAlgorithm
+		return ret
+	}
+
+	return o.Algorithm
+}
+
+// GetAlgorithmOk returns a tuple with the Algorithm field value
+// and a boolean to check if the value has been set.
+func (o *HmacSecurityConfig) GetAlgorithmOk() (*HmacAlgorithm, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Algorithm, true
+}
+
+// SetAlgorithm sets field value
+func (o *HmacSecurityConfig) SetAlgorithm(v HmacAlgorithm) {
+	o.Algorithm = v
+}
+
+func (o HmacSecurityConfig) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o HmacSecurityConfig) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["type"] = o.Type
+	toSerialize["secretKey"] = o.SecretKey
+	toSerialize["algorithm"] = o.Algorithm
+	return toSerialize, nil
+}
+
+type NullableHmacSecurityConfig struct {
+	value *HmacSecurityConfig
+	isSet bool
+}
+
+func (v NullableHmacSecurityConfig) Get() *HmacSecurityConfig {
+	return v.value
+}
+
+func (v *NullableHmacSecurityConfig) Set(val *HmacSecurityConfig) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableHmacSecurityConfig) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableHmacSecurityConfig) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableHmacSecurityConfig(val *HmacSecurityConfig) *NullableHmacSecurityConfig {
+	return &NullableHmacSecurityConfig{value: val, isSet: true}
+}
+
+func (v NullableHmacSecurityConfig) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableHmacSecurityConfig) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/http_method.go b/pkg/infobip/models/voice/http_method.go
new file mode 100644
index 0000000..9c7d0f9
--- /dev/null
+++ b/pkg/infobip/models/voice/http_method.go
@@ -0,0 +1,116 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// HttpMethod Http method
+type HttpMethod string
+
+// List of HttpMethod
+const (
+	HTTPMETHOD_GET    HttpMethod = "GET"
+	HTTPMETHOD_POST   HttpMethod = "POST"
+	HTTPMETHOD_PUT    HttpMethod = "PUT"
+	HTTPMETHOD_DELETE HttpMethod = "DELETE"
+	HTTPMETHOD_PATCH  HttpMethod = "PATCH"
+)
+
+// All allowed values of HttpMethod enum
+var AllowedHttpMethodEnumValues = []HttpMethod{
+	"GET",
+	"POST",
+	"PUT",
+	"DELETE",
+	"PATCH",
+}
+
+func (v *HttpMethod) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := HttpMethod(value)
+	for _, existing := range AllowedHttpMethodEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid HttpMethod", value)
+}
+
+// NewHttpMethodFromValue returns a pointer to a valid HttpMethod
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewHttpMethodFromValue(v string) (*HttpMethod, error) {
+	ev := HttpMethod(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for HttpMethod: valid values are %v", v, AllowedHttpMethodEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v HttpMethod) IsValid() bool {
+	for _, existing := range AllowedHttpMethodEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to HttpMethod value
+func (v HttpMethod) Ptr() *HttpMethod {
+	return &v
+}
+
+type NullableHttpMethod struct {
+	value *HttpMethod
+	isSet bool
+}
+
+func (v NullableHttpMethod) Get() *HttpMethod {
+	return v.value
+}
+
+func (v *NullableHttpMethod) Set(val *HttpMethod) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableHttpMethod) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableHttpMethod) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableHttpMethod(val *HttpMethod) *NullableHttpMethod {
+	return &NullableHttpMethod{value: val, isSet: true}
+}
+
+func (v NullableHttpMethod) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableHttpMethod) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/if_then_else.go b/pkg/infobip/models/voice/if_then_else.go
new file mode 100644
index 0000000..b642e4b
--- /dev/null
+++ b/pkg/infobip/models/voice/if_then_else.go
@@ -0,0 +1,233 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IfThenElse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IfThenElse{}
+
+// IfThenElse If-Then-Else action provides simple branching based on a condition. If the condition evaluates to true, the then block is executed, otherwise the else block is executed. Only one of the blocks is required to be non-empty.
+type IfThenElse struct {
+	// The expression to evaluate
+	If string
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Then []ScriptInner
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Else []ScriptInner
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _IfThenElse IfThenElse
+
+// NewIfThenElse instantiates a new IfThenElse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIfThenElse(if_ string) *IfThenElse {
+	this := IfThenElse{}
+	this.If = if_
+	return &this
+}
+
+// NewIfThenElseWithDefaults instantiates a new IfThenElse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIfThenElseWithDefaults() *IfThenElse {
+	this := IfThenElse{}
+
+	return &this
+}
+
+// GetIf returns the If field value
+func (o *IfThenElse) GetIf() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.If
+}
+
+// GetIfOk returns a tuple with the If field value
+// and a boolean to check if the value has been set.
+func (o *IfThenElse) GetIfOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.If, true
+}
+
+// SetIf sets field value
+func (o *IfThenElse) SetIf(v string) {
+	o.If = v
+}
+
+// GetThen returns the Then field value if set, zero value otherwise.
+func (o *IfThenElse) GetThen() []ScriptInner {
+	if o == nil || IsNil(o.Then) {
+		var ret []ScriptInner
+		return ret
+	}
+	return o.Then
+}
+
+// GetThenOk returns a tuple with the Then field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IfThenElse) GetThenOk() ([]ScriptInner, bool) {
+	if o == nil || IsNil(o.Then) {
+		return nil, false
+	}
+	return o.Then, true
+}
+
+// HasThen returns a boolean if a field has been set.
+func (o *IfThenElse) HasThen() bool {
+	if o != nil && !IsNil(o.Then) {
+		return true
+	}
+
+	return false
+}
+
+// SetThen gets a reference to the given []ScriptInner and assigns it to the Then field.
+func (o *IfThenElse) SetThen(v []ScriptInner) {
+	o.Then = v
+}
+
+// GetElse returns the Else field value if set, zero value otherwise.
+func (o *IfThenElse) GetElse() []ScriptInner {
+	if o == nil || IsNil(o.Else) {
+		var ret []ScriptInner
+		return ret
+	}
+	return o.Else
+}
+
+// GetElseOk returns a tuple with the Else field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IfThenElse) GetElseOk() ([]ScriptInner, bool) {
+	if o == nil || IsNil(o.Else) {
+		return nil, false
+	}
+	return o.Else, true
+}
+
+// HasElse returns a boolean if a field has been set.
+func (o *IfThenElse) HasElse() bool {
+	if o != nil && !IsNil(o.Else) {
+		return true
+	}
+
+	return false
+}
+
+// SetElse gets a reference to the given []ScriptInner and assigns it to the Else field.
+func (o *IfThenElse) SetElse(v []ScriptInner) {
+	o.Else = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *IfThenElse) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IfThenElse) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *IfThenElse) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *IfThenElse) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o IfThenElse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IfThenElse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["if"] = o.If
+	if !IsNil(o.Then) {
+		toSerialize["then"] = o.Then
+	}
+	if !IsNil(o.Else) {
+		toSerialize["else"] = o.Else
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableIfThenElse struct {
+	value *IfThenElse
+	isSet bool
+}
+
+func (v NullableIfThenElse) Get() *IfThenElse {
+	return v.value
+}
+
+func (v *NullableIfThenElse) Set(val *IfThenElse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIfThenElse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIfThenElse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIfThenElse(val *IfThenElse) *NullableIfThenElse {
+	return &NullableIfThenElse{value: val, isSet: true}
+}
+
+func (v NullableIfThenElse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIfThenElse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/ip_core_general_status.go b/pkg/infobip/models/voice/ip_core_general_status.go
new file mode 100644
index 0000000..b5a797a
--- /dev/null
+++ b/pkg/infobip/models/voice/ip_core_general_status.go
@@ -0,0 +1,118 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// IpCoreGeneralStatus the model 'IpCoreGeneralStatus'
+type IpCoreGeneralStatus string
+
+// List of IpCoreGeneralStatus
+const (
+	IPCOREGENERALSTATUS_ACCEPTED      IpCoreGeneralStatus = "ACCEPTED"
+	IPCOREGENERALSTATUS_PENDING       IpCoreGeneralStatus = "PENDING"
+	IPCOREGENERALSTATUS_UNDELIVERABLE IpCoreGeneralStatus = "UNDELIVERABLE"
+	IPCOREGENERALSTATUS_DELIVERED     IpCoreGeneralStatus = "DELIVERED"
+	IPCOREGENERALSTATUS_EXPIRED       IpCoreGeneralStatus = "EXPIRED"
+	IPCOREGENERALSTATUS_REJECTED      IpCoreGeneralStatus = "REJECTED"
+)
+
+// All allowed values of IpCoreGeneralStatus enum
+var AllowedIpCoreGeneralStatusEnumValues = []IpCoreGeneralStatus{
+	"ACCEPTED",
+	"PENDING",
+	"UNDELIVERABLE",
+	"DELIVERED",
+	"EXPIRED",
+	"REJECTED",
+}
+
+func (v *IpCoreGeneralStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := IpCoreGeneralStatus(value)
+	for _, existing := range AllowedIpCoreGeneralStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid IpCoreGeneralStatus", value)
+}
+
+// NewIpCoreGeneralStatusFromValue returns a pointer to a valid IpCoreGeneralStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewIpCoreGeneralStatusFromValue(v string) (*IpCoreGeneralStatus, error) {
+	ev := IpCoreGeneralStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for IpCoreGeneralStatus: valid values are %v", v, AllowedIpCoreGeneralStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v IpCoreGeneralStatus) IsValid() bool {
+	for _, existing := range AllowedIpCoreGeneralStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to IpCoreGeneralStatus value
+func (v IpCoreGeneralStatus) Ptr() *IpCoreGeneralStatus {
+	return &v
+}
+
+type NullableIpCoreGeneralStatus struct {
+	value *IpCoreGeneralStatus
+	isSet bool
+}
+
+func (v NullableIpCoreGeneralStatus) Get() *IpCoreGeneralStatus {
+	return v.value
+}
+
+func (v *NullableIpCoreGeneralStatus) Set(val *IpCoreGeneralStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIpCoreGeneralStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIpCoreGeneralStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIpCoreGeneralStatus(val *IpCoreGeneralStatus) *NullableIpCoreGeneralStatus {
+	return &NullableIpCoreGeneralStatus{value: val, isSet: true}
+}
+
+func (v NullableIpCoreGeneralStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIpCoreGeneralStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/ivr_data.go b/pkg/infobip/models/voice/ivr_data.go
new file mode 100644
index 0000000..0cdd55b
--- /dev/null
+++ b/pkg/infobip/models/voice/ivr_data.go
@@ -0,0 +1,314 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IvrData type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IvrData{}
+
+// IvrData Fields representing details about IVR, if outbound IVR is being used. If the call was not IVR, the field will be null.
+type IvrData struct {
+	// The ID that uniquely identifies the IVR scenario.
+	ScenarioId *string
+	// Name of IVR scenario.
+	ScenarioName *string
+	// JSON object showing the result of every CollectAction in IVR scenario in the form of key/value pairs, where the key is CollectAction variable and pair is collected DTMF.
+	CollectedDtmfs *string
+	// JSON object showing the result of every CollectAction in IVR scenario with the mapped, meaningful, values you defined in CollectAction `mappedValues` option.
+	CollectedMappedDtmfs *string
+	// JSON object showing the result of every CaptureSpeech action with full text spoken by the user.
+	SpokenInput *string
+	// JSON object showing the result of every CaptureSpeech action with only the key phrases that matched user spoken input.
+	MatchedSpokenInput *string
+}
+
+// NewIvrData instantiates a new IvrData object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIvrData() *IvrData {
+	this := IvrData{}
+	return &this
+}
+
+// NewIvrDataWithDefaults instantiates a new IvrData object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIvrDataWithDefaults() *IvrData {
+	this := IvrData{}
+
+	return &this
+}
+
+// GetScenarioId returns the ScenarioId field value if set, zero value otherwise.
+func (o *IvrData) GetScenarioId() string {
+	if o == nil || IsNil(o.ScenarioId) {
+		var ret string
+		return ret
+	}
+	return *o.ScenarioId
+}
+
+// GetScenarioIdOk returns a tuple with the ScenarioId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrData) GetScenarioIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ScenarioId) {
+		return nil, false
+	}
+	return o.ScenarioId, true
+}
+
+// HasScenarioId returns a boolean if a field has been set.
+func (o *IvrData) HasScenarioId() bool {
+	if o != nil && !IsNil(o.ScenarioId) {
+		return true
+	}
+
+	return false
+}
+
+// SetScenarioId gets a reference to the given string and assigns it to the ScenarioId field.
+func (o *IvrData) SetScenarioId(v string) {
+	o.ScenarioId = &v
+}
+
+// GetScenarioName returns the ScenarioName field value if set, zero value otherwise.
+func (o *IvrData) GetScenarioName() string {
+	if o == nil || IsNil(o.ScenarioName) {
+		var ret string
+		return ret
+	}
+	return *o.ScenarioName
+}
+
+// GetScenarioNameOk returns a tuple with the ScenarioName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrData) GetScenarioNameOk() (*string, bool) {
+	if o == nil || IsNil(o.ScenarioName) {
+		return nil, false
+	}
+	return o.ScenarioName, true
+}
+
+// HasScenarioName returns a boolean if a field has been set.
+func (o *IvrData) HasScenarioName() bool {
+	if o != nil && !IsNil(o.ScenarioName) {
+		return true
+	}
+
+	return false
+}
+
+// SetScenarioName gets a reference to the given string and assigns it to the ScenarioName field.
+func (o *IvrData) SetScenarioName(v string) {
+	o.ScenarioName = &v
+}
+
+// GetCollectedDtmfs returns the CollectedDtmfs field value if set, zero value otherwise.
+func (o *IvrData) GetCollectedDtmfs() string {
+	if o == nil || IsNil(o.CollectedDtmfs) {
+		var ret string
+		return ret
+	}
+	return *o.CollectedDtmfs
+}
+
+// GetCollectedDtmfsOk returns a tuple with the CollectedDtmfs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrData) GetCollectedDtmfsOk() (*string, bool) {
+	if o == nil || IsNil(o.CollectedDtmfs) {
+		return nil, false
+	}
+	return o.CollectedDtmfs, true
+}
+
+// HasCollectedDtmfs returns a boolean if a field has been set.
+func (o *IvrData) HasCollectedDtmfs() bool {
+	if o != nil && !IsNil(o.CollectedDtmfs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCollectedDtmfs gets a reference to the given string and assigns it to the CollectedDtmfs field.
+func (o *IvrData) SetCollectedDtmfs(v string) {
+	o.CollectedDtmfs = &v
+}
+
+// GetCollectedMappedDtmfs returns the CollectedMappedDtmfs field value if set, zero value otherwise.
+func (o *IvrData) GetCollectedMappedDtmfs() string {
+	if o == nil || IsNil(o.CollectedMappedDtmfs) {
+		var ret string
+		return ret
+	}
+	return *o.CollectedMappedDtmfs
+}
+
+// GetCollectedMappedDtmfsOk returns a tuple with the CollectedMappedDtmfs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrData) GetCollectedMappedDtmfsOk() (*string, bool) {
+	if o == nil || IsNil(o.CollectedMappedDtmfs) {
+		return nil, false
+	}
+	return o.CollectedMappedDtmfs, true
+}
+
+// HasCollectedMappedDtmfs returns a boolean if a field has been set.
+func (o *IvrData) HasCollectedMappedDtmfs() bool {
+	if o != nil && !IsNil(o.CollectedMappedDtmfs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCollectedMappedDtmfs gets a reference to the given string and assigns it to the CollectedMappedDtmfs field.
+func (o *IvrData) SetCollectedMappedDtmfs(v string) {
+	o.CollectedMappedDtmfs = &v
+}
+
+// GetSpokenInput returns the SpokenInput field value if set, zero value otherwise.
+func (o *IvrData) GetSpokenInput() string {
+	if o == nil || IsNil(o.SpokenInput) {
+		var ret string
+		return ret
+	}
+	return *o.SpokenInput
+}
+
+// GetSpokenInputOk returns a tuple with the SpokenInput field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrData) GetSpokenInputOk() (*string, bool) {
+	if o == nil || IsNil(o.SpokenInput) {
+		return nil, false
+	}
+	return o.SpokenInput, true
+}
+
+// HasSpokenInput returns a boolean if a field has been set.
+func (o *IvrData) HasSpokenInput() bool {
+	if o != nil && !IsNil(o.SpokenInput) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpokenInput gets a reference to the given string and assigns it to the SpokenInput field.
+func (o *IvrData) SetSpokenInput(v string) {
+	o.SpokenInput = &v
+}
+
+// GetMatchedSpokenInput returns the MatchedSpokenInput field value if set, zero value otherwise.
+func (o *IvrData) GetMatchedSpokenInput() string {
+	if o == nil || IsNil(o.MatchedSpokenInput) {
+		var ret string
+		return ret
+	}
+	return *o.MatchedSpokenInput
+}
+
+// GetMatchedSpokenInputOk returns a tuple with the MatchedSpokenInput field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrData) GetMatchedSpokenInputOk() (*string, bool) {
+	if o == nil || IsNil(o.MatchedSpokenInput) {
+		return nil, false
+	}
+	return o.MatchedSpokenInput, true
+}
+
+// HasMatchedSpokenInput returns a boolean if a field has been set.
+func (o *IvrData) HasMatchedSpokenInput() bool {
+	if o != nil && !IsNil(o.MatchedSpokenInput) {
+		return true
+	}
+
+	return false
+}
+
+// SetMatchedSpokenInput gets a reference to the given string and assigns it to the MatchedSpokenInput field.
+func (o *IvrData) SetMatchedSpokenInput(v string) {
+	o.MatchedSpokenInput = &v
+}
+
+func (o IvrData) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IvrData) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ScenarioId) {
+		toSerialize["scenarioId"] = o.ScenarioId
+	}
+	if !IsNil(o.ScenarioName) {
+		toSerialize["scenarioName"] = o.ScenarioName
+	}
+	if !IsNil(o.CollectedDtmfs) {
+		toSerialize["collectedDtmfs"] = o.CollectedDtmfs
+	}
+	if !IsNil(o.CollectedMappedDtmfs) {
+		toSerialize["collectedMappedDtmfs"] = o.CollectedMappedDtmfs
+	}
+	if !IsNil(o.SpokenInput) {
+		toSerialize["spokenInput"] = o.SpokenInput
+	}
+	if !IsNil(o.MatchedSpokenInput) {
+		toSerialize["matchedSpokenInput"] = o.MatchedSpokenInput
+	}
+	return toSerialize, nil
+}
+
+type NullableIvrData struct {
+	value *IvrData
+	isSet bool
+}
+
+func (v NullableIvrData) Get() *IvrData {
+	return v.value
+}
+
+func (v *NullableIvrData) Set(val *IvrData) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIvrData) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIvrData) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIvrData(val *IvrData) *NullableIvrData {
+	return &NullableIvrData{value: val, isSet: true}
+}
+
+func (v NullableIvrData) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIvrData) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/ivr_message.go b/pkg/infobip/models/voice/ivr_message.go
new file mode 100644
index 0000000..83c2e57
--- /dev/null
+++ b/pkg/infobip/models/voice/ivr_message.go
@@ -0,0 +1,702 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the IvrMessage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &IvrMessage{}
+
+// IvrMessage Array of IVR messages to be sent, one object per every message.
+type IvrMessage struct {
+	// Scenario key.
+	ScenarioId string
+	// Numeric sender ID length should be between 3 and 14 characters.
+	From *string
+	// Array of message destination addresses. Maximum number of destination addresses is 20k.
+	Destinations []Destination
+	// The URL on your callback server on which the Delivery report will be sent.
+	NotifyUrl *string
+	// Preferred Delivery report content type. Can be `application/json` or `application/xml`.
+	NotifyContentType *string
+	// Specifies the version of the report model to be sent. Can be `1` ([deprecated version 1](#programmable-communications/voice/receive-voice-delivery-reports-deprecated)) or `2` ([current version 2](#programmable-communications/voice/receive-voice-delivery-reports)). The default is version 2.
+	NotifyContentVersion *int32
+	// Additional client's data that will be sent on the notifyUrl. The maximum value is 200 characters.
+	CallbackData *string
+	// The message validity period shown in minutes. When the period expires, it will not be allowed for the message to be sent. A validity period longer than 48h is not supported (in this case, it will be automatically set to 48h).
+	ValidityPeriod *int32
+	// Used for scheduled Voice messages (message not to be sent immediately, but at scheduled time).
+	SendAt *Time
+	Retry  *Retry
+	// Ringing duration, unless there are no operator limitations. Default value is `45`. Note: There are no limitations on the Voice platform regarding this value, however, most of the operators have their own ring timeout limitations and it is advisable to keep the ringTimeout value up to `45` seconds.
+	RingTimeout  *int32
+	SendingSpeed *SendingSpeed
+	// The parameters that should be passed to the scenario on execution.
+	Parameters *map[string]string
+	// Indicating period of time in seconds between end user answering the call and message starting to be played. Minimal value is `0` and maximum value is `10` seconds. Default value is `0`.
+	Pause *int32
+	// [Early access: Contact your account manager to enable the usage] Record the call and expose it to client as URL inside the delivery report. Can be `true` or `false`.
+	Record             *bool
+	DeliveryTimeWindow *DeliveryTimeWindow
+	// Maximum possible duration of the call to be set, shown in seconds.
+	CallTimeout *int32
+}
+
+type _IvrMessage IvrMessage
+
+// NewIvrMessage instantiates a new IvrMessage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewIvrMessage(scenarioId string, destinations []Destination) *IvrMessage {
+	this := IvrMessage{}
+	this.ScenarioId = scenarioId
+	this.Destinations = destinations
+	return &this
+}
+
+// NewIvrMessageWithDefaults instantiates a new IvrMessage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewIvrMessageWithDefaults() *IvrMessage {
+	this := IvrMessage{}
+
+	return &this
+}
+
+// GetScenarioId returns the ScenarioId field value
+func (o *IvrMessage) GetScenarioId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ScenarioId
+}
+
+// GetScenarioIdOk returns a tuple with the ScenarioId field value
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetScenarioIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ScenarioId, true
+}
+
+// SetScenarioId sets field value
+func (o *IvrMessage) SetScenarioId(v string) {
+	o.ScenarioId = v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *IvrMessage) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *IvrMessage) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *IvrMessage) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetDestinations returns the Destinations field value
+func (o *IvrMessage) GetDestinations() []Destination {
+	if o == nil {
+		var ret []Destination
+		return ret
+	}
+
+	return o.Destinations
+}
+
+// GetDestinationsOk returns a tuple with the Destinations field value
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetDestinationsOk() ([]Destination, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Destinations, true
+}
+
+// SetDestinations sets field value
+func (o *IvrMessage) SetDestinations(v []Destination) {
+	o.Destinations = v
+}
+
+// GetNotifyUrl returns the NotifyUrl field value if set, zero value otherwise.
+func (o *IvrMessage) GetNotifyUrl() string {
+	if o == nil || IsNil(o.NotifyUrl) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyUrl
+}
+
+// GetNotifyUrlOk returns a tuple with the NotifyUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetNotifyUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyUrl) {
+		return nil, false
+	}
+	return o.NotifyUrl, true
+}
+
+// HasNotifyUrl returns a boolean if a field has been set.
+func (o *IvrMessage) HasNotifyUrl() bool {
+	if o != nil && !IsNil(o.NotifyUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyUrl gets a reference to the given string and assigns it to the NotifyUrl field.
+func (o *IvrMessage) SetNotifyUrl(v string) {
+	o.NotifyUrl = &v
+}
+
+// GetNotifyContentType returns the NotifyContentType field value if set, zero value otherwise.
+func (o *IvrMessage) GetNotifyContentType() string {
+	if o == nil || IsNil(o.NotifyContentType) {
+		var ret string
+		return ret
+	}
+	return *o.NotifyContentType
+}
+
+// GetNotifyContentTypeOk returns a tuple with the NotifyContentType field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetNotifyContentTypeOk() (*string, bool) {
+	if o == nil || IsNil(o.NotifyContentType) {
+		return nil, false
+	}
+	return o.NotifyContentType, true
+}
+
+// HasNotifyContentType returns a boolean if a field has been set.
+func (o *IvrMessage) HasNotifyContentType() bool {
+	if o != nil && !IsNil(o.NotifyContentType) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyContentType gets a reference to the given string and assigns it to the NotifyContentType field.
+func (o *IvrMessage) SetNotifyContentType(v string) {
+	o.NotifyContentType = &v
+}
+
+// GetNotifyContentVersion returns the NotifyContentVersion field value if set, zero value otherwise.
+func (o *IvrMessage) GetNotifyContentVersion() int32 {
+	if o == nil || IsNil(o.NotifyContentVersion) {
+		var ret int32
+		return ret
+	}
+	return *o.NotifyContentVersion
+}
+
+// GetNotifyContentVersionOk returns a tuple with the NotifyContentVersion field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetNotifyContentVersionOk() (*int32, bool) {
+	if o == nil || IsNil(o.NotifyContentVersion) {
+		return nil, false
+	}
+	return o.NotifyContentVersion, true
+}
+
+// HasNotifyContentVersion returns a boolean if a field has been set.
+func (o *IvrMessage) HasNotifyContentVersion() bool {
+	if o != nil && !IsNil(o.NotifyContentVersion) {
+		return true
+	}
+
+	return false
+}
+
+// SetNotifyContentVersion gets a reference to the given int32 and assigns it to the NotifyContentVersion field.
+func (o *IvrMessage) SetNotifyContentVersion(v int32) {
+	o.NotifyContentVersion = &v
+}
+
+// GetCallbackData returns the CallbackData field value if set, zero value otherwise.
+func (o *IvrMessage) GetCallbackData() string {
+	if o == nil || IsNil(o.CallbackData) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackData
+}
+
+// GetCallbackDataOk returns a tuple with the CallbackData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetCallbackDataOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackData) {
+		return nil, false
+	}
+	return o.CallbackData, true
+}
+
+// HasCallbackData returns a boolean if a field has been set.
+func (o *IvrMessage) HasCallbackData() bool {
+	if o != nil && !IsNil(o.CallbackData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackData gets a reference to the given string and assigns it to the CallbackData field.
+func (o *IvrMessage) SetCallbackData(v string) {
+	o.CallbackData = &v
+}
+
+// GetValidityPeriod returns the ValidityPeriod field value if set, zero value otherwise.
+func (o *IvrMessage) GetValidityPeriod() int32 {
+	if o == nil || IsNil(o.ValidityPeriod) {
+		var ret int32
+		return ret
+	}
+	return *o.ValidityPeriod
+}
+
+// GetValidityPeriodOk returns a tuple with the ValidityPeriod field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetValidityPeriodOk() (*int32, bool) {
+	if o == nil || IsNil(o.ValidityPeriod) {
+		return nil, false
+	}
+	return o.ValidityPeriod, true
+}
+
+// HasValidityPeriod returns a boolean if a field has been set.
+func (o *IvrMessage) HasValidityPeriod() bool {
+	if o != nil && !IsNil(o.ValidityPeriod) {
+		return true
+	}
+
+	return false
+}
+
+// SetValidityPeriod gets a reference to the given int32 and assigns it to the ValidityPeriod field.
+func (o *IvrMessage) SetValidityPeriod(v int32) {
+	o.ValidityPeriod = &v
+}
+
+// GetSendAt returns the SendAt field value if set, zero value otherwise.
+func (o *IvrMessage) GetSendAt() Time {
+	if o == nil || IsNil(o.SendAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SendAt
+}
+
+// GetSendAtOk returns a tuple with the SendAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetSendAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SendAt) {
+		return nil, false
+	}
+	return o.SendAt, true
+}
+
+// HasSendAt returns a boolean if a field has been set.
+func (o *IvrMessage) HasSendAt() bool {
+	if o != nil && !IsNil(o.SendAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendAt gets a reference to the given Time and assigns it to the SendAt field.
+func (o *IvrMessage) SetSendAt(v Time) {
+	o.SendAt = &v
+}
+
+// GetRetry returns the Retry field value if set, zero value otherwise.
+func (o *IvrMessage) GetRetry() Retry {
+	if o == nil || IsNil(o.Retry) {
+		var ret Retry
+		return ret
+	}
+	return *o.Retry
+}
+
+// GetRetryOk returns a tuple with the Retry field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetRetryOk() (*Retry, bool) {
+	if o == nil || IsNil(o.Retry) {
+		return nil, false
+	}
+	return o.Retry, true
+}
+
+// HasRetry returns a boolean if a field has been set.
+func (o *IvrMessage) HasRetry() bool {
+	if o != nil && !IsNil(o.Retry) {
+		return true
+	}
+
+	return false
+}
+
+// SetRetry gets a reference to the given Retry and assigns it to the Retry field.
+func (o *IvrMessage) SetRetry(v Retry) {
+	o.Retry = &v
+}
+
+// GetRingTimeout returns the RingTimeout field value if set, zero value otherwise.
+func (o *IvrMessage) GetRingTimeout() int32 {
+	if o == nil || IsNil(o.RingTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.RingTimeout
+}
+
+// GetRingTimeoutOk returns a tuple with the RingTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetRingTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.RingTimeout) {
+		return nil, false
+	}
+	return o.RingTimeout, true
+}
+
+// HasRingTimeout returns a boolean if a field has been set.
+func (o *IvrMessage) HasRingTimeout() bool {
+	if o != nil && !IsNil(o.RingTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingTimeout gets a reference to the given int32 and assigns it to the RingTimeout field.
+func (o *IvrMessage) SetRingTimeout(v int32) {
+	o.RingTimeout = &v
+}
+
+// GetSendingSpeed returns the SendingSpeed field value if set, zero value otherwise.
+func (o *IvrMessage) GetSendingSpeed() SendingSpeed {
+	if o == nil || IsNil(o.SendingSpeed) {
+		var ret SendingSpeed
+		return ret
+	}
+	return *o.SendingSpeed
+}
+
+// GetSendingSpeedOk returns a tuple with the SendingSpeed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetSendingSpeedOk() (*SendingSpeed, bool) {
+	if o == nil || IsNil(o.SendingSpeed) {
+		return nil, false
+	}
+	return o.SendingSpeed, true
+}
+
+// HasSendingSpeed returns a boolean if a field has been set.
+func (o *IvrMessage) HasSendingSpeed() bool {
+	if o != nil && !IsNil(o.SendingSpeed) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendingSpeed gets a reference to the given SendingSpeed and assigns it to the SendingSpeed field.
+func (o *IvrMessage) SetSendingSpeed(v SendingSpeed) {
+	o.SendingSpeed = &v
+}
+
+// GetParameters returns the Parameters field value if set, zero value otherwise.
+func (o *IvrMessage) GetParameters() map[string]string {
+	if o == nil || IsNil(o.Parameters) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.Parameters
+}
+
+// GetParametersOk returns a tuple with the Parameters field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetParametersOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.Parameters) {
+		return nil, false
+	}
+	return o.Parameters, true
+}
+
+// HasParameters returns a boolean if a field has been set.
+func (o *IvrMessage) HasParameters() bool {
+	if o != nil && !IsNil(o.Parameters) {
+		return true
+	}
+
+	return false
+}
+
+// SetParameters gets a reference to the given map[string]string and assigns it to the Parameters field.
+func (o *IvrMessage) SetParameters(v map[string]string) {
+	o.Parameters = &v
+}
+
+// GetPause returns the Pause field value if set, zero value otherwise.
+func (o *IvrMessage) GetPause() int32 {
+	if o == nil || IsNil(o.Pause) {
+		var ret int32
+		return ret
+	}
+	return *o.Pause
+}
+
+// GetPauseOk returns a tuple with the Pause field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetPauseOk() (*int32, bool) {
+	if o == nil || IsNil(o.Pause) {
+		return nil, false
+	}
+	return o.Pause, true
+}
+
+// HasPause returns a boolean if a field has been set.
+func (o *IvrMessage) HasPause() bool {
+	if o != nil && !IsNil(o.Pause) {
+		return true
+	}
+
+	return false
+}
+
+// SetPause gets a reference to the given int32 and assigns it to the Pause field.
+func (o *IvrMessage) SetPause(v int32) {
+	o.Pause = &v
+}
+
+// GetRecord returns the Record field value if set, zero value otherwise.
+func (o *IvrMessage) GetRecord() bool {
+	if o == nil || IsNil(o.Record) {
+		var ret bool
+		return ret
+	}
+	return *o.Record
+}
+
+// GetRecordOk returns a tuple with the Record field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetRecordOk() (*bool, bool) {
+	if o == nil || IsNil(o.Record) {
+		return nil, false
+	}
+	return o.Record, true
+}
+
+// HasRecord returns a boolean if a field has been set.
+func (o *IvrMessage) HasRecord() bool {
+	if o != nil && !IsNil(o.Record) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecord gets a reference to the given bool and assigns it to the Record field.
+func (o *IvrMessage) SetRecord(v bool) {
+	o.Record = &v
+}
+
+// GetDeliveryTimeWindow returns the DeliveryTimeWindow field value if set, zero value otherwise.
+func (o *IvrMessage) GetDeliveryTimeWindow() DeliveryTimeWindow {
+	if o == nil || IsNil(o.DeliveryTimeWindow) {
+		var ret DeliveryTimeWindow
+		return ret
+	}
+	return *o.DeliveryTimeWindow
+}
+
+// GetDeliveryTimeWindowOk returns a tuple with the DeliveryTimeWindow field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetDeliveryTimeWindowOk() (*DeliveryTimeWindow, bool) {
+	if o == nil || IsNil(o.DeliveryTimeWindow) {
+		return nil, false
+	}
+	return o.DeliveryTimeWindow, true
+}
+
+// HasDeliveryTimeWindow returns a boolean if a field has been set.
+func (o *IvrMessage) HasDeliveryTimeWindow() bool {
+	if o != nil && !IsNil(o.DeliveryTimeWindow) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeliveryTimeWindow gets a reference to the given DeliveryTimeWindow and assigns it to the DeliveryTimeWindow field.
+func (o *IvrMessage) SetDeliveryTimeWindow(v DeliveryTimeWindow) {
+	o.DeliveryTimeWindow = &v
+}
+
+// GetCallTimeout returns the CallTimeout field value if set, zero value otherwise.
+func (o *IvrMessage) GetCallTimeout() int32 {
+	if o == nil || IsNil(o.CallTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.CallTimeout
+}
+
+// GetCallTimeoutOk returns a tuple with the CallTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *IvrMessage) GetCallTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.CallTimeout) {
+		return nil, false
+	}
+	return o.CallTimeout, true
+}
+
+// HasCallTimeout returns a boolean if a field has been set.
+func (o *IvrMessage) HasCallTimeout() bool {
+	if o != nil && !IsNil(o.CallTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallTimeout gets a reference to the given int32 and assigns it to the CallTimeout field.
+func (o *IvrMessage) SetCallTimeout(v int32) {
+	o.CallTimeout = &v
+}
+
+func (o IvrMessage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o IvrMessage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["scenarioId"] = o.ScenarioId
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	toSerialize["destinations"] = o.Destinations
+	if !IsNil(o.NotifyUrl) {
+		toSerialize["notifyUrl"] = o.NotifyUrl
+	}
+	if !IsNil(o.NotifyContentType) {
+		toSerialize["notifyContentType"] = o.NotifyContentType
+	}
+	if !IsNil(o.NotifyContentVersion) {
+		toSerialize["notifyContentVersion"] = o.NotifyContentVersion
+	}
+	if !IsNil(o.CallbackData) {
+		toSerialize["callbackData"] = o.CallbackData
+	}
+	if !IsNil(o.ValidityPeriod) {
+		toSerialize["validityPeriod"] = o.ValidityPeriod
+	}
+	if !IsNil(o.SendAt) {
+		toSerialize["sendAt"] = o.SendAt
+	}
+	if !IsNil(o.Retry) {
+		toSerialize["retry"] = o.Retry
+	}
+	if !IsNil(o.RingTimeout) {
+		toSerialize["ringTimeout"] = o.RingTimeout
+	}
+	if !IsNil(o.SendingSpeed) {
+		toSerialize["sendingSpeed"] = o.SendingSpeed
+	}
+	if !IsNil(o.Parameters) {
+		toSerialize["parameters"] = o.Parameters
+	}
+	if !IsNil(o.Pause) {
+		toSerialize["pause"] = o.Pause
+	}
+	if !IsNil(o.Record) {
+		toSerialize["record"] = o.Record
+	}
+	if !IsNil(o.DeliveryTimeWindow) {
+		toSerialize["deliveryTimeWindow"] = o.DeliveryTimeWindow
+	}
+	if !IsNil(o.CallTimeout) {
+		toSerialize["callTimeout"] = o.CallTimeout
+	}
+	return toSerialize, nil
+}
+
+type NullableIvrMessage struct {
+	value *IvrMessage
+	isSet bool
+}
+
+func (v NullableIvrMessage) Get() *IvrMessage {
+	return v.value
+}
+
+func (v *NullableIvrMessage) Set(val *IvrMessage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableIvrMessage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableIvrMessage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableIvrMessage(val *IvrMessage) *NullableIvrMessage {
+	return &NullableIvrMessage{value: val, isSet: true}
+}
+
+func (v NullableIvrMessage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableIvrMessage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/language.go b/pkg/infobip/models/voice/language.go
new file mode 100644
index 0000000..03a0c96
--- /dev/null
+++ b/pkg/infobip/models/voice/language.go
@@ -0,0 +1,226 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// Language Text language. Must be defined for correct pronunciation. For more details on available languages and voices, see our [documentation](https://www.infobip.com/docs/voice-and-video/outbound-calls#text-to-speech-voice-over-broadcast).
+type Language string
+
+// List of Language
+const (
+	LANGUAGE_AR        Language = "ar"
+	LANGUAGE_BN        Language = "bn"
+	LANGUAGE_BG        Language = "bg"
+	LANGUAGE_CA        Language = "ca"
+	LANGUAGE_ZH_CN     Language = "zh-cn"
+	LANGUAGE_ZH_TW     Language = "zh-tw"
+	LANGUAGE_HR        Language = "hr"
+	LANGUAGE_CS        Language = "cs"
+	LANGUAGE_DA        Language = "da"
+	LANGUAGE_NL        Language = "nl"
+	LANGUAGE_EN        Language = "en"
+	LANGUAGE_EN_AU     Language = "en-au"
+	LANGUAGE_EN_GB     Language = "en-gb"
+	LANGUAGE_EN_CA     Language = "en-ca"
+	LANGUAGE_EN_IN     Language = "en-in"
+	LANGUAGE_EN_IE     Language = "en-ie"
+	LANGUAGE_EN_GB_WLS Language = "en-gb-wls"
+	LANGUAGE_EPO       Language = "epo"
+	LANGUAGE_FIL_PH    Language = "fil-ph"
+	LANGUAGE_FI        Language = "fi"
+	LANGUAGE_FR        Language = "fr"
+	LANGUAGE_FR_CA     Language = "fr-ca"
+	LANGUAGE_FR_CH     Language = "fr-ch"
+	LANGUAGE_DE        Language = "de"
+	LANGUAGE_DE_AT     Language = "de-at"
+	LANGUAGE_DE_CH     Language = "de-ch"
+	LANGUAGE_EL        Language = "el"
+	LANGUAGE_GU        Language = "gu"
+	LANGUAGE_HE        Language = "he"
+	LANGUAGE_HI        Language = "hi"
+	LANGUAGE_HU        Language = "hu"
+	LANGUAGE_IS        Language = "is"
+	LANGUAGE_ID        Language = "id"
+	LANGUAGE_IT        Language = "it"
+	LANGUAGE_JA        Language = "ja"
+	LANGUAGE_KN        Language = "kn"
+	LANGUAGE_KO        Language = "ko"
+	LANGUAGE_MS        Language = "ms"
+	LANGUAGE_ML        Language = "ml"
+	LANGUAGE_NO        Language = "no"
+	LANGUAGE_PL        Language = "pl"
+	LANGUAGE_PT_PT     Language = "pt-pt"
+	LANGUAGE_PT_BR     Language = "pt-br"
+	LANGUAGE_RO        Language = "ro"
+	LANGUAGE_RU        Language = "ru"
+	LANGUAGE_SK        Language = "sk"
+	LANGUAGE_SL        Language = "sl"
+	LANGUAGE_ES        Language = "es"
+	LANGUAGE_ES_GL     Language = "es-gl"
+	LANGUAGE_ES_MX     Language = "es-mx"
+	LANGUAGE_SV        Language = "sv"
+	LANGUAGE_TA        Language = "ta"
+	LANGUAGE_TE        Language = "te"
+	LANGUAGE_TH        Language = "th"
+	LANGUAGE_TR        Language = "tr"
+	LANGUAGE_UK        Language = "uk"
+	LANGUAGE_VI        Language = "vi"
+	LANGUAGE_WLS       Language = "wls"
+	LANGUAGE_AR_MA     Language = "ar-ma"
+	LANGUAGE_UR_PK     Language = "ur-pk"
+)
+
+// All allowed values of Language enum
+var AllowedLanguageEnumValues = []Language{
+	"ar",
+	"bn",
+	"bg",
+	"ca",
+	"zh-cn",
+	"zh-tw",
+	"hr",
+	"cs",
+	"da",
+	"nl",
+	"en",
+	"en-au",
+	"en-gb",
+	"en-ca",
+	"en-in",
+	"en-ie",
+	"en-gb-wls",
+	"epo",
+	"fil-ph",
+	"fi",
+	"fr",
+	"fr-ca",
+	"fr-ch",
+	"de",
+	"de-at",
+	"de-ch",
+	"el",
+	"gu",
+	"he",
+	"hi",
+	"hu",
+	"is",
+	"id",
+	"it",
+	"ja",
+	"kn",
+	"ko",
+	"ms",
+	"ml",
+	"no",
+	"pl",
+	"pt-pt",
+	"pt-br",
+	"ro",
+	"ru",
+	"sk",
+	"sl",
+	"es",
+	"es-gl",
+	"es-mx",
+	"sv",
+	"ta",
+	"te",
+	"th",
+	"tr",
+	"uk",
+	"vi",
+	"wls",
+	"ar-ma",
+	"ur-pk",
+}
+
+func (v *Language) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := Language(value)
+	for _, existing := range AllowedLanguageEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid Language", value)
+}
+
+// NewLanguageFromValue returns a pointer to a valid Language
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewLanguageFromValue(v string) (*Language, error) {
+	ev := Language(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for Language: valid values are %v", v, AllowedLanguageEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v Language) IsValid() bool {
+	for _, existing := range AllowedLanguageEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to Language value
+func (v Language) Ptr() *Language {
+	return &v
+}
+
+type NullableLanguage struct {
+	value *Language
+	isSet bool
+}
+
+func (v NullableLanguage) Get() *Language {
+	return v.value
+}
+
+func (v *NullableLanguage) Set(val *Language) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLanguage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLanguage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLanguage(val *Language) *NullableLanguage {
+	return &NullableLanguage{value: val, isSet: true}
+}
+
+func (v NullableLanguage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLanguage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/launch_scenario_request.go b/pkg/infobip/models/voice/launch_scenario_request.go
new file mode 100644
index 0000000..9632c38
--- /dev/null
+++ b/pkg/infobip/models/voice/launch_scenario_request.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the LaunchScenarioRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &LaunchScenarioRequest{}
+
+// LaunchScenarioRequest struct for LaunchScenarioRequest
+type LaunchScenarioRequest struct {
+	// The ID which uniquely identifies the request.
+	BulkId *string
+	// Array of IVR messages to be sent, one object per every message.
+	Messages []IvrMessage
+}
+
+type _LaunchScenarioRequest LaunchScenarioRequest
+
+// NewLaunchScenarioRequest instantiates a new LaunchScenarioRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewLaunchScenarioRequest(messages []IvrMessage) *LaunchScenarioRequest {
+	this := LaunchScenarioRequest{}
+	this.Messages = messages
+	return &this
+}
+
+// NewLaunchScenarioRequestWithDefaults instantiates a new LaunchScenarioRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLaunchScenarioRequestWithDefaults() *LaunchScenarioRequest {
+	this := LaunchScenarioRequest{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *LaunchScenarioRequest) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LaunchScenarioRequest) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *LaunchScenarioRequest) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *LaunchScenarioRequest) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessages returns the Messages field value
+func (o *LaunchScenarioRequest) GetMessages() []IvrMessage {
+	if o == nil {
+		var ret []IvrMessage
+		return ret
+	}
+
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value
+// and a boolean to check if the value has been set.
+func (o *LaunchScenarioRequest) GetMessagesOk() ([]IvrMessage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// SetMessages sets field value
+func (o *LaunchScenarioRequest) SetMessages(v []IvrMessage) {
+	o.Messages = v
+}
+
+func (o LaunchScenarioRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o LaunchScenarioRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	toSerialize["messages"] = o.Messages
+	return toSerialize, nil
+}
+
+type NullableLaunchScenarioRequest struct {
+	value *LaunchScenarioRequest
+	isSet bool
+}
+
+func (v NullableLaunchScenarioRequest) Get() *LaunchScenarioRequest {
+	return v.value
+}
+
+func (v *NullableLaunchScenarioRequest) Set(val *LaunchScenarioRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLaunchScenarioRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLaunchScenarioRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLaunchScenarioRequest(val *LaunchScenarioRequest) *NullableLaunchScenarioRequest {
+	return &NullableLaunchScenarioRequest{value: val, isSet: true}
+}
+
+func (v NullableLaunchScenarioRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLaunchScenarioRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/logs_report.go b/pkg/infobip/models/voice/logs_report.go
new file mode 100644
index 0000000..aab7478
--- /dev/null
+++ b/pkg/infobip/models/voice/logs_report.go
@@ -0,0 +1,533 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the LogsReport type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &LogsReport{}
+
+// LogsReport Array of voice message logs, one object per each message.
+type LogsReport struct {
+	// The ID that uniquely identifies the bulk of messages.
+	BulkId *string
+	// The ID that uniquely identifies the message sent.
+	MessageId *string
+	// Destination address of the voice message.
+	To *string
+	// The sender ID which can be alphanumeric or numeric.
+	From *string
+	// Content of the voice message that was sent.
+	Text *string
+	// Date and time when the voice message was initiated. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSSZ.
+	SentAt *Time
+	// Date and time when the Infobip services finished processing the voice message (i.e. delivered to the destination, delivered to the destination network, etc.).
+	DoneAt *Time
+	// Voice message duration in seconds.
+	Duration *int32
+	// Mobile country and network codes.
+	MccMnc *string
+	Price  *Price
+	Status *SingleMessageStatus
+	Error  *VoiceError
+}
+
+// NewLogsReport instantiates a new LogsReport object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewLogsReport() *LogsReport {
+	this := LogsReport{}
+	return &this
+}
+
+// NewLogsReportWithDefaults instantiates a new LogsReport object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsReportWithDefaults() *LogsReport {
+	this := LogsReport{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *LogsReport) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *LogsReport) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *LogsReport) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *LogsReport) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *LogsReport) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *LogsReport) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *LogsReport) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *LogsReport) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *LogsReport) SetTo(v string) {
+	o.To = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *LogsReport) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *LogsReport) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *LogsReport) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *LogsReport) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *LogsReport) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *LogsReport) SetText(v string) {
+	o.Text = &v
+}
+
+// GetSentAt returns the SentAt field value if set, zero value otherwise.
+func (o *LogsReport) GetSentAt() Time {
+	if o == nil || IsNil(o.SentAt) {
+		var ret Time
+		return ret
+	}
+	return *o.SentAt
+}
+
+// GetSentAtOk returns a tuple with the SentAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetSentAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.SentAt) {
+		return nil, false
+	}
+	return o.SentAt, true
+}
+
+// HasSentAt returns a boolean if a field has been set.
+func (o *LogsReport) HasSentAt() bool {
+	if o != nil && !IsNil(o.SentAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetSentAt gets a reference to the given Time and assigns it to the SentAt field.
+func (o *LogsReport) SetSentAt(v Time) {
+	o.SentAt = &v
+}
+
+// GetDoneAt returns the DoneAt field value if set, zero value otherwise.
+func (o *LogsReport) GetDoneAt() Time {
+	if o == nil || IsNil(o.DoneAt) {
+		var ret Time
+		return ret
+	}
+	return *o.DoneAt
+}
+
+// GetDoneAtOk returns a tuple with the DoneAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetDoneAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.DoneAt) {
+		return nil, false
+	}
+	return o.DoneAt, true
+}
+
+// HasDoneAt returns a boolean if a field has been set.
+func (o *LogsReport) HasDoneAt() bool {
+	if o != nil && !IsNil(o.DoneAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetDoneAt gets a reference to the given Time and assigns it to the DoneAt field.
+func (o *LogsReport) SetDoneAt(v Time) {
+	o.DoneAt = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *LogsReport) GetDuration() int32 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int32
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *LogsReport) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int32 and assigns it to the Duration field.
+func (o *LogsReport) SetDuration(v int32) {
+	o.Duration = &v
+}
+
+// GetMccMnc returns the MccMnc field value if set, zero value otherwise.
+func (o *LogsReport) GetMccMnc() string {
+	if o == nil || IsNil(o.MccMnc) {
+		var ret string
+		return ret
+	}
+	return *o.MccMnc
+}
+
+// GetMccMncOk returns a tuple with the MccMnc field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetMccMncOk() (*string, bool) {
+	if o == nil || IsNil(o.MccMnc) {
+		return nil, false
+	}
+	return o.MccMnc, true
+}
+
+// HasMccMnc returns a boolean if a field has been set.
+func (o *LogsReport) HasMccMnc() bool {
+	if o != nil && !IsNil(o.MccMnc) {
+		return true
+	}
+
+	return false
+}
+
+// SetMccMnc gets a reference to the given string and assigns it to the MccMnc field.
+func (o *LogsReport) SetMccMnc(v string) {
+	o.MccMnc = &v
+}
+
+// GetPrice returns the Price field value if set, zero value otherwise.
+func (o *LogsReport) GetPrice() Price {
+	if o == nil || IsNil(o.Price) {
+		var ret Price
+		return ret
+	}
+	return *o.Price
+}
+
+// GetPriceOk returns a tuple with the Price field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetPriceOk() (*Price, bool) {
+	if o == nil || IsNil(o.Price) {
+		return nil, false
+	}
+	return o.Price, true
+}
+
+// HasPrice returns a boolean if a field has been set.
+func (o *LogsReport) HasPrice() bool {
+	if o != nil && !IsNil(o.Price) {
+		return true
+	}
+
+	return false
+}
+
+// SetPrice gets a reference to the given Price and assigns it to the Price field.
+func (o *LogsReport) SetPrice(v Price) {
+	o.Price = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *LogsReport) GetStatus() SingleMessageStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret SingleMessageStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetStatusOk() (*SingleMessageStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *LogsReport) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given SingleMessageStatus and assigns it to the Status field.
+func (o *LogsReport) SetStatus(v SingleMessageStatus) {
+	o.Status = &v
+}
+
+// GetError returns the Error field value if set, zero value otherwise.
+func (o *LogsReport) GetError() VoiceError {
+	if o == nil || IsNil(o.Error) {
+		var ret VoiceError
+		return ret
+	}
+	return *o.Error
+}
+
+// GetErrorOk returns a tuple with the Error field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsReport) GetErrorOk() (*VoiceError, bool) {
+	if o == nil || IsNil(o.Error) {
+		return nil, false
+	}
+	return o.Error, true
+}
+
+// HasError returns a boolean if a field has been set.
+func (o *LogsReport) HasError() bool {
+	if o != nil && !IsNil(o.Error) {
+		return true
+	}
+
+	return false
+}
+
+// SetError gets a reference to the given VoiceError and assigns it to the Error field.
+func (o *LogsReport) SetError(v VoiceError) {
+	o.Error = &v
+}
+
+func (o LogsReport) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o LogsReport) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	if !IsNil(o.SentAt) {
+		toSerialize["sentAt"] = o.SentAt
+	}
+	if !IsNil(o.DoneAt) {
+		toSerialize["doneAt"] = o.DoneAt
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.MccMnc) {
+		toSerialize["mccMnc"] = o.MccMnc
+	}
+	if !IsNil(o.Price) {
+		toSerialize["price"] = o.Price
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Error) {
+		toSerialize["error"] = o.Error
+	}
+	return toSerialize, nil
+}
+
+type NullableLogsReport struct {
+	value *LogsReport
+	isSet bool
+}
+
+func (v NullableLogsReport) Get() *LogsReport {
+	return v.value
+}
+
+func (v *NullableLogsReport) Set(val *LogsReport) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsReport) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsReport) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsReport(val *LogsReport) *NullableLogsReport {
+	return &NullableLogsReport{value: val, isSet: true}
+}
+
+func (v NullableLogsReport) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsReport) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/logs_response.go b/pkg/infobip/models/voice/logs_response.go
new file mode 100644
index 0000000..c23b15f
--- /dev/null
+++ b/pkg/infobip/models/voice/logs_response.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the LogsResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &LogsResponse{}
+
+// LogsResponse struct for LogsResponse
+type LogsResponse struct {
+	// Array of voice message logs, one object per each message.
+	Results []LogsReport
+}
+
+// NewLogsResponse instantiates a new LogsResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewLogsResponse() *LogsResponse {
+	this := LogsResponse{}
+	return &this
+}
+
+// NewLogsResponseWithDefaults instantiates a new LogsResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewLogsResponseWithDefaults() *LogsResponse {
+	this := LogsResponse{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *LogsResponse) GetResults() []LogsReport {
+	if o == nil || IsNil(o.Results) {
+		var ret []LogsReport
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *LogsResponse) GetResultsOk() ([]LogsReport, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *LogsResponse) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []LogsReport and assigns it to the Results field.
+func (o *LogsResponse) SetResults(v []LogsReport) {
+	o.Results = v
+}
+
+func (o LogsResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o LogsResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	return toSerialize, nil
+}
+
+type NullableLogsResponse struct {
+	value *LogsResponse
+	isSet bool
+}
+
+func (v NullableLogsResponse) Get() *LogsResponse {
+	return v.value
+}
+
+func (v *NullableLogsResponse) Set(val *LogsResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableLogsResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableLogsResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableLogsResponse(val *LogsResponse) *NullableLogsResponse {
+	return &NullableLogsResponse{value: val, isSet: true}
+}
+
+func (v NullableLogsResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableLogsResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/machine_detection.go b/pkg/infobip/models/voice/machine_detection.go
new file mode 100644
index 0000000..ea02af3
--- /dev/null
+++ b/pkg/infobip/models/voice/machine_detection.go
@@ -0,0 +1,108 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// MachineDetection Machine Detection action detects answering machines at the beginning of the call. This action sets `machineAnswered` variable upon completion to `true`  or `false`. Machine Detection introduces a delay of approximately 4s. This is the minimum time needed for machine detection. Machine Detection action has to be followed by a condition action that uses the value of `machineAnswered` for branching into the 'human answered' block and the 'answering machine answered' block. The 'answering machine' block can have a Say/Play/PlayFromRecording action or a Hangup action. If answering machine is detected, and a Say/Play/Play from Recording action is up next - the voice message will start playing into the voice mail only after the answering machine is finished with its greeting.
+type MachineDetection string
+
+// List of MachineDetection
+const (
+	MACHINEDETECTION_MACHINE_DETECTION MachineDetection = "machineDetection"
+)
+
+// All allowed values of MachineDetection enum
+var AllowedMachineDetectionEnumValues = []MachineDetection{
+	"machineDetection",
+}
+
+func (v *MachineDetection) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := MachineDetection(value)
+	for _, existing := range AllowedMachineDetectionEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid MachineDetection", value)
+}
+
+// NewMachineDetectionFromValue returns a pointer to a valid MachineDetection
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewMachineDetectionFromValue(v string) (*MachineDetection, error) {
+	ev := MachineDetection(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for MachineDetection: valid values are %v", v, AllowedMachineDetectionEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v MachineDetection) IsValid() bool {
+	for _, existing := range AllowedMachineDetectionEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to MachineDetection value
+func (v MachineDetection) Ptr() *MachineDetection {
+	return &v
+}
+
+type NullableMachineDetection struct {
+	value *MachineDetection
+	isSet bool
+}
+
+func (v NullableMachineDetection) Get() *MachineDetection {
+	return v.value
+}
+
+func (v *NullableMachineDetection) Set(val *MachineDetection) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMachineDetection) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMachineDetection) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMachineDetection(val *MachineDetection) *NullableMachineDetection {
+	return &NullableMachineDetection{value: val, isSet: true}
+}
+
+func (v NullableMachineDetection) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMachineDetection) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/machine_detection_properties.go b/pkg/infobip/models/voice/machine_detection_properties.go
new file mode 100644
index 0000000..f504f24
--- /dev/null
+++ b/pkg/infobip/models/voice/machine_detection_properties.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MachineDetectionProperties type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MachineDetectionProperties{}
+
+// MachineDetectionProperties Properties of the events that provide Answering Machine Detection result.
+type MachineDetectionProperties struct {
+	DetectionResult *DetectionResult
+	// Custom data.
+	CustomData *map[string]string
+}
+
+// NewMachineDetectionProperties instantiates a new MachineDetectionProperties object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMachineDetectionProperties() *MachineDetectionProperties {
+	this := MachineDetectionProperties{}
+	return &this
+}
+
+// NewMachineDetectionPropertiesWithDefaults instantiates a new MachineDetectionProperties object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMachineDetectionPropertiesWithDefaults() *MachineDetectionProperties {
+	this := MachineDetectionProperties{}
+
+	return &this
+}
+
+// GetDetectionResult returns the DetectionResult field value if set, zero value otherwise.
+func (o *MachineDetectionProperties) GetDetectionResult() DetectionResult {
+	if o == nil || IsNil(o.DetectionResult) {
+		var ret DetectionResult
+		return ret
+	}
+	return *o.DetectionResult
+}
+
+// GetDetectionResultOk returns a tuple with the DetectionResult field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MachineDetectionProperties) GetDetectionResultOk() (*DetectionResult, bool) {
+	if o == nil || IsNil(o.DetectionResult) {
+		return nil, false
+	}
+	return o.DetectionResult, true
+}
+
+// HasDetectionResult returns a boolean if a field has been set.
+func (o *MachineDetectionProperties) HasDetectionResult() bool {
+	if o != nil && !IsNil(o.DetectionResult) {
+		return true
+	}
+
+	return false
+}
+
+// SetDetectionResult gets a reference to the given DetectionResult and assigns it to the DetectionResult field.
+func (o *MachineDetectionProperties) SetDetectionResult(v DetectionResult) {
+	o.DetectionResult = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *MachineDetectionProperties) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MachineDetectionProperties) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *MachineDetectionProperties) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *MachineDetectionProperties) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o MachineDetectionProperties) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MachineDetectionProperties) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DetectionResult) {
+		toSerialize["detectionResult"] = o.DetectionResult
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableMachineDetectionProperties struct {
+	value *MachineDetectionProperties
+	isSet bool
+}
+
+func (v NullableMachineDetectionProperties) Get() *MachineDetectionProperties {
+	return v.value
+}
+
+func (v *NullableMachineDetectionProperties) Set(val *MachineDetectionProperties) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMachineDetectionProperties) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMachineDetectionProperties) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMachineDetectionProperties(val *MachineDetectionProperties) *NullableMachineDetectionProperties {
+	return &NullableMachineDetectionProperties{value: val, isSet: true}
+}
+
+func (v NullableMachineDetectionProperties) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMachineDetectionProperties) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/machine_detection_request.go b/pkg/infobip/models/voice/machine_detection_request.go
new file mode 100644
index 0000000..bb3abbe
--- /dev/null
+++ b/pkg/infobip/models/voice/machine_detection_request.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MachineDetectionRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MachineDetectionRequest{}
+
+// MachineDetectionRequest struct for MachineDetectionRequest
+type MachineDetectionRequest struct {
+	// Indicates whether to enable answering machine detection. If set to true, answering machine detection will generate an event indicating if the call was answered by a human or a machine.
+	Enabled bool
+	// Indicates maximum duration for detecting the end of the message when a answering machine is detected. If set to 0, no end of message detection will be done. Expressed in seconds.
+	MessageDetectionTimeout *int32
+}
+
+type _MachineDetectionRequest MachineDetectionRequest
+
+// NewMachineDetectionRequest instantiates a new MachineDetectionRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMachineDetectionRequest(enabled bool) *MachineDetectionRequest {
+	this := MachineDetectionRequest{}
+	this.Enabled = enabled
+	return &this
+}
+
+// NewMachineDetectionRequestWithDefaults instantiates a new MachineDetectionRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMachineDetectionRequestWithDefaults() *MachineDetectionRequest {
+	this := MachineDetectionRequest{}
+
+	return &this
+}
+
+// GetEnabled returns the Enabled field value
+func (o *MachineDetectionRequest) GetEnabled() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value
+// and a boolean to check if the value has been set.
+func (o *MachineDetectionRequest) GetEnabledOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Enabled, true
+}
+
+// SetEnabled sets field value
+func (o *MachineDetectionRequest) SetEnabled(v bool) {
+	o.Enabled = v
+}
+
+// GetMessageDetectionTimeout returns the MessageDetectionTimeout field value if set, zero value otherwise.
+func (o *MachineDetectionRequest) GetMessageDetectionTimeout() int32 {
+	if o == nil || IsNil(o.MessageDetectionTimeout) {
+		var ret int32
+		return ret
+	}
+	return *o.MessageDetectionTimeout
+}
+
+// GetMessageDetectionTimeoutOk returns a tuple with the MessageDetectionTimeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MachineDetectionRequest) GetMessageDetectionTimeoutOk() (*int32, bool) {
+	if o == nil || IsNil(o.MessageDetectionTimeout) {
+		return nil, false
+	}
+	return o.MessageDetectionTimeout, true
+}
+
+// HasMessageDetectionTimeout returns a boolean if a field has been set.
+func (o *MachineDetectionRequest) HasMessageDetectionTimeout() bool {
+	if o != nil && !IsNil(o.MessageDetectionTimeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageDetectionTimeout gets a reference to the given int32 and assigns it to the MessageDetectionTimeout field.
+func (o *MachineDetectionRequest) SetMessageDetectionTimeout(v int32) {
+	o.MessageDetectionTimeout = &v
+}
+
+func (o MachineDetectionRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MachineDetectionRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["enabled"] = o.Enabled
+	if !IsNil(o.MessageDetectionTimeout) {
+		toSerialize["messageDetectionTimeout"] = o.MessageDetectionTimeout
+	}
+	return toSerialize, nil
+}
+
+type NullableMachineDetectionRequest struct {
+	value *MachineDetectionRequest
+	isSet bool
+}
+
+func (v NullableMachineDetectionRequest) Get() *MachineDetectionRequest {
+	return v.value
+}
+
+func (v *NullableMachineDetectionRequest) Set(val *MachineDetectionRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMachineDetectionRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMachineDetectionRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMachineDetectionRequest(val *MachineDetectionRequest) *NullableMachineDetectionRequest {
+	return &NullableMachineDetectionRequest{value: val, isSet: true}
+}
+
+func (v NullableMachineDetectionRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMachineDetectionRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/media_properties.go b/pkg/infobip/models/voice/media_properties.go
new file mode 100644
index 0000000..989097d
--- /dev/null
+++ b/pkg/infobip/models/voice/media_properties.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MediaProperties type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MediaProperties{}
+
+// MediaProperties struct for MediaProperties
+type MediaProperties struct {
+	Audio *AudioMediaProperties
+	Video *VideoMediaProperties
+}
+
+// NewMediaProperties instantiates a new MediaProperties object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMediaProperties() *MediaProperties {
+	this := MediaProperties{}
+	return &this
+}
+
+// NewMediaPropertiesWithDefaults instantiates a new MediaProperties object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMediaPropertiesWithDefaults() *MediaProperties {
+	this := MediaProperties{}
+
+	return &this
+}
+
+// GetAudio returns the Audio field value if set, zero value otherwise.
+func (o *MediaProperties) GetAudio() AudioMediaProperties {
+	if o == nil || IsNil(o.Audio) {
+		var ret AudioMediaProperties
+		return ret
+	}
+	return *o.Audio
+}
+
+// GetAudioOk returns a tuple with the Audio field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaProperties) GetAudioOk() (*AudioMediaProperties, bool) {
+	if o == nil || IsNil(o.Audio) {
+		return nil, false
+	}
+	return o.Audio, true
+}
+
+// HasAudio returns a boolean if a field has been set.
+func (o *MediaProperties) HasAudio() bool {
+	if o != nil && !IsNil(o.Audio) {
+		return true
+	}
+
+	return false
+}
+
+// SetAudio gets a reference to the given AudioMediaProperties and assigns it to the Audio field.
+func (o *MediaProperties) SetAudio(v AudioMediaProperties) {
+	o.Audio = &v
+}
+
+// GetVideo returns the Video field value if set, zero value otherwise.
+func (o *MediaProperties) GetVideo() VideoMediaProperties {
+	if o == nil || IsNil(o.Video) {
+		var ret VideoMediaProperties
+		return ret
+	}
+	return *o.Video
+}
+
+// GetVideoOk returns a tuple with the Video field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaProperties) GetVideoOk() (*VideoMediaProperties, bool) {
+	if o == nil || IsNil(o.Video) {
+		return nil, false
+	}
+	return o.Video, true
+}
+
+// HasVideo returns a boolean if a field has been set.
+func (o *MediaProperties) HasVideo() bool {
+	if o != nil && !IsNil(o.Video) {
+		return true
+	}
+
+	return false
+}
+
+// SetVideo gets a reference to the given VideoMediaProperties and assigns it to the Video field.
+func (o *MediaProperties) SetVideo(v VideoMediaProperties) {
+	o.Video = &v
+}
+
+func (o MediaProperties) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MediaProperties) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Audio) {
+		toSerialize["audio"] = o.Audio
+	}
+	if !IsNil(o.Video) {
+		toSerialize["video"] = o.Video
+	}
+	return toSerialize, nil
+}
+
+type NullableMediaProperties struct {
+	value *MediaProperties
+	isSet bool
+}
+
+func (v NullableMediaProperties) Get() *MediaProperties {
+	return v.value
+}
+
+func (v *NullableMediaProperties) Set(val *MediaProperties) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMediaProperties) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMediaProperties) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMediaProperties(val *MediaProperties) *NullableMediaProperties {
+	return &NullableMediaProperties{value: val, isSet: true}
+}
+
+func (v NullableMediaProperties) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMediaProperties) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/media_stream.go b/pkg/infobip/models/voice/media_stream.go
new file mode 100644
index 0000000..a626a71
--- /dev/null
+++ b/pkg/infobip/models/voice/media_stream.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MediaStream type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MediaStream{}
+
+// MediaStream struct for MediaStream
+type MediaStream struct {
+	AudioProperties *MediaStreamAudioProperties
+}
+
+// NewMediaStream instantiates a new MediaStream object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMediaStream() *MediaStream {
+	this := MediaStream{}
+	return &this
+}
+
+// NewMediaStreamWithDefaults instantiates a new MediaStream object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMediaStreamWithDefaults() *MediaStream {
+	this := MediaStream{}
+
+	return &this
+}
+
+// GetAudioProperties returns the AudioProperties field value if set, zero value otherwise.
+func (o *MediaStream) GetAudioProperties() MediaStreamAudioProperties {
+	if o == nil || IsNil(o.AudioProperties) {
+		var ret MediaStreamAudioProperties
+		return ret
+	}
+	return *o.AudioProperties
+}
+
+// GetAudioPropertiesOk returns a tuple with the AudioProperties field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStream) GetAudioPropertiesOk() (*MediaStreamAudioProperties, bool) {
+	if o == nil || IsNil(o.AudioProperties) {
+		return nil, false
+	}
+	return o.AudioProperties, true
+}
+
+// HasAudioProperties returns a boolean if a field has been set.
+func (o *MediaStream) HasAudioProperties() bool {
+	if o != nil && !IsNil(o.AudioProperties) {
+		return true
+	}
+
+	return false
+}
+
+// SetAudioProperties gets a reference to the given MediaStreamAudioProperties and assigns it to the AudioProperties field.
+func (o *MediaStream) SetAudioProperties(v MediaStreamAudioProperties) {
+	o.AudioProperties = &v
+}
+
+func (o MediaStream) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MediaStream) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.AudioProperties) {
+		toSerialize["audioProperties"] = o.AudioProperties
+	}
+	return toSerialize, nil
+}
+
+type NullableMediaStream struct {
+	value *MediaStream
+	isSet bool
+}
+
+func (v NullableMediaStream) Get() *MediaStream {
+	return v.value
+}
+
+func (v *NullableMediaStream) Set(val *MediaStream) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMediaStream) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMediaStream) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMediaStream(val *MediaStream) *NullableMediaStream {
+	return &NullableMediaStream{value: val, isSet: true}
+}
+
+func (v NullableMediaStream) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMediaStream) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/media_stream_audio_properties.go b/pkg/infobip/models/voice/media_stream_audio_properties.go
new file mode 100644
index 0000000..dffef47
--- /dev/null
+++ b/pkg/infobip/models/voice/media_stream_audio_properties.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MediaStreamAudioProperties type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MediaStreamAudioProperties{}
+
+// MediaStreamAudioProperties struct for MediaStreamAudioProperties
+type MediaStreamAudioProperties struct {
+	// Media stream configuration ID.
+	MediaStreamConfigId string
+	// Indicates whether outbound media should be replaced. The replacement media is received from the url defined in the media stream configuration.
+	ReplaceMedia *bool
+}
+
+type _MediaStreamAudioProperties MediaStreamAudioProperties
+
+// NewMediaStreamAudioProperties instantiates a new MediaStreamAudioProperties object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMediaStreamAudioProperties(mediaStreamConfigId string) *MediaStreamAudioProperties {
+	this := MediaStreamAudioProperties{}
+	this.MediaStreamConfigId = mediaStreamConfigId
+	return &this
+}
+
+// NewMediaStreamAudioPropertiesWithDefaults instantiates a new MediaStreamAudioProperties object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMediaStreamAudioPropertiesWithDefaults() *MediaStreamAudioProperties {
+	this := MediaStreamAudioProperties{}
+
+	return &this
+}
+
+// GetMediaStreamConfigId returns the MediaStreamConfigId field value
+func (o *MediaStreamAudioProperties) GetMediaStreamConfigId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.MediaStreamConfigId
+}
+
+// GetMediaStreamConfigIdOk returns a tuple with the MediaStreamConfigId field value
+// and a boolean to check if the value has been set.
+func (o *MediaStreamAudioProperties) GetMediaStreamConfigIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MediaStreamConfigId, true
+}
+
+// SetMediaStreamConfigId sets field value
+func (o *MediaStreamAudioProperties) SetMediaStreamConfigId(v string) {
+	o.MediaStreamConfigId = v
+}
+
+// GetReplaceMedia returns the ReplaceMedia field value if set, zero value otherwise.
+func (o *MediaStreamAudioProperties) GetReplaceMedia() bool {
+	if o == nil || IsNil(o.ReplaceMedia) {
+		var ret bool
+		return ret
+	}
+	return *o.ReplaceMedia
+}
+
+// GetReplaceMediaOk returns a tuple with the ReplaceMedia field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamAudioProperties) GetReplaceMediaOk() (*bool, bool) {
+	if o == nil || IsNil(o.ReplaceMedia) {
+		return nil, false
+	}
+	return o.ReplaceMedia, true
+}
+
+// HasReplaceMedia returns a boolean if a field has been set.
+func (o *MediaStreamAudioProperties) HasReplaceMedia() bool {
+	if o != nil && !IsNil(o.ReplaceMedia) {
+		return true
+	}
+
+	return false
+}
+
+// SetReplaceMedia gets a reference to the given bool and assigns it to the ReplaceMedia field.
+func (o *MediaStreamAudioProperties) SetReplaceMedia(v bool) {
+	o.ReplaceMedia = &v
+}
+
+func (o MediaStreamAudioProperties) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MediaStreamAudioProperties) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["mediaStreamConfigId"] = o.MediaStreamConfigId
+	if !IsNil(o.ReplaceMedia) {
+		toSerialize["replaceMedia"] = o.ReplaceMedia
+	}
+	return toSerialize, nil
+}
+
+type NullableMediaStreamAudioProperties struct {
+	value *MediaStreamAudioProperties
+	isSet bool
+}
+
+func (v NullableMediaStreamAudioProperties) Get() *MediaStreamAudioProperties {
+	return v.value
+}
+
+func (v *NullableMediaStreamAudioProperties) Set(val *MediaStreamAudioProperties) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMediaStreamAudioProperties) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMediaStreamAudioProperties) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMediaStreamAudioProperties(val *MediaStreamAudioProperties) *NullableMediaStreamAudioProperties {
+	return &NullableMediaStreamAudioProperties{value: val, isSet: true}
+}
+
+func (v NullableMediaStreamAudioProperties) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMediaStreamAudioProperties) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/media_stream_config_page.go b/pkg/infobip/models/voice/media_stream_config_page.go
new file mode 100644
index 0000000..e4fd708
--- /dev/null
+++ b/pkg/infobip/models/voice/media_stream_config_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MediaStreamConfigPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MediaStreamConfigPage{}
+
+// MediaStreamConfigPage struct for MediaStreamConfigPage
+type MediaStreamConfigPage struct {
+	// The list of the results for this page.
+	Results []MediaStreamConfigResponse
+	Paging  *PageInfo
+}
+
+// NewMediaStreamConfigPage instantiates a new MediaStreamConfigPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMediaStreamConfigPage() *MediaStreamConfigPage {
+	this := MediaStreamConfigPage{}
+	return &this
+}
+
+// NewMediaStreamConfigPageWithDefaults instantiates a new MediaStreamConfigPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMediaStreamConfigPageWithDefaults() *MediaStreamConfigPage {
+	this := MediaStreamConfigPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *MediaStreamConfigPage) GetResults() []MediaStreamConfigResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []MediaStreamConfigResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigPage) GetResultsOk() ([]MediaStreamConfigResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *MediaStreamConfigPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []MediaStreamConfigResponse and assigns it to the Results field.
+func (o *MediaStreamConfigPage) SetResults(v []MediaStreamConfigResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *MediaStreamConfigPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *MediaStreamConfigPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *MediaStreamConfigPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o MediaStreamConfigPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MediaStreamConfigPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableMediaStreamConfigPage struct {
+	value *MediaStreamConfigPage
+	isSet bool
+}
+
+func (v NullableMediaStreamConfigPage) Get() *MediaStreamConfigPage {
+	return v.value
+}
+
+func (v *NullableMediaStreamConfigPage) Set(val *MediaStreamConfigPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMediaStreamConfigPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMediaStreamConfigPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMediaStreamConfigPage(val *MediaStreamConfigPage) *NullableMediaStreamConfigPage {
+	return &NullableMediaStreamConfigPage{value: val, isSet: true}
+}
+
+func (v NullableMediaStreamConfigPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMediaStreamConfigPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/media_stream_config_request.go b/pkg/infobip/models/voice/media_stream_config_request.go
new file mode 100644
index 0000000..62a68e0
--- /dev/null
+++ b/pkg/infobip/models/voice/media_stream_config_request.go
@@ -0,0 +1,186 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MediaStreamConfigRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MediaStreamConfigRequest{}
+
+// MediaStreamConfigRequest struct for MediaStreamConfigRequest
+type MediaStreamConfigRequest struct {
+	// Media-stream configuration name.
+	Name string
+	// Destination websocket or load balancer URL.
+	Url            string
+	SecurityConfig *SecurityConfig
+}
+
+type _MediaStreamConfigRequest MediaStreamConfigRequest
+
+// NewMediaStreamConfigRequest instantiates a new MediaStreamConfigRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMediaStreamConfigRequest(name string, url string) *MediaStreamConfigRequest {
+	this := MediaStreamConfigRequest{}
+	this.Name = name
+	this.Url = url
+	return &this
+}
+
+// NewMediaStreamConfigRequestWithDefaults instantiates a new MediaStreamConfigRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMediaStreamConfigRequestWithDefaults() *MediaStreamConfigRequest {
+	this := MediaStreamConfigRequest{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *MediaStreamConfigRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *MediaStreamConfigRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetUrl returns the Url field value
+func (o *MediaStreamConfigRequest) GetUrl() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigRequest) GetUrlOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Url, true
+}
+
+// SetUrl sets field value
+func (o *MediaStreamConfigRequest) SetUrl(v string) {
+	o.Url = v
+}
+
+// GetSecurityConfig returns the SecurityConfig field value if set, zero value otherwise.
+func (o *MediaStreamConfigRequest) GetSecurityConfig() SecurityConfig {
+	if o == nil || IsNil(o.SecurityConfig) {
+		var ret SecurityConfig
+		return ret
+	}
+	return *o.SecurityConfig
+}
+
+// GetSecurityConfigOk returns a tuple with the SecurityConfig field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigRequest) GetSecurityConfigOk() (*SecurityConfig, bool) {
+	if o == nil || IsNil(o.SecurityConfig) {
+		return nil, false
+	}
+	return o.SecurityConfig, true
+}
+
+// HasSecurityConfig returns a boolean if a field has been set.
+func (o *MediaStreamConfigRequest) HasSecurityConfig() bool {
+	if o != nil && !IsNil(o.SecurityConfig) {
+		return true
+	}
+
+	return false
+}
+
+// SetSecurityConfig gets a reference to the given SecurityConfig and assigns it to the SecurityConfig field.
+func (o *MediaStreamConfigRequest) SetSecurityConfig(v SecurityConfig) {
+	o.SecurityConfig = &v
+}
+
+func (o MediaStreamConfigRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MediaStreamConfigRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	toSerialize["url"] = o.Url
+	if !IsNil(o.SecurityConfig) {
+		toSerialize["securityConfig"] = o.SecurityConfig
+	}
+	return toSerialize, nil
+}
+
+type NullableMediaStreamConfigRequest struct {
+	value *MediaStreamConfigRequest
+	isSet bool
+}
+
+func (v NullableMediaStreamConfigRequest) Get() *MediaStreamConfigRequest {
+	return v.value
+}
+
+func (v *NullableMediaStreamConfigRequest) Set(val *MediaStreamConfigRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMediaStreamConfigRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMediaStreamConfigRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMediaStreamConfigRequest(val *MediaStreamConfigRequest) *NullableMediaStreamConfigRequest {
+	return &NullableMediaStreamConfigRequest{value: val, isSet: true}
+}
+
+func (v NullableMediaStreamConfigRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMediaStreamConfigRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/media_stream_config_response.go b/pkg/infobip/models/voice/media_stream_config_response.go
new file mode 100644
index 0000000..3392357
--- /dev/null
+++ b/pkg/infobip/models/voice/media_stream_config_response.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MediaStreamConfigResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MediaStreamConfigResponse{}
+
+// MediaStreamConfigResponse struct for MediaStreamConfigResponse
+type MediaStreamConfigResponse struct {
+	// Media-stream configuration ID.
+	Id *string
+	// Media-stream configuration name.
+	Name *string
+	// Destination websocket or load balancer URL.
+	Url *string
+}
+
+// NewMediaStreamConfigResponse instantiates a new MediaStreamConfigResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMediaStreamConfigResponse() *MediaStreamConfigResponse {
+	this := MediaStreamConfigResponse{}
+	return &this
+}
+
+// NewMediaStreamConfigResponseWithDefaults instantiates a new MediaStreamConfigResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMediaStreamConfigResponseWithDefaults() *MediaStreamConfigResponse {
+	this := MediaStreamConfigResponse{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *MediaStreamConfigResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *MediaStreamConfigResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *MediaStreamConfigResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *MediaStreamConfigResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *MediaStreamConfigResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *MediaStreamConfigResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetUrl returns the Url field value if set, zero value otherwise.
+func (o *MediaStreamConfigResponse) GetUrl() string {
+	if o == nil || IsNil(o.Url) {
+		var ret string
+		return ret
+	}
+	return *o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MediaStreamConfigResponse) GetUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.Url) {
+		return nil, false
+	}
+	return o.Url, true
+}
+
+// HasUrl returns a boolean if a field has been set.
+func (o *MediaStreamConfigResponse) HasUrl() bool {
+	if o != nil && !IsNil(o.Url) {
+		return true
+	}
+
+	return false
+}
+
+// SetUrl gets a reference to the given string and assigns it to the Url field.
+func (o *MediaStreamConfigResponse) SetUrl(v string) {
+	o.Url = &v
+}
+
+func (o MediaStreamConfigResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MediaStreamConfigResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Url) {
+		toSerialize["url"] = o.Url
+	}
+	return toSerialize, nil
+}
+
+type NullableMediaStreamConfigResponse struct {
+	value *MediaStreamConfigResponse
+	isSet bool
+}
+
+func (v NullableMediaStreamConfigResponse) Get() *MediaStreamConfigResponse {
+	return v.value
+}
+
+func (v *NullableMediaStreamConfigResponse) Set(val *MediaStreamConfigResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMediaStreamConfigResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMediaStreamConfigResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMediaStreamConfigResponse(val *MediaStreamConfigResponse) *NullableMediaStreamConfigResponse {
+	return &NullableMediaStreamConfigResponse{value: val, isSet: true}
+}
+
+func (v NullableMediaStreamConfigResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMediaStreamConfigResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/multi_channel.go b/pkg/infobip/models/voice/multi_channel.go
new file mode 100644
index 0000000..bb1ce62
--- /dev/null
+++ b/pkg/infobip/models/voice/multi_channel.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MultiChannel type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MultiChannel{}
+
+// MultiChannel Multi-channel configuration. If enabled, audio of each participant will be in a separate channel in the composed file. Otherwise, audio of all participants will be mixed into a single channel in the composed file.
+type MultiChannel struct {
+	Enabled bool
+}
+
+type _MultiChannel MultiChannel
+
+// NewMultiChannel instantiates a new MultiChannel object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMultiChannel(enabled bool) *MultiChannel {
+	this := MultiChannel{}
+	this.Enabled = enabled
+	return &this
+}
+
+// NewMultiChannelWithDefaults instantiates a new MultiChannel object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMultiChannelWithDefaults() *MultiChannel {
+	this := MultiChannel{}
+
+	return &this
+}
+
+// GetEnabled returns the Enabled field value
+func (o *MultiChannel) GetEnabled() bool {
+	if o == nil {
+		var ret bool
+		return ret
+	}
+
+	return o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value
+// and a boolean to check if the value has been set.
+func (o *MultiChannel) GetEnabledOk() (*bool, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Enabled, true
+}
+
+// SetEnabled sets field value
+func (o *MultiChannel) SetEnabled(v bool) {
+	o.Enabled = v
+}
+
+func (o MultiChannel) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MultiChannel) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["enabled"] = o.Enabled
+	return toSerialize, nil
+}
+
+type NullableMultiChannel struct {
+	value *MultiChannel
+	isSet bool
+}
+
+func (v NullableMultiChannel) Get() *MultiChannel {
+	return v.value
+}
+
+func (v *NullableMultiChannel) Set(val *MultiChannel) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMultiChannel) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMultiChannel) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMultiChannel(val *MultiChannel) *NullableMultiChannel {
+	return &NullableMultiChannel{value: val, isSet: true}
+}
+
+func (v NullableMultiChannel) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMultiChannel) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/multi_message.go b/pkg/infobip/models/voice/multi_message.go
new file mode 100644
index 0000000..869c7e5
--- /dev/null
+++ b/pkg/infobip/models/voice/multi_message.go
@@ -0,0 +1,306 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MultiMessage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MultiMessage{}
+
+// MultiMessage Array of messages to be sent, one per every message.
+type MultiMessage struct {
+	// An audio file can be delivered as a voice message to the recipients. An audio file must be uploaded online, so that the existing URL can be available for file download. Size of the audio file must be below 4 MB. Supported formats of the provided file are aac, aiff, m4a, mp2, mp3, mp4 (audio only), ogg, wav and wma. Our platform needs to have permission to make GET and HEAD HTTP requests on the provided URL. Standard http ports (like 80, 8080, etc.) are advised.
+	AudioFileUrl *string
+	// Numeric sender ID in E.164 standard format (Example: 41793026727). This is caller ID that will be presented to the end user where applicable.
+	From *string
+	// If the message is in text format, the language in which the message is written must be defined for correct pronunciation. More about Text-to-speech functionality and supported TTS languages can be found [here](https://www.infobip.com/docs/voice-and-video/outbound-calls#text-to-speech-voice-over-broadcast). If not set, default language is `English [en]`. If voice is not set, then default voice for that specific language is used. In the case of English language, the voice is `[Joanna]`.
+	Language *string
+	// Text of the message that will be sent. Message text can be up to 1400 characters long and cannot contain only punctuation. SSML (_Speech Synthesis Markup Language_) is supported and can be used to fully customize pronunciation of the provided text.
+	Text *string
+	// Phone number of the recipient. Phone number must be written in E.164 standard format (Example: 41793026727). Maximum number of phone numbers listed is 20k.
+	To    []string
+	Voice *Voice
+}
+
+type _MultiMessage MultiMessage
+
+// NewMultiMessage instantiates a new MultiMessage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMultiMessage(to []string) *MultiMessage {
+	this := MultiMessage{}
+	this.To = to
+	return &this
+}
+
+// NewMultiMessageWithDefaults instantiates a new MultiMessage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMultiMessageWithDefaults() *MultiMessage {
+	this := MultiMessage{}
+
+	return &this
+}
+
+// GetAudioFileUrl returns the AudioFileUrl field value if set, zero value otherwise.
+func (o *MultiMessage) GetAudioFileUrl() string {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.AudioFileUrl
+}
+
+// GetAudioFileUrlOk returns a tuple with the AudioFileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MultiMessage) GetAudioFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		return nil, false
+	}
+	return o.AudioFileUrl, true
+}
+
+// HasAudioFileUrl returns a boolean if a field has been set.
+func (o *MultiMessage) HasAudioFileUrl() bool {
+	if o != nil && !IsNil(o.AudioFileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetAudioFileUrl gets a reference to the given string and assigns it to the AudioFileUrl field.
+func (o *MultiMessage) SetAudioFileUrl(v string) {
+	o.AudioFileUrl = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *MultiMessage) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MultiMessage) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *MultiMessage) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *MultiMessage) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetLanguage returns the Language field value if set, zero value otherwise.
+func (o *MultiMessage) GetLanguage() string {
+	if o == nil || IsNil(o.Language) {
+		var ret string
+		return ret
+	}
+	return *o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MultiMessage) GetLanguageOk() (*string, bool) {
+	if o == nil || IsNil(o.Language) {
+		return nil, false
+	}
+	return o.Language, true
+}
+
+// HasLanguage returns a boolean if a field has been set.
+func (o *MultiMessage) HasLanguage() bool {
+	if o != nil && !IsNil(o.Language) {
+		return true
+	}
+
+	return false
+}
+
+// SetLanguage gets a reference to the given string and assigns it to the Language field.
+func (o *MultiMessage) SetLanguage(v string) {
+	o.Language = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *MultiMessage) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MultiMessage) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *MultiMessage) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *MultiMessage) SetText(v string) {
+	o.Text = &v
+}
+
+// GetTo returns the To field value
+func (o *MultiMessage) GetTo() []string {
+	if o == nil {
+		var ret []string
+		return ret
+	}
+
+	return o.To
+}
+
+// GetToOk returns a tuple with the To field value
+// and a boolean to check if the value has been set.
+func (o *MultiMessage) GetToOk() ([]string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// SetTo sets field value
+func (o *MultiMessage) SetTo(v []string) {
+	o.To = v
+}
+
+// GetVoice returns the Voice field value if set, zero value otherwise.
+func (o *MultiMessage) GetVoice() Voice {
+	if o == nil || IsNil(o.Voice) {
+		var ret Voice
+		return ret
+	}
+	return *o.Voice
+}
+
+// GetVoiceOk returns a tuple with the Voice field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *MultiMessage) GetVoiceOk() (*Voice, bool) {
+	if o == nil || IsNil(o.Voice) {
+		return nil, false
+	}
+	return o.Voice, true
+}
+
+// HasVoice returns a boolean if a field has been set.
+func (o *MultiMessage) HasVoice() bool {
+	if o != nil && !IsNil(o.Voice) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoice gets a reference to the given Voice and assigns it to the Voice field.
+func (o *MultiMessage) SetVoice(v Voice) {
+	o.Voice = &v
+}
+
+func (o MultiMessage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MultiMessage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.AudioFileUrl) {
+		toSerialize["audioFileUrl"] = o.AudioFileUrl
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.Language) {
+		toSerialize["language"] = o.Language
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	toSerialize["to"] = o.To
+	if !IsNil(o.Voice) {
+		toSerialize["voice"] = o.Voice
+	}
+	return toSerialize, nil
+}
+
+type NullableMultiMessage struct {
+	value *MultiMessage
+	isSet bool
+}
+
+func (v NullableMultiMessage) Get() *MultiMessage {
+	return v.value
+}
+
+func (v *NullableMultiMessage) Set(val *MultiMessage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMultiMessage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMultiMessage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMultiMessage(val *MultiMessage) *NullableMultiMessage {
+	return &NullableMultiMessage{value: val, isSet: true}
+}
+
+func (v NullableMultiMessage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMultiMessage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/multi_request.go b/pkg/infobip/models/voice/multi_request.go
new file mode 100644
index 0000000..34db3e2
--- /dev/null
+++ b/pkg/infobip/models/voice/multi_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the MultiRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &MultiRequest{}
+
+// MultiRequest struct for MultiRequest
+type MultiRequest struct {
+	// Array of messages to be sent, one per every message.
+	Messages []MultiMessage
+}
+
+type _MultiRequest MultiRequest
+
+// NewMultiRequest instantiates a new MultiRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewMultiRequest(messages []MultiMessage) *MultiRequest {
+	this := MultiRequest{}
+	this.Messages = messages
+	return &this
+}
+
+// NewMultiRequestWithDefaults instantiates a new MultiRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewMultiRequestWithDefaults() *MultiRequest {
+	this := MultiRequest{}
+
+	return &this
+}
+
+// GetMessages returns the Messages field value
+func (o *MultiRequest) GetMessages() []MultiMessage {
+	if o == nil {
+		var ret []MultiMessage
+		return ret
+	}
+
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value
+// and a boolean to check if the value has been set.
+func (o *MultiRequest) GetMessagesOk() ([]MultiMessage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// SetMessages sets field value
+func (o *MultiRequest) SetMessages(v []MultiMessage) {
+	o.Messages = v
+}
+
+func (o MultiRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o MultiRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["messages"] = o.Messages
+	return toSerialize, nil
+}
+
+type NullableMultiRequest struct {
+	value *MultiRequest
+	isSet bool
+}
+
+func (v NullableMultiRequest) Get() *MultiRequest {
+	return v.value
+}
+
+func (v *NullableMultiRequest) Set(val *MultiRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableMultiRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableMultiRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableMultiRequest(val *MultiRequest) *NullableMultiRequest {
+	return &NullableMultiRequest{value: val, isSet: true}
+}
+
+func (v NullableMultiRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableMultiRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_callback_request.go b/pkg/infobip/models/voice/number_masking_callback_request.go
new file mode 100644
index 0000000..ebd6ef3
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_callback_request.go
@@ -0,0 +1,277 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingCallbackRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingCallbackRequest{}
+
+// NumberMaskingCallbackRequest Callback request.
+type NumberMaskingCallbackRequest struct {
+	// Caller phone number.
+	From *string
+	// Called phone number.
+	To *string
+	// Unique identifier of the call record, available for both Callback and Status requests.
+	CorrelationId *string
+	// Unique identifier for correlation with inbound call, available in Callback and Status requests.
+	NmCorrelationId *string
+	// Indicates that this callback request is initiated after the `captureDtmf` command is executed. Not present in the first callback request for the call.
+	DtmfCaptured *bool
+}
+
+// NewNumberMaskingCallbackRequest instantiates a new NumberMaskingCallbackRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingCallbackRequest() *NumberMaskingCallbackRequest {
+	this := NumberMaskingCallbackRequest{}
+	return &this
+}
+
+// NewNumberMaskingCallbackRequestWithDefaults instantiates a new NumberMaskingCallbackRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingCallbackRequestWithDefaults() *NumberMaskingCallbackRequest {
+	this := NumberMaskingCallbackRequest{}
+
+	return &this
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *NumberMaskingCallbackRequest) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCallbackRequest) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *NumberMaskingCallbackRequest) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *NumberMaskingCallbackRequest) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *NumberMaskingCallbackRequest) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCallbackRequest) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *NumberMaskingCallbackRequest) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *NumberMaskingCallbackRequest) SetTo(v string) {
+	o.To = &v
+}
+
+// GetCorrelationId returns the CorrelationId field value if set, zero value otherwise.
+func (o *NumberMaskingCallbackRequest) GetCorrelationId() string {
+	if o == nil || IsNil(o.CorrelationId) {
+		var ret string
+		return ret
+	}
+	return *o.CorrelationId
+}
+
+// GetCorrelationIdOk returns a tuple with the CorrelationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCallbackRequest) GetCorrelationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CorrelationId) {
+		return nil, false
+	}
+	return o.CorrelationId, true
+}
+
+// HasCorrelationId returns a boolean if a field has been set.
+func (o *NumberMaskingCallbackRequest) HasCorrelationId() bool {
+	if o != nil && !IsNil(o.CorrelationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCorrelationId gets a reference to the given string and assigns it to the CorrelationId field.
+func (o *NumberMaskingCallbackRequest) SetCorrelationId(v string) {
+	o.CorrelationId = &v
+}
+
+// GetNmCorrelationId returns the NmCorrelationId field value if set, zero value otherwise.
+func (o *NumberMaskingCallbackRequest) GetNmCorrelationId() string {
+	if o == nil || IsNil(o.NmCorrelationId) {
+		var ret string
+		return ret
+	}
+	return *o.NmCorrelationId
+}
+
+// GetNmCorrelationIdOk returns a tuple with the NmCorrelationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCallbackRequest) GetNmCorrelationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.NmCorrelationId) {
+		return nil, false
+	}
+	return o.NmCorrelationId, true
+}
+
+// HasNmCorrelationId returns a boolean if a field has been set.
+func (o *NumberMaskingCallbackRequest) HasNmCorrelationId() bool {
+	if o != nil && !IsNil(o.NmCorrelationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetNmCorrelationId gets a reference to the given string and assigns it to the NmCorrelationId field.
+func (o *NumberMaskingCallbackRequest) SetNmCorrelationId(v string) {
+	o.NmCorrelationId = &v
+}
+
+// GetDtmfCaptured returns the DtmfCaptured field value if set, zero value otherwise.
+func (o *NumberMaskingCallbackRequest) GetDtmfCaptured() bool {
+	if o == nil || IsNil(o.DtmfCaptured) {
+		var ret bool
+		return ret
+	}
+	return *o.DtmfCaptured
+}
+
+// GetDtmfCapturedOk returns a tuple with the DtmfCaptured field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCallbackRequest) GetDtmfCapturedOk() (*bool, bool) {
+	if o == nil || IsNil(o.DtmfCaptured) {
+		return nil, false
+	}
+	return o.DtmfCaptured, true
+}
+
+// HasDtmfCaptured returns a boolean if a field has been set.
+func (o *NumberMaskingCallbackRequest) HasDtmfCaptured() bool {
+	if o != nil && !IsNil(o.DtmfCaptured) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmfCaptured gets a reference to the given bool and assigns it to the DtmfCaptured field.
+func (o *NumberMaskingCallbackRequest) SetDtmfCaptured(v bool) {
+	o.DtmfCaptured = &v
+}
+
+func (o NumberMaskingCallbackRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingCallbackRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.CorrelationId) {
+		toSerialize["correlationId"] = o.CorrelationId
+	}
+	if !IsNil(o.NmCorrelationId) {
+		toSerialize["nmCorrelationId"] = o.NmCorrelationId
+	}
+	if !IsNil(o.DtmfCaptured) {
+		toSerialize["dtmfCaptured"] = o.DtmfCaptured
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingCallbackRequest struct {
+	value *NumberMaskingCallbackRequest
+	isSet bool
+}
+
+func (v NullableNumberMaskingCallbackRequest) Get() *NumberMaskingCallbackRequest {
+	return v.value
+}
+
+func (v *NullableNumberMaskingCallbackRequest) Set(val *NumberMaskingCallbackRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingCallbackRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingCallbackRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingCallbackRequest(val *NumberMaskingCallbackRequest) *NullableNumberMaskingCallbackRequest {
+	return &NullableNumberMaskingCallbackRequest{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingCallbackRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingCallbackRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_credentials_body.go b/pkg/infobip/models/voice/number_masking_credentials_body.go
new file mode 100644
index 0000000..5bebedb
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_credentials_body.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingCredentialsBody type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingCredentialsBody{}
+
+// NumberMaskingCredentialsBody struct for NumberMaskingCredentialsBody
+type NumberMaskingCredentialsBody struct {
+	// The first part of the generate Authorization header.
+	ApiId string
+	// Used to generate the second part of the Authorization header.
+	Key string
+}
+
+type _NumberMaskingCredentialsBody NumberMaskingCredentialsBody
+
+// NewNumberMaskingCredentialsBody instantiates a new NumberMaskingCredentialsBody object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingCredentialsBody(apiId string, key string) *NumberMaskingCredentialsBody {
+	this := NumberMaskingCredentialsBody{}
+	this.ApiId = apiId
+	this.Key = key
+	return &this
+}
+
+// NewNumberMaskingCredentialsBodyWithDefaults instantiates a new NumberMaskingCredentialsBody object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingCredentialsBodyWithDefaults() *NumberMaskingCredentialsBody {
+	this := NumberMaskingCredentialsBody{}
+
+	return &this
+}
+
+// GetApiId returns the ApiId field value
+func (o *NumberMaskingCredentialsBody) GetApiId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.ApiId
+}
+
+// GetApiIdOk returns a tuple with the ApiId field value
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCredentialsBody) GetApiIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ApiId, true
+}
+
+// SetApiId sets field value
+func (o *NumberMaskingCredentialsBody) SetApiId(v string) {
+	o.ApiId = v
+}
+
+// GetKey returns the Key field value
+func (o *NumberMaskingCredentialsBody) GetKey() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Key
+}
+
+// GetKeyOk returns a tuple with the Key field value
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCredentialsBody) GetKeyOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Key, true
+}
+
+// SetKey sets field value
+func (o *NumberMaskingCredentialsBody) SetKey(v string) {
+	o.Key = v
+}
+
+func (o NumberMaskingCredentialsBody) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingCredentialsBody) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["apiId"] = o.ApiId
+	toSerialize["key"] = o.Key
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingCredentialsBody struct {
+	value *NumberMaskingCredentialsBody
+	isSet bool
+}
+
+func (v NullableNumberMaskingCredentialsBody) Get() *NumberMaskingCredentialsBody {
+	return v.value
+}
+
+func (v *NullableNumberMaskingCredentialsBody) Set(val *NumberMaskingCredentialsBody) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingCredentialsBody) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingCredentialsBody) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingCredentialsBody(val *NumberMaskingCredentialsBody) *NullableNumberMaskingCredentialsBody {
+	return &NullableNumberMaskingCredentialsBody{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingCredentialsBody) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingCredentialsBody) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_credentials_response.go b/pkg/infobip/models/voice/number_masking_credentials_response.go
new file mode 100644
index 0000000..7b4c676
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_credentials_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingCredentialsResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingCredentialsResponse{}
+
+// NumberMaskingCredentialsResponse struct for NumberMaskingCredentialsResponse
+type NumberMaskingCredentialsResponse struct {
+	// The first part of the generate Authorization header.
+	ApiId *string
+	// Used to generate the second part of the Authorization header.
+	Key *string
+}
+
+// NewNumberMaskingCredentialsResponse instantiates a new NumberMaskingCredentialsResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingCredentialsResponse() *NumberMaskingCredentialsResponse {
+	this := NumberMaskingCredentialsResponse{}
+	return &this
+}
+
+// NewNumberMaskingCredentialsResponseWithDefaults instantiates a new NumberMaskingCredentialsResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingCredentialsResponseWithDefaults() *NumberMaskingCredentialsResponse {
+	this := NumberMaskingCredentialsResponse{}
+
+	return &this
+}
+
+// GetApiId returns the ApiId field value if set, zero value otherwise.
+func (o *NumberMaskingCredentialsResponse) GetApiId() string {
+	if o == nil || IsNil(o.ApiId) {
+		var ret string
+		return ret
+	}
+	return *o.ApiId
+}
+
+// GetApiIdOk returns a tuple with the ApiId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCredentialsResponse) GetApiIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApiId) {
+		return nil, false
+	}
+	return o.ApiId, true
+}
+
+// HasApiId returns a boolean if a field has been set.
+func (o *NumberMaskingCredentialsResponse) HasApiId() bool {
+	if o != nil && !IsNil(o.ApiId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApiId gets a reference to the given string and assigns it to the ApiId field.
+func (o *NumberMaskingCredentialsResponse) SetApiId(v string) {
+	o.ApiId = &v
+}
+
+// GetKey returns the Key field value if set, zero value otherwise.
+func (o *NumberMaskingCredentialsResponse) GetKey() string {
+	if o == nil || IsNil(o.Key) {
+		var ret string
+		return ret
+	}
+	return *o.Key
+}
+
+// GetKeyOk returns a tuple with the Key field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingCredentialsResponse) GetKeyOk() (*string, bool) {
+	if o == nil || IsNil(o.Key) {
+		return nil, false
+	}
+	return o.Key, true
+}
+
+// HasKey returns a boolean if a field has been set.
+func (o *NumberMaskingCredentialsResponse) HasKey() bool {
+	if o != nil && !IsNil(o.Key) {
+		return true
+	}
+
+	return false
+}
+
+// SetKey gets a reference to the given string and assigns it to the Key field.
+func (o *NumberMaskingCredentialsResponse) SetKey(v string) {
+	o.Key = &v
+}
+
+func (o NumberMaskingCredentialsResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingCredentialsResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.ApiId) {
+		toSerialize["apiId"] = o.ApiId
+	}
+	if !IsNil(o.Key) {
+		toSerialize["key"] = o.Key
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingCredentialsResponse struct {
+	value *NumberMaskingCredentialsResponse
+	isSet bool
+}
+
+func (v NullableNumberMaskingCredentialsResponse) Get() *NumberMaskingCredentialsResponse {
+	return v.value
+}
+
+func (v *NullableNumberMaskingCredentialsResponse) Set(val *NumberMaskingCredentialsResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingCredentialsResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingCredentialsResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingCredentialsResponse(val *NumberMaskingCredentialsResponse) *NullableNumberMaskingCredentialsResponse {
+	return &NullableNumberMaskingCredentialsResponse{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingCredentialsResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingCredentialsResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_recording_status.go b/pkg/infobip/models/voice/number_masking_recording_status.go
new file mode 100644
index 0000000..71e6a93
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_recording_status.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// NumberMaskingRecordingStatus Recording status provided if recording was attempted.
+type NumberMaskingRecordingStatus string
+
+// List of NumberMaskingRecordingStatus
+const (
+	NUMBERMASKINGRECORDINGSTATUS_HOSTED NumberMaskingRecordingStatus = "HOSTED"
+	NUMBERMASKINGRECORDINGSTATUS_SFTP   NumberMaskingRecordingStatus = "SFTP"
+	NUMBERMASKINGRECORDINGSTATUS_FAILED NumberMaskingRecordingStatus = "FAILED"
+)
+
+// All allowed values of NumberMaskingRecordingStatus enum
+var AllowedNumberMaskingRecordingStatusEnumValues = []NumberMaskingRecordingStatus{
+	"HOSTED",
+	"SFTP",
+	"FAILED",
+}
+
+func (v *NumberMaskingRecordingStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := NumberMaskingRecordingStatus(value)
+	for _, existing := range AllowedNumberMaskingRecordingStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid NumberMaskingRecordingStatus", value)
+}
+
+// NewNumberMaskingRecordingStatusFromValue returns a pointer to a valid NumberMaskingRecordingStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewNumberMaskingRecordingStatusFromValue(v string) (*NumberMaskingRecordingStatus, error) {
+	ev := NumberMaskingRecordingStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for NumberMaskingRecordingStatus: valid values are %v", v, AllowedNumberMaskingRecordingStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v NumberMaskingRecordingStatus) IsValid() bool {
+	for _, existing := range AllowedNumberMaskingRecordingStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to NumberMaskingRecordingStatus value
+func (v NumberMaskingRecordingStatus) Ptr() *NumberMaskingRecordingStatus {
+	return &v
+}
+
+type NullableNumberMaskingRecordingStatus struct {
+	value *NumberMaskingRecordingStatus
+	isSet bool
+}
+
+func (v NullableNumberMaskingRecordingStatus) Get() *NumberMaskingRecordingStatus {
+	return v.value
+}
+
+func (v *NullableNumberMaskingRecordingStatus) Set(val *NumberMaskingRecordingStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingRecordingStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingRecordingStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingRecordingStatus(val *NumberMaskingRecordingStatus) *NullableNumberMaskingRecordingStatus {
+	return &NullableNumberMaskingRecordingStatus{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingRecordingStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingRecordingStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_setup_body.go b/pkg/infobip/models/voice/number_masking_setup_body.go
new file mode 100644
index 0000000..c65366f
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_setup_body.go
@@ -0,0 +1,298 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingSetupBody type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingSetupBody{}
+
+// NumberMaskingSetupBody struct for NumberMaskingSetupBody
+type NumberMaskingSetupBody struct {
+	// Unique configuration name. Alphanumeric, max length 100.
+	Name string
+	// Client's URL that will be called on each inbound call to related Number masking Voice number in order to get instructions of how to handle incoming calls. Instructions are a result of mapping logic implemented on your side according to your business case.
+	CallbackUrl string
+	// Client's URL for status report delivery after the call is finished.
+	StatusUrl *string
+	// If callbackUrl is unavailable this one will be called instead.
+	BackupCallbackUrl *string
+	// If statusUrl is unavailable this one will be called instead.
+	BackupStatusUrl *string
+	// Masking configuration description.
+	Description *string
+}
+
+type _NumberMaskingSetupBody NumberMaskingSetupBody
+
+// NewNumberMaskingSetupBody instantiates a new NumberMaskingSetupBody object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingSetupBody(name string, callbackUrl string) *NumberMaskingSetupBody {
+	this := NumberMaskingSetupBody{}
+	this.Name = name
+	this.CallbackUrl = callbackUrl
+	return &this
+}
+
+// NewNumberMaskingSetupBodyWithDefaults instantiates a new NumberMaskingSetupBody object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingSetupBodyWithDefaults() *NumberMaskingSetupBody {
+	this := NumberMaskingSetupBody{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *NumberMaskingSetupBody) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupBody) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *NumberMaskingSetupBody) SetName(v string) {
+	o.Name = v
+}
+
+// GetCallbackUrl returns the CallbackUrl field value
+func (o *NumberMaskingSetupBody) GetCallbackUrl() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CallbackUrl
+}
+
+// GetCallbackUrlOk returns a tuple with the CallbackUrl field value
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupBody) GetCallbackUrlOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CallbackUrl, true
+}
+
+// SetCallbackUrl sets field value
+func (o *NumberMaskingSetupBody) SetCallbackUrl(v string) {
+	o.CallbackUrl = v
+}
+
+// GetStatusUrl returns the StatusUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupBody) GetStatusUrl() string {
+	if o == nil || IsNil(o.StatusUrl) {
+		var ret string
+		return ret
+	}
+	return *o.StatusUrl
+}
+
+// GetStatusUrlOk returns a tuple with the StatusUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupBody) GetStatusUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.StatusUrl) {
+		return nil, false
+	}
+	return o.StatusUrl, true
+}
+
+// HasStatusUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupBody) HasStatusUrl() bool {
+	if o != nil && !IsNil(o.StatusUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatusUrl gets a reference to the given string and assigns it to the StatusUrl field.
+func (o *NumberMaskingSetupBody) SetStatusUrl(v string) {
+	o.StatusUrl = &v
+}
+
+// GetBackupCallbackUrl returns the BackupCallbackUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupBody) GetBackupCallbackUrl() string {
+	if o == nil || IsNil(o.BackupCallbackUrl) {
+		var ret string
+		return ret
+	}
+	return *o.BackupCallbackUrl
+}
+
+// GetBackupCallbackUrlOk returns a tuple with the BackupCallbackUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupBody) GetBackupCallbackUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.BackupCallbackUrl) {
+		return nil, false
+	}
+	return o.BackupCallbackUrl, true
+}
+
+// HasBackupCallbackUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupBody) HasBackupCallbackUrl() bool {
+	if o != nil && !IsNil(o.BackupCallbackUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetBackupCallbackUrl gets a reference to the given string and assigns it to the BackupCallbackUrl field.
+func (o *NumberMaskingSetupBody) SetBackupCallbackUrl(v string) {
+	o.BackupCallbackUrl = &v
+}
+
+// GetBackupStatusUrl returns the BackupStatusUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupBody) GetBackupStatusUrl() string {
+	if o == nil || IsNil(o.BackupStatusUrl) {
+		var ret string
+		return ret
+	}
+	return *o.BackupStatusUrl
+}
+
+// GetBackupStatusUrlOk returns a tuple with the BackupStatusUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupBody) GetBackupStatusUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.BackupStatusUrl) {
+		return nil, false
+	}
+	return o.BackupStatusUrl, true
+}
+
+// HasBackupStatusUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupBody) HasBackupStatusUrl() bool {
+	if o != nil && !IsNil(o.BackupStatusUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetBackupStatusUrl gets a reference to the given string and assigns it to the BackupStatusUrl field.
+func (o *NumberMaskingSetupBody) SetBackupStatusUrl(v string) {
+	o.BackupStatusUrl = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *NumberMaskingSetupBody) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupBody) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *NumberMaskingSetupBody) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *NumberMaskingSetupBody) SetDescription(v string) {
+	o.Description = &v
+}
+
+func (o NumberMaskingSetupBody) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingSetupBody) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	toSerialize["callbackUrl"] = o.CallbackUrl
+	if !IsNil(o.StatusUrl) {
+		toSerialize["statusUrl"] = o.StatusUrl
+	}
+	if !IsNil(o.BackupCallbackUrl) {
+		toSerialize["backupCallbackUrl"] = o.BackupCallbackUrl
+	}
+	if !IsNil(o.BackupStatusUrl) {
+		toSerialize["backupStatusUrl"] = o.BackupStatusUrl
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingSetupBody struct {
+	value *NumberMaskingSetupBody
+	isSet bool
+}
+
+func (v NullableNumberMaskingSetupBody) Get() *NumberMaskingSetupBody {
+	return v.value
+}
+
+func (v *NullableNumberMaskingSetupBody) Set(val *NumberMaskingSetupBody) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingSetupBody) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingSetupBody) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingSetupBody(val *NumberMaskingSetupBody) *NullableNumberMaskingSetupBody {
+	return &NullableNumberMaskingSetupBody{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingSetupBody) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingSetupBody) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_setup_response.go b/pkg/infobip/models/voice/number_masking_setup_response.go
new file mode 100644
index 0000000..bcd8944
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_setup_response.go
@@ -0,0 +1,425 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingSetupResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingSetupResponse{}
+
+// NumberMaskingSetupResponse struct for NumberMaskingSetupResponse
+type NumberMaskingSetupResponse struct {
+	// Use to connect masking configuration with Voice-enabled number.
+	Key *string
+	// Unique configuration name. Alphanumeric, max length 100.
+	Name *string
+	// Client's URL that will be called on each inbound call to related Number masking Voice number in order to get instructions of how to handle incoming calls. Instructions are a result of mapping logic implemented on your side according to your business case.
+	CallbackUrl *string
+	// Client's URL for status report delivery after the call is finished.
+	StatusUrl *string
+	// If callbackUrl is unavailable this one will be called instead.
+	BackupCallbackUrl *string
+	// If statusUrl is unavailable this one will be called instead.
+	BackupStatusUrl *string
+	// Masking configuration description
+	Description *string
+	// Date and time (UTC timezone) when masking configuration is created.
+	InsertDateTime *Time
+	// Date and time (UTC timezone) when masking configuration was last modified.
+	UpdateDateTime *Time
+}
+
+// NewNumberMaskingSetupResponse instantiates a new NumberMaskingSetupResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingSetupResponse() *NumberMaskingSetupResponse {
+	this := NumberMaskingSetupResponse{}
+	return &this
+}
+
+// NewNumberMaskingSetupResponseWithDefaults instantiates a new NumberMaskingSetupResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingSetupResponseWithDefaults() *NumberMaskingSetupResponse {
+	this := NumberMaskingSetupResponse{}
+
+	return &this
+}
+
+// GetKey returns the Key field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetKey() string {
+	if o == nil || IsNil(o.Key) {
+		var ret string
+		return ret
+	}
+	return *o.Key
+}
+
+// GetKeyOk returns a tuple with the Key field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetKeyOk() (*string, bool) {
+	if o == nil || IsNil(o.Key) {
+		return nil, false
+	}
+	return o.Key, true
+}
+
+// HasKey returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasKey() bool {
+	if o != nil && !IsNil(o.Key) {
+		return true
+	}
+
+	return false
+}
+
+// SetKey gets a reference to the given string and assigns it to the Key field.
+func (o *NumberMaskingSetupResponse) SetKey(v string) {
+	o.Key = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *NumberMaskingSetupResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetCallbackUrl returns the CallbackUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetCallbackUrl() string {
+	if o == nil || IsNil(o.CallbackUrl) {
+		var ret string
+		return ret
+	}
+	return *o.CallbackUrl
+}
+
+// GetCallbackUrlOk returns a tuple with the CallbackUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetCallbackUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.CallbackUrl) {
+		return nil, false
+	}
+	return o.CallbackUrl, true
+}
+
+// HasCallbackUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasCallbackUrl() bool {
+	if o != nil && !IsNil(o.CallbackUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallbackUrl gets a reference to the given string and assigns it to the CallbackUrl field.
+func (o *NumberMaskingSetupResponse) SetCallbackUrl(v string) {
+	o.CallbackUrl = &v
+}
+
+// GetStatusUrl returns the StatusUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetStatusUrl() string {
+	if o == nil || IsNil(o.StatusUrl) {
+		var ret string
+		return ret
+	}
+	return *o.StatusUrl
+}
+
+// GetStatusUrlOk returns a tuple with the StatusUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetStatusUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.StatusUrl) {
+		return nil, false
+	}
+	return o.StatusUrl, true
+}
+
+// HasStatusUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasStatusUrl() bool {
+	if o != nil && !IsNil(o.StatusUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatusUrl gets a reference to the given string and assigns it to the StatusUrl field.
+func (o *NumberMaskingSetupResponse) SetStatusUrl(v string) {
+	o.StatusUrl = &v
+}
+
+// GetBackupCallbackUrl returns the BackupCallbackUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetBackupCallbackUrl() string {
+	if o == nil || IsNil(o.BackupCallbackUrl) {
+		var ret string
+		return ret
+	}
+	return *o.BackupCallbackUrl
+}
+
+// GetBackupCallbackUrlOk returns a tuple with the BackupCallbackUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetBackupCallbackUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.BackupCallbackUrl) {
+		return nil, false
+	}
+	return o.BackupCallbackUrl, true
+}
+
+// HasBackupCallbackUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasBackupCallbackUrl() bool {
+	if o != nil && !IsNil(o.BackupCallbackUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetBackupCallbackUrl gets a reference to the given string and assigns it to the BackupCallbackUrl field.
+func (o *NumberMaskingSetupResponse) SetBackupCallbackUrl(v string) {
+	o.BackupCallbackUrl = &v
+}
+
+// GetBackupStatusUrl returns the BackupStatusUrl field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetBackupStatusUrl() string {
+	if o == nil || IsNil(o.BackupStatusUrl) {
+		var ret string
+		return ret
+	}
+	return *o.BackupStatusUrl
+}
+
+// GetBackupStatusUrlOk returns a tuple with the BackupStatusUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetBackupStatusUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.BackupStatusUrl) {
+		return nil, false
+	}
+	return o.BackupStatusUrl, true
+}
+
+// HasBackupStatusUrl returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasBackupStatusUrl() bool {
+	if o != nil && !IsNil(o.BackupStatusUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetBackupStatusUrl gets a reference to the given string and assigns it to the BackupStatusUrl field.
+func (o *NumberMaskingSetupResponse) SetBackupStatusUrl(v string) {
+	o.BackupStatusUrl = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *NumberMaskingSetupResponse) SetDescription(v string) {
+	o.Description = &v
+}
+
+// GetInsertDateTime returns the InsertDateTime field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetInsertDateTime() Time {
+	if o == nil || IsNil(o.InsertDateTime) {
+		var ret Time
+		return ret
+	}
+	return *o.InsertDateTime
+}
+
+// GetInsertDateTimeOk returns a tuple with the InsertDateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetInsertDateTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.InsertDateTime) {
+		return nil, false
+	}
+	return o.InsertDateTime, true
+}
+
+// HasInsertDateTime returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasInsertDateTime() bool {
+	if o != nil && !IsNil(o.InsertDateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetInsertDateTime gets a reference to the given Time and assigns it to the InsertDateTime field.
+func (o *NumberMaskingSetupResponse) SetInsertDateTime(v Time) {
+	o.InsertDateTime = &v
+}
+
+// GetUpdateDateTime returns the UpdateDateTime field value if set, zero value otherwise.
+func (o *NumberMaskingSetupResponse) GetUpdateDateTime() Time {
+	if o == nil || IsNil(o.UpdateDateTime) {
+		var ret Time
+		return ret
+	}
+	return *o.UpdateDateTime
+}
+
+// GetUpdateDateTimeOk returns a tuple with the UpdateDateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingSetupResponse) GetUpdateDateTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.UpdateDateTime) {
+		return nil, false
+	}
+	return o.UpdateDateTime, true
+}
+
+// HasUpdateDateTime returns a boolean if a field has been set.
+func (o *NumberMaskingSetupResponse) HasUpdateDateTime() bool {
+	if o != nil && !IsNil(o.UpdateDateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetUpdateDateTime gets a reference to the given Time and assigns it to the UpdateDateTime field.
+func (o *NumberMaskingSetupResponse) SetUpdateDateTime(v Time) {
+	o.UpdateDateTime = &v
+}
+
+func (o NumberMaskingSetupResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingSetupResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Key) {
+		toSerialize["key"] = o.Key
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.CallbackUrl) {
+		toSerialize["callbackUrl"] = o.CallbackUrl
+	}
+	if !IsNil(o.StatusUrl) {
+		toSerialize["statusUrl"] = o.StatusUrl
+	}
+	if !IsNil(o.BackupCallbackUrl) {
+		toSerialize["backupCallbackUrl"] = o.BackupCallbackUrl
+	}
+	if !IsNil(o.BackupStatusUrl) {
+		toSerialize["backupStatusUrl"] = o.BackupStatusUrl
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	if !IsNil(o.InsertDateTime) {
+		toSerialize["insertDateTime"] = o.InsertDateTime
+	}
+	if !IsNil(o.UpdateDateTime) {
+		toSerialize["updateDateTime"] = o.UpdateDateTime
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingSetupResponse struct {
+	value *NumberMaskingSetupResponse
+	isSet bool
+}
+
+func (v NullableNumberMaskingSetupResponse) Get() *NumberMaskingSetupResponse {
+	return v.value
+}
+
+func (v *NullableNumberMaskingSetupResponse) Set(val *NumberMaskingSetupResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingSetupResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingSetupResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingSetupResponse(val *NumberMaskingSetupResponse) *NullableNumberMaskingSetupResponse {
+	return &NullableNumberMaskingSetupResponse{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingSetupResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingSetupResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_status_request.go b/pkg/infobip/models/voice/number_masking_status_request.go
new file mode 100644
index 0000000..214deec
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_status_request.go
@@ -0,0 +1,831 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingStatusRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingStatusRequest{}
+
+// NumberMaskingStatusRequest Status request.
+type NumberMaskingStatusRequest struct {
+	// Requested action (dial, audio, captureDtmf).
+	Action *string
+	// Caller phone number.
+	From *string
+	// Called phone number.
+	To *string
+	// Called party phone number that the call is transferred to.
+	TransferTo *string
+	// Duration of the outbound call shown in seconds
+	Duration *int32
+	// Call status which can be: answered, busy, no answer, failed or congestion
+	Status *string
+	// Unique identifier for correlation with inbound call, available in Callback and Status requests.
+	NmCorrelationId *string
+	// Identifier of the file played to the caller.
+	FileID *string
+	// The URL of the file played to the caller.
+	FileUrl *string
+	// Date and time when ringing started.
+	RingingTime *string
+	// Date and time when the call was answered.
+	AnsweredTime *string
+	// Unique identifier of the call record, available for both Callback and Status requests.
+	CorrelationId *string
+	// Duration of the inbound call shown in seconds.
+	InboundDuration *int32
+	// The duration of the outbound part of the number masking session, where the voice billing model (1/1, 15/15,...) has been applied to the calculatedDuration.
+	CalculatedDuration *int32
+	// This is the price per second for the outbound part of the number masking session, with the price being expressed in cents per second.
+	PricePerSecond *float64
+	// The currency in which the price is expressed.
+	Currency *string
+	// ID of a recording file of a call.
+	RecordingFileId *string
+	// Flag that indicates if callee announcement is included in recording file.
+	RecordCalleeAnnouncement *bool
+	RecordingStatus          *NumberMaskingRecordingStatus
+	// Client-defined ID of a valid file name. Used to correlate a call with this reference. If recording is enabled and files are stored in the SFTP server, that ID will be used as a file name instead.
+	ClientReferenceId *string
+}
+
+// NewNumberMaskingStatusRequest instantiates a new NumberMaskingStatusRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingStatusRequest() *NumberMaskingStatusRequest {
+	this := NumberMaskingStatusRequest{}
+	return &this
+}
+
+// NewNumberMaskingStatusRequestWithDefaults instantiates a new NumberMaskingStatusRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingStatusRequestWithDefaults() *NumberMaskingStatusRequest {
+	this := NumberMaskingStatusRequest{}
+
+	return &this
+}
+
+// GetAction returns the Action field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetAction() string {
+	if o == nil || IsNil(o.Action) {
+		var ret string
+		return ret
+	}
+	return *o.Action
+}
+
+// GetActionOk returns a tuple with the Action field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetActionOk() (*string, bool) {
+	if o == nil || IsNil(o.Action) {
+		return nil, false
+	}
+	return o.Action, true
+}
+
+// HasAction returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasAction() bool {
+	if o != nil && !IsNil(o.Action) {
+		return true
+	}
+
+	return false
+}
+
+// SetAction gets a reference to the given string and assigns it to the Action field.
+func (o *NumberMaskingStatusRequest) SetAction(v string) {
+	o.Action = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *NumberMaskingStatusRequest) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *NumberMaskingStatusRequest) SetTo(v string) {
+	o.To = &v
+}
+
+// GetTransferTo returns the TransferTo field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetTransferTo() string {
+	if o == nil || IsNil(o.TransferTo) {
+		var ret string
+		return ret
+	}
+	return *o.TransferTo
+}
+
+// GetTransferToOk returns a tuple with the TransferTo field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetTransferToOk() (*string, bool) {
+	if o == nil || IsNil(o.TransferTo) {
+		return nil, false
+	}
+	return o.TransferTo, true
+}
+
+// HasTransferTo returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasTransferTo() bool {
+	if o != nil && !IsNil(o.TransferTo) {
+		return true
+	}
+
+	return false
+}
+
+// SetTransferTo gets a reference to the given string and assigns it to the TransferTo field.
+func (o *NumberMaskingStatusRequest) SetTransferTo(v string) {
+	o.TransferTo = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetDuration() int32 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int32
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int32 and assigns it to the Duration field.
+func (o *NumberMaskingStatusRequest) SetDuration(v int32) {
+	o.Duration = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetStatus() string {
+	if o == nil || IsNil(o.Status) {
+		var ret string
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetStatusOk() (*string, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given string and assigns it to the Status field.
+func (o *NumberMaskingStatusRequest) SetStatus(v string) {
+	o.Status = &v
+}
+
+// GetNmCorrelationId returns the NmCorrelationId field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetNmCorrelationId() string {
+	if o == nil || IsNil(o.NmCorrelationId) {
+		var ret string
+		return ret
+	}
+	return *o.NmCorrelationId
+}
+
+// GetNmCorrelationIdOk returns a tuple with the NmCorrelationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetNmCorrelationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.NmCorrelationId) {
+		return nil, false
+	}
+	return o.NmCorrelationId, true
+}
+
+// HasNmCorrelationId returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasNmCorrelationId() bool {
+	if o != nil && !IsNil(o.NmCorrelationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetNmCorrelationId gets a reference to the given string and assigns it to the NmCorrelationId field.
+func (o *NumberMaskingStatusRequest) SetNmCorrelationId(v string) {
+	o.NmCorrelationId = &v
+}
+
+// GetFileID returns the FileID field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetFileID() string {
+	if o == nil || IsNil(o.FileID) {
+		var ret string
+		return ret
+	}
+	return *o.FileID
+}
+
+// GetFileIDOk returns a tuple with the FileID field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetFileIDOk() (*string, bool) {
+	if o == nil || IsNil(o.FileID) {
+		return nil, false
+	}
+	return o.FileID, true
+}
+
+// HasFileID returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasFileID() bool {
+	if o != nil && !IsNil(o.FileID) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileID gets a reference to the given string and assigns it to the FileID field.
+func (o *NumberMaskingStatusRequest) SetFileID(v string) {
+	o.FileID = &v
+}
+
+// GetFileUrl returns the FileUrl field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetFileUrl() string {
+	if o == nil || IsNil(o.FileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.FileUrl
+}
+
+// GetFileUrlOk returns a tuple with the FileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.FileUrl) {
+		return nil, false
+	}
+	return o.FileUrl, true
+}
+
+// HasFileUrl returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasFileUrl() bool {
+	if o != nil && !IsNil(o.FileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileUrl gets a reference to the given string and assigns it to the FileUrl field.
+func (o *NumberMaskingStatusRequest) SetFileUrl(v string) {
+	o.FileUrl = &v
+}
+
+// GetRingingTime returns the RingingTime field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetRingingTime() string {
+	if o == nil || IsNil(o.RingingTime) {
+		var ret string
+		return ret
+	}
+	return *o.RingingTime
+}
+
+// GetRingingTimeOk returns a tuple with the RingingTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetRingingTimeOk() (*string, bool) {
+	if o == nil || IsNil(o.RingingTime) {
+		return nil, false
+	}
+	return o.RingingTime, true
+}
+
+// HasRingingTime returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasRingingTime() bool {
+	if o != nil && !IsNil(o.RingingTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetRingingTime gets a reference to the given string and assigns it to the RingingTime field.
+func (o *NumberMaskingStatusRequest) SetRingingTime(v string) {
+	o.RingingTime = &v
+}
+
+// GetAnsweredTime returns the AnsweredTime field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetAnsweredTime() string {
+	if o == nil || IsNil(o.AnsweredTime) {
+		var ret string
+		return ret
+	}
+	return *o.AnsweredTime
+}
+
+// GetAnsweredTimeOk returns a tuple with the AnsweredTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetAnsweredTimeOk() (*string, bool) {
+	if o == nil || IsNil(o.AnsweredTime) {
+		return nil, false
+	}
+	return o.AnsweredTime, true
+}
+
+// HasAnsweredTime returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasAnsweredTime() bool {
+	if o != nil && !IsNil(o.AnsweredTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnsweredTime gets a reference to the given string and assigns it to the AnsweredTime field.
+func (o *NumberMaskingStatusRequest) SetAnsweredTime(v string) {
+	o.AnsweredTime = &v
+}
+
+// GetCorrelationId returns the CorrelationId field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetCorrelationId() string {
+	if o == nil || IsNil(o.CorrelationId) {
+		var ret string
+		return ret
+	}
+	return *o.CorrelationId
+}
+
+// GetCorrelationIdOk returns a tuple with the CorrelationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetCorrelationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CorrelationId) {
+		return nil, false
+	}
+	return o.CorrelationId, true
+}
+
+// HasCorrelationId returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasCorrelationId() bool {
+	if o != nil && !IsNil(o.CorrelationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCorrelationId gets a reference to the given string and assigns it to the CorrelationId field.
+func (o *NumberMaskingStatusRequest) SetCorrelationId(v string) {
+	o.CorrelationId = &v
+}
+
+// GetInboundDuration returns the InboundDuration field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetInboundDuration() int32 {
+	if o == nil || IsNil(o.InboundDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.InboundDuration
+}
+
+// GetInboundDurationOk returns a tuple with the InboundDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetInboundDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.InboundDuration) {
+		return nil, false
+	}
+	return o.InboundDuration, true
+}
+
+// HasInboundDuration returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasInboundDuration() bool {
+	if o != nil && !IsNil(o.InboundDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetInboundDuration gets a reference to the given int32 and assigns it to the InboundDuration field.
+func (o *NumberMaskingStatusRequest) SetInboundDuration(v int32) {
+	o.InboundDuration = &v
+}
+
+// GetCalculatedDuration returns the CalculatedDuration field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetCalculatedDuration() int32 {
+	if o == nil || IsNil(o.CalculatedDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.CalculatedDuration
+}
+
+// GetCalculatedDurationOk returns a tuple with the CalculatedDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetCalculatedDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.CalculatedDuration) {
+		return nil, false
+	}
+	return o.CalculatedDuration, true
+}
+
+// HasCalculatedDuration returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasCalculatedDuration() bool {
+	if o != nil && !IsNil(o.CalculatedDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetCalculatedDuration gets a reference to the given int32 and assigns it to the CalculatedDuration field.
+func (o *NumberMaskingStatusRequest) SetCalculatedDuration(v int32) {
+	o.CalculatedDuration = &v
+}
+
+// GetPricePerSecond returns the PricePerSecond field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetPricePerSecond() float64 {
+	if o == nil || IsNil(o.PricePerSecond) {
+		var ret float64
+		return ret
+	}
+	return *o.PricePerSecond
+}
+
+// GetPricePerSecondOk returns a tuple with the PricePerSecond field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetPricePerSecondOk() (*float64, bool) {
+	if o == nil || IsNil(o.PricePerSecond) {
+		return nil, false
+	}
+	return o.PricePerSecond, true
+}
+
+// HasPricePerSecond returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasPricePerSecond() bool {
+	if o != nil && !IsNil(o.PricePerSecond) {
+		return true
+	}
+
+	return false
+}
+
+// SetPricePerSecond gets a reference to the given float64 and assigns it to the PricePerSecond field.
+func (o *NumberMaskingStatusRequest) SetPricePerSecond(v float64) {
+	o.PricePerSecond = &v
+}
+
+// GetCurrency returns the Currency field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetCurrency() string {
+	if o == nil || IsNil(o.Currency) {
+		var ret string
+		return ret
+	}
+	return *o.Currency
+}
+
+// GetCurrencyOk returns a tuple with the Currency field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetCurrencyOk() (*string, bool) {
+	if o == nil || IsNil(o.Currency) {
+		return nil, false
+	}
+	return o.Currency, true
+}
+
+// HasCurrency returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasCurrency() bool {
+	if o != nil && !IsNil(o.Currency) {
+		return true
+	}
+
+	return false
+}
+
+// SetCurrency gets a reference to the given string and assigns it to the Currency field.
+func (o *NumberMaskingStatusRequest) SetCurrency(v string) {
+	o.Currency = &v
+}
+
+// GetRecordingFileId returns the RecordingFileId field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetRecordingFileId() string {
+	if o == nil || IsNil(o.RecordingFileId) {
+		var ret string
+		return ret
+	}
+	return *o.RecordingFileId
+}
+
+// GetRecordingFileIdOk returns a tuple with the RecordingFileId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetRecordingFileIdOk() (*string, bool) {
+	if o == nil || IsNil(o.RecordingFileId) {
+		return nil, false
+	}
+	return o.RecordingFileId, true
+}
+
+// HasRecordingFileId returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasRecordingFileId() bool {
+	if o != nil && !IsNil(o.RecordingFileId) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordingFileId gets a reference to the given string and assigns it to the RecordingFileId field.
+func (o *NumberMaskingStatusRequest) SetRecordingFileId(v string) {
+	o.RecordingFileId = &v
+}
+
+// GetRecordCalleeAnnouncement returns the RecordCalleeAnnouncement field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetRecordCalleeAnnouncement() bool {
+	if o == nil || IsNil(o.RecordCalleeAnnouncement) {
+		var ret bool
+		return ret
+	}
+	return *o.RecordCalleeAnnouncement
+}
+
+// GetRecordCalleeAnnouncementOk returns a tuple with the RecordCalleeAnnouncement field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetRecordCalleeAnnouncementOk() (*bool, bool) {
+	if o == nil || IsNil(o.RecordCalleeAnnouncement) {
+		return nil, false
+	}
+	return o.RecordCalleeAnnouncement, true
+}
+
+// HasRecordCalleeAnnouncement returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasRecordCalleeAnnouncement() bool {
+	if o != nil && !IsNil(o.RecordCalleeAnnouncement) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordCalleeAnnouncement gets a reference to the given bool and assigns it to the RecordCalleeAnnouncement field.
+func (o *NumberMaskingStatusRequest) SetRecordCalleeAnnouncement(v bool) {
+	o.RecordCalleeAnnouncement = &v
+}
+
+// GetRecordingStatus returns the RecordingStatus field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetRecordingStatus() NumberMaskingRecordingStatus {
+	if o == nil || IsNil(o.RecordingStatus) {
+		var ret NumberMaskingRecordingStatus
+		return ret
+	}
+	return *o.RecordingStatus
+}
+
+// GetRecordingStatusOk returns a tuple with the RecordingStatus field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetRecordingStatusOk() (*NumberMaskingRecordingStatus, bool) {
+	if o == nil || IsNil(o.RecordingStatus) {
+		return nil, false
+	}
+	return o.RecordingStatus, true
+}
+
+// HasRecordingStatus returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasRecordingStatus() bool {
+	if o != nil && !IsNil(o.RecordingStatus) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordingStatus gets a reference to the given NumberMaskingRecordingStatus and assigns it to the RecordingStatus field.
+func (o *NumberMaskingStatusRequest) SetRecordingStatus(v NumberMaskingRecordingStatus) {
+	o.RecordingStatus = &v
+}
+
+// GetClientReferenceId returns the ClientReferenceId field value if set, zero value otherwise.
+func (o *NumberMaskingStatusRequest) GetClientReferenceId() string {
+	if o == nil || IsNil(o.ClientReferenceId) {
+		var ret string
+		return ret
+	}
+	return *o.ClientReferenceId
+}
+
+// GetClientReferenceIdOk returns a tuple with the ClientReferenceId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingStatusRequest) GetClientReferenceIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ClientReferenceId) {
+		return nil, false
+	}
+	return o.ClientReferenceId, true
+}
+
+// HasClientReferenceId returns a boolean if a field has been set.
+func (o *NumberMaskingStatusRequest) HasClientReferenceId() bool {
+	if o != nil && !IsNil(o.ClientReferenceId) {
+		return true
+	}
+
+	return false
+}
+
+// SetClientReferenceId gets a reference to the given string and assigns it to the ClientReferenceId field.
+func (o *NumberMaskingStatusRequest) SetClientReferenceId(v string) {
+	o.ClientReferenceId = &v
+}
+
+func (o NumberMaskingStatusRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingStatusRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Action) {
+		toSerialize["action"] = o.Action
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.TransferTo) {
+		toSerialize["transferTo"] = o.TransferTo
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.NmCorrelationId) {
+		toSerialize["nmCorrelationId"] = o.NmCorrelationId
+	}
+	if !IsNil(o.FileID) {
+		toSerialize["fileID"] = o.FileID
+	}
+	if !IsNil(o.FileUrl) {
+		toSerialize["fileUrl"] = o.FileUrl
+	}
+	if !IsNil(o.RingingTime) {
+		toSerialize["ringingTime"] = o.RingingTime
+	}
+	if !IsNil(o.AnsweredTime) {
+		toSerialize["answeredTime"] = o.AnsweredTime
+	}
+	if !IsNil(o.CorrelationId) {
+		toSerialize["correlationId"] = o.CorrelationId
+	}
+	if !IsNil(o.InboundDuration) {
+		toSerialize["inboundDuration"] = o.InboundDuration
+	}
+	if !IsNil(o.CalculatedDuration) {
+		toSerialize["calculatedDuration"] = o.CalculatedDuration
+	}
+	if !IsNil(o.PricePerSecond) {
+		toSerialize["pricePerSecond"] = o.PricePerSecond
+	}
+	if !IsNil(o.Currency) {
+		toSerialize["currency"] = o.Currency
+	}
+	if !IsNil(o.RecordingFileId) {
+		toSerialize["recordingFileId"] = o.RecordingFileId
+	}
+	if !IsNil(o.RecordCalleeAnnouncement) {
+		toSerialize["recordCalleeAnnouncement"] = o.RecordCalleeAnnouncement
+	}
+	if !IsNil(o.RecordingStatus) {
+		toSerialize["recordingStatus"] = o.RecordingStatus
+	}
+	if !IsNil(o.ClientReferenceId) {
+		toSerialize["clientReferenceId"] = o.ClientReferenceId
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingStatusRequest struct {
+	value *NumberMaskingStatusRequest
+	isSet bool
+}
+
+func (v NullableNumberMaskingStatusRequest) Get() *NumberMaskingStatusRequest {
+	return v.value
+}
+
+func (v *NullableNumberMaskingStatusRequest) Set(val *NumberMaskingStatusRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingStatusRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingStatusRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingStatusRequest(val *NumberMaskingStatusRequest) *NullableNumberMaskingStatusRequest {
+	return &NullableNumberMaskingStatusRequest{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingStatusRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingStatusRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_upload_body.go b/pkg/infobip/models/voice/number_masking_upload_body.go
new file mode 100644
index 0000000..d067888
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_upload_body.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingUploadBody type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingUploadBody{}
+
+// NumberMaskingUploadBody struct for NumberMaskingUploadBody
+type NumberMaskingUploadBody struct {
+	// URL of your voice file location. Max size of the file is 4MB. The acceptable file format is mp3.
+	Url *string
+	// Encoded (Base64) value of mp3 file can be included instead of the file location URL.
+	Content *string
+}
+
+// NewNumberMaskingUploadBody instantiates a new NumberMaskingUploadBody object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingUploadBody() *NumberMaskingUploadBody {
+	this := NumberMaskingUploadBody{}
+	return &this
+}
+
+// NewNumberMaskingUploadBodyWithDefaults instantiates a new NumberMaskingUploadBody object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingUploadBodyWithDefaults() *NumberMaskingUploadBody {
+	this := NumberMaskingUploadBody{}
+
+	return &this
+}
+
+// GetUrl returns the Url field value if set, zero value otherwise.
+func (o *NumberMaskingUploadBody) GetUrl() string {
+	if o == nil || IsNil(o.Url) {
+		var ret string
+		return ret
+	}
+	return *o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingUploadBody) GetUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.Url) {
+		return nil, false
+	}
+	return o.Url, true
+}
+
+// HasUrl returns a boolean if a field has been set.
+func (o *NumberMaskingUploadBody) HasUrl() bool {
+	if o != nil && !IsNil(o.Url) {
+		return true
+	}
+
+	return false
+}
+
+// SetUrl gets a reference to the given string and assigns it to the Url field.
+func (o *NumberMaskingUploadBody) SetUrl(v string) {
+	o.Url = &v
+}
+
+// GetContent returns the Content field value if set, zero value otherwise.
+func (o *NumberMaskingUploadBody) GetContent() string {
+	if o == nil || IsNil(o.Content) {
+		var ret string
+		return ret
+	}
+	return *o.Content
+}
+
+// GetContentOk returns a tuple with the Content field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingUploadBody) GetContentOk() (*string, bool) {
+	if o == nil || IsNil(o.Content) {
+		return nil, false
+	}
+	return o.Content, true
+}
+
+// HasContent returns a boolean if a field has been set.
+func (o *NumberMaskingUploadBody) HasContent() bool {
+	if o != nil && !IsNil(o.Content) {
+		return true
+	}
+
+	return false
+}
+
+// SetContent gets a reference to the given string and assigns it to the Content field.
+func (o *NumberMaskingUploadBody) SetContent(v string) {
+	o.Content = &v
+}
+
+func (o NumberMaskingUploadBody) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingUploadBody) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Url) {
+		toSerialize["url"] = o.Url
+	}
+	if !IsNil(o.Content) {
+		toSerialize["content"] = o.Content
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingUploadBody struct {
+	value *NumberMaskingUploadBody
+	isSet bool
+}
+
+func (v NullableNumberMaskingUploadBody) Get() *NumberMaskingUploadBody {
+	return v.value
+}
+
+func (v *NullableNumberMaskingUploadBody) Set(val *NumberMaskingUploadBody) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingUploadBody) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingUploadBody) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingUploadBody(val *NumberMaskingUploadBody) *NullableNumberMaskingUploadBody {
+	return &NullableNumberMaskingUploadBody{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingUploadBody) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingUploadBody) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_masking_upload_response.go b/pkg/infobip/models/voice/number_masking_upload_response.go
new file mode 100644
index 0000000..d0aebaf
--- /dev/null
+++ b/pkg/infobip/models/voice/number_masking_upload_response.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the NumberMaskingUploadResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &NumberMaskingUploadResponse{}
+
+// NumberMaskingUploadResponse struct for NumberMaskingUploadResponse
+type NumberMaskingUploadResponse struct {
+	// Id of the uploaded audio file.
+	FileId *string
+}
+
+// NewNumberMaskingUploadResponse instantiates a new NumberMaskingUploadResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumberMaskingUploadResponse() *NumberMaskingUploadResponse {
+	this := NumberMaskingUploadResponse{}
+	return &this
+}
+
+// NewNumberMaskingUploadResponseWithDefaults instantiates a new NumberMaskingUploadResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumberMaskingUploadResponseWithDefaults() *NumberMaskingUploadResponse {
+	this := NumberMaskingUploadResponse{}
+
+	return &this
+}
+
+// GetFileId returns the FileId field value if set, zero value otherwise.
+func (o *NumberMaskingUploadResponse) GetFileId() string {
+	if o == nil || IsNil(o.FileId) {
+		var ret string
+		return ret
+	}
+	return *o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *NumberMaskingUploadResponse) GetFileIdOk() (*string, bool) {
+	if o == nil || IsNil(o.FileId) {
+		return nil, false
+	}
+	return o.FileId, true
+}
+
+// HasFileId returns a boolean if a field has been set.
+func (o *NumberMaskingUploadResponse) HasFileId() bool {
+	if o != nil && !IsNil(o.FileId) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileId gets a reference to the given string and assigns it to the FileId field.
+func (o *NumberMaskingUploadResponse) SetFileId(v string) {
+	o.FileId = &v
+}
+
+func (o NumberMaskingUploadResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o NumberMaskingUploadResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.FileId) {
+		toSerialize["fileId"] = o.FileId
+	}
+	return toSerialize, nil
+}
+
+type NullableNumberMaskingUploadResponse struct {
+	value *NumberMaskingUploadResponse
+	isSet bool
+}
+
+func (v NullableNumberMaskingUploadResponse) Get() *NumberMaskingUploadResponse {
+	return v.value
+}
+
+func (v *NullableNumberMaskingUploadResponse) Set(val *NumberMaskingUploadResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberMaskingUploadResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberMaskingUploadResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberMaskingUploadResponse(val *NumberMaskingUploadResponse) *NullableNumberMaskingUploadResponse {
+	return &NullableNumberMaskingUploadResponse{value: val, isSet: true}
+}
+
+func (v NullableNumberMaskingUploadResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberMaskingUploadResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/number_presentation_format.go b/pkg/infobip/models/voice/number_presentation_format.go
new file mode 100644
index 0000000..daae845
--- /dev/null
+++ b/pkg/infobip/models/voice/number_presentation_format.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// NumberPresentationFormat Format in which numbers are sent to a SIP trunk.
+type NumberPresentationFormat string
+
+// List of NumberPresentationFormat
+const (
+	NUMBERPRESENTATIONFORMAT_E164          NumberPresentationFormat = "E164"
+	NUMBERPRESENTATIONFORMAT_INTERNATIONAL NumberPresentationFormat = "INTERNATIONAL"
+	NUMBERPRESENTATIONFORMAT_US_NATIONAL   NumberPresentationFormat = "US_NATIONAL"
+)
+
+// All allowed values of NumberPresentationFormat enum
+var AllowedNumberPresentationFormatEnumValues = []NumberPresentationFormat{
+	"E164",
+	"INTERNATIONAL",
+	"US_NATIONAL",
+}
+
+func (v *NumberPresentationFormat) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := NumberPresentationFormat(value)
+	for _, existing := range AllowedNumberPresentationFormatEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid NumberPresentationFormat", value)
+}
+
+// NewNumberPresentationFormatFromValue returns a pointer to a valid NumberPresentationFormat
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewNumberPresentationFormatFromValue(v string) (*NumberPresentationFormat, error) {
+	ev := NumberPresentationFormat(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for NumberPresentationFormat: valid values are %v", v, AllowedNumberPresentationFormatEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v NumberPresentationFormat) IsValid() bool {
+	for _, existing := range AllowedNumberPresentationFormatEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to NumberPresentationFormat value
+func (v NumberPresentationFormat) Ptr() *NumberPresentationFormat {
+	return &v
+}
+
+type NullableNumberPresentationFormat struct {
+	value *NumberPresentationFormat
+	isSet bool
+}
+
+func (v NullableNumberPresentationFormat) Get() *NumberPresentationFormat {
+	return v.value
+}
+
+func (v *NullableNumberPresentationFormat) Set(val *NumberPresentationFormat) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumberPresentationFormat) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumberPresentationFormat) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumberPresentationFormat(val *NumberPresentationFormat) *NullableNumberPresentationFormat {
+	return &NullableNumberPresentationFormat{value: val, isSet: true}
+}
+
+func (v NullableNumberPresentationFormat) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumberPresentationFormat) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/numbers.go b/pkg/infobip/models/voice/numbers.go
new file mode 100644
index 0000000..8c4a0b0
--- /dev/null
+++ b/pkg/infobip/models/voice/numbers.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Numbers type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Numbers{}
+
+// Numbers struct for Numbers
+type Numbers struct {
+	// must be a valid E164 MSISDN; the parameter can be constructed using variables
+	Number *string
+	// must be a comma-separated list of valid E164 MSISDN numbers; the parameter can be constructed using variables
+	Numbers *string
+}
+
+// NewNumbers instantiates a new Numbers object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewNumbers() *Numbers {
+	this := Numbers{}
+	return &this
+}
+
+// NewNumbersWithDefaults instantiates a new Numbers object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewNumbersWithDefaults() *Numbers {
+	this := Numbers{}
+
+	return &this
+}
+
+// GetNumber returns the Number field value if set, zero value otherwise.
+func (o *Numbers) GetNumber() string {
+	if o == nil || IsNil(o.Number) {
+		var ret string
+		return ret
+	}
+	return *o.Number
+}
+
+// GetNumberOk returns a tuple with the Number field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Numbers) GetNumberOk() (*string, bool) {
+	if o == nil || IsNil(o.Number) {
+		return nil, false
+	}
+	return o.Number, true
+}
+
+// HasNumber returns a boolean if a field has been set.
+func (o *Numbers) HasNumber() bool {
+	if o != nil && !IsNil(o.Number) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumber gets a reference to the given string and assigns it to the Number field.
+func (o *Numbers) SetNumber(v string) {
+	o.Number = &v
+}
+
+// GetNumbers returns the Numbers field value if set, zero value otherwise.
+func (o *Numbers) GetNumbers() string {
+	if o == nil || IsNil(o.Numbers) {
+		var ret string
+		return ret
+	}
+	return *o.Numbers
+}
+
+// GetNumbersOk returns a tuple with the Numbers field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Numbers) GetNumbersOk() (*string, bool) {
+	if o == nil || IsNil(o.Numbers) {
+		return nil, false
+	}
+	return o.Numbers, true
+}
+
+// HasNumbers returns a boolean if a field has been set.
+func (o *Numbers) HasNumbers() bool {
+	if o != nil && !IsNil(o.Numbers) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumbers gets a reference to the given string and assigns it to the Numbers field.
+func (o *Numbers) SetNumbers(v string) {
+	o.Numbers = &v
+}
+
+func (o Numbers) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Numbers) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Number) {
+		toSerialize["number"] = o.Number
+	}
+	if !IsNil(o.Numbers) {
+		toSerialize["numbers"] = o.Numbers
+	}
+	return toSerialize, nil
+}
+
+type NullableNumbers struct {
+	value *Numbers
+	isSet bool
+}
+
+func (v NullableNumbers) Get() *Numbers {
+	return v.value
+}
+
+func (v *NullableNumbers) Set(val *Numbers) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableNumbers) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableNumbers) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableNumbers(val *Numbers) *NullableNumbers {
+	return &NullableNumbers{value: val, isSet: true}
+}
+
+func (v NullableNumbers) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableNumbers) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/on_demand_composition.go b/pkg/infobip/models/voice/on_demand_composition.go
new file mode 100644
index 0000000..29a8c03
--- /dev/null
+++ b/pkg/infobip/models/voice/on_demand_composition.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the OnDemandComposition type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &OnDemandComposition{}
+
+// OnDemandComposition Composition request.
+type OnDemandComposition struct {
+	// Indicates whether to delete individual files for the call recordings after composition. If set to 'true' then files from the call recordings will be deleted after composition. Otherwise, files from the call recordings will be available, alongside with composed file.
+	DeleteCallRecordings *bool
+	MultiChannel         *MultiChannel
+}
+
+// NewOnDemandComposition instantiates a new OnDemandComposition object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewOnDemandComposition() *OnDemandComposition {
+	this := OnDemandComposition{}
+	var deleteCallRecordings bool = true
+	this.DeleteCallRecordings = &deleteCallRecordings
+	return &this
+}
+
+// NewOnDemandCompositionWithDefaults instantiates a new OnDemandComposition object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewOnDemandCompositionWithDefaults() *OnDemandComposition {
+	this := OnDemandComposition{}
+
+	var deleteCallRecordings bool = true
+	this.DeleteCallRecordings = &deleteCallRecordings
+	return &this
+}
+
+// GetDeleteCallRecordings returns the DeleteCallRecordings field value if set, zero value otherwise.
+func (o *OnDemandComposition) GetDeleteCallRecordings() bool {
+	if o == nil || IsNil(o.DeleteCallRecordings) {
+		var ret bool
+		return ret
+	}
+	return *o.DeleteCallRecordings
+}
+
+// GetDeleteCallRecordingsOk returns a tuple with the DeleteCallRecordings field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *OnDemandComposition) GetDeleteCallRecordingsOk() (*bool, bool) {
+	if o == nil || IsNil(o.DeleteCallRecordings) {
+		return nil, false
+	}
+	return o.DeleteCallRecordings, true
+}
+
+// HasDeleteCallRecordings returns a boolean if a field has been set.
+func (o *OnDemandComposition) HasDeleteCallRecordings() bool {
+	if o != nil && !IsNil(o.DeleteCallRecordings) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeleteCallRecordings gets a reference to the given bool and assigns it to the DeleteCallRecordings field.
+func (o *OnDemandComposition) SetDeleteCallRecordings(v bool) {
+	o.DeleteCallRecordings = &v
+}
+
+// GetMultiChannel returns the MultiChannel field value if set, zero value otherwise.
+func (o *OnDemandComposition) GetMultiChannel() MultiChannel {
+	if o == nil || IsNil(o.MultiChannel) {
+		var ret MultiChannel
+		return ret
+	}
+	return *o.MultiChannel
+}
+
+// GetMultiChannelOk returns a tuple with the MultiChannel field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *OnDemandComposition) GetMultiChannelOk() (*MultiChannel, bool) {
+	if o == nil || IsNil(o.MultiChannel) {
+		return nil, false
+	}
+	return o.MultiChannel, true
+}
+
+// HasMultiChannel returns a boolean if a field has been set.
+func (o *OnDemandComposition) HasMultiChannel() bool {
+	if o != nil && !IsNil(o.MultiChannel) {
+		return true
+	}
+
+	return false
+}
+
+// SetMultiChannel gets a reference to the given MultiChannel and assigns it to the MultiChannel field.
+func (o *OnDemandComposition) SetMultiChannel(v MultiChannel) {
+	o.MultiChannel = &v
+}
+
+func (o OnDemandComposition) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o OnDemandComposition) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.DeleteCallRecordings) {
+		toSerialize["deleteCallRecordings"] = o.DeleteCallRecordings
+	}
+	if !IsNil(o.MultiChannel) {
+		toSerialize["multiChannel"] = o.MultiChannel
+	}
+	return toSerialize, nil
+}
+
+type NullableOnDemandComposition struct {
+	value *OnDemandComposition
+	isSet bool
+}
+
+func (v NullableOnDemandComposition) Get() *OnDemandComposition {
+	return v.value
+}
+
+func (v *NullableOnDemandComposition) Set(val *OnDemandComposition) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableOnDemandComposition) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableOnDemandComposition) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableOnDemandComposition(val *OnDemandComposition) *NullableOnDemandComposition {
+	return &NullableOnDemandComposition{value: val, isSet: true}
+}
+
+func (v NullableOnDemandComposition) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableOnDemandComposition) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/page_info.go b/pkg/infobip/models/voice/page_info.go
new file mode 100644
index 0000000..ede4970
--- /dev/null
+++ b/pkg/infobip/models/voice/page_info.go
@@ -0,0 +1,206 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the PageInfo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &PageInfo{}
+
+// PageInfo Contains information about the page.
+type PageInfo struct {
+	// Requested page number.
+	Page int32
+	// Requested page size.
+	Size int32
+	// The total number of pages of the results matching the requested parameters.
+	TotalPages int32
+	// The total number of the results matching the requested parameters.
+	TotalResults int64
+}
+
+type _PageInfo PageInfo
+
+// NewPageInfo instantiates a new PageInfo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPageInfo(page int32, size int32, totalPages int32, totalResults int64) *PageInfo {
+	this := PageInfo{}
+	this.Page = page
+	this.Size = size
+	this.TotalPages = totalPages
+	this.TotalResults = totalResults
+	return &this
+}
+
+// NewPageInfoWithDefaults instantiates a new PageInfo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPageInfoWithDefaults() *PageInfo {
+	this := PageInfo{}
+
+	return &this
+}
+
+// GetPage returns the Page field value
+func (o *PageInfo) GetPage() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Page
+}
+
+// GetPageOk returns a tuple with the Page field value
+// and a boolean to check if the value has been set.
+func (o *PageInfo) GetPageOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Page, true
+}
+
+// SetPage sets field value
+func (o *PageInfo) SetPage(v int32) {
+	o.Page = v
+}
+
+// GetSize returns the Size field value
+func (o *PageInfo) GetSize() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Size
+}
+
+// GetSizeOk returns a tuple with the Size field value
+// and a boolean to check if the value has been set.
+func (o *PageInfo) GetSizeOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Size, true
+}
+
+// SetSize sets field value
+func (o *PageInfo) SetSize(v int32) {
+	o.Size = v
+}
+
+// GetTotalPages returns the TotalPages field value
+func (o *PageInfo) GetTotalPages() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.TotalPages
+}
+
+// GetTotalPagesOk returns a tuple with the TotalPages field value
+// and a boolean to check if the value has been set.
+func (o *PageInfo) GetTotalPagesOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.TotalPages, true
+}
+
+// SetTotalPages sets field value
+func (o *PageInfo) SetTotalPages(v int32) {
+	o.TotalPages = v
+}
+
+// GetTotalResults returns the TotalResults field value
+func (o *PageInfo) GetTotalResults() int64 {
+	if o == nil {
+		var ret int64
+		return ret
+	}
+
+	return o.TotalResults
+}
+
+// GetTotalResultsOk returns a tuple with the TotalResults field value
+// and a boolean to check if the value has been set.
+func (o *PageInfo) GetTotalResultsOk() (*int64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.TotalResults, true
+}
+
+// SetTotalResults sets field value
+func (o *PageInfo) SetTotalResults(v int64) {
+	o.TotalResults = v
+}
+
+func (o PageInfo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o PageInfo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["page"] = o.Page
+	toSerialize["size"] = o.Size
+	toSerialize["totalPages"] = o.TotalPages
+	toSerialize["totalResults"] = o.TotalResults
+	return toSerialize, nil
+}
+
+type NullablePageInfo struct {
+	value *PageInfo
+	isSet bool
+}
+
+func (v NullablePageInfo) Get() *PageInfo {
+	return v.value
+}
+
+func (v *NullablePageInfo) Set(val *PageInfo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePageInfo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePageInfo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePageInfo(val *PageInfo) *NullablePageInfo {
+	return &NullablePageInfo{value: val, isSet: true}
+}
+
+func (v NullablePageInfo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePageInfo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/participant.go b/pkg/infobip/models/voice/participant.go
new file mode 100644
index 0000000..4549ed2
--- /dev/null
+++ b/pkg/infobip/models/voice/participant.go
@@ -0,0 +1,304 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Participant type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Participant{}
+
+// Participant struct for Participant
+type Participant struct {
+	// Participant call ID.
+	CallId   *string
+	Endpoint CallEndpoint
+	State    *ParticipantState
+	// Date and time when the participant has joined.
+	JoinTime *Time
+	// Date and time when the participant has left.
+	LeaveTime *Time
+	Media     *MediaProperties
+}
+
+type _Participant Participant
+
+// NewParticipant instantiates a new Participant object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewParticipant(endpoint CallEndpoint) *Participant {
+	this := Participant{}
+	this.Endpoint = endpoint
+	return &this
+}
+
+// NewParticipantWithDefaults instantiates a new Participant object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewParticipantWithDefaults() *Participant {
+	this := Participant{}
+
+	return &this
+}
+
+// GetCallId returns the CallId field value if set, zero value otherwise.
+func (o *Participant) GetCallId() string {
+	if o == nil || IsNil(o.CallId) {
+		var ret string
+		return ret
+	}
+	return *o.CallId
+}
+
+// GetCallIdOk returns a tuple with the CallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Participant) GetCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallId) {
+		return nil, false
+	}
+	return o.CallId, true
+}
+
+// HasCallId returns a boolean if a field has been set.
+func (o *Participant) HasCallId() bool {
+	if o != nil && !IsNil(o.CallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallId gets a reference to the given string and assigns it to the CallId field.
+func (o *Participant) SetCallId(v string) {
+	o.CallId = &v
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *Participant) GetEndpoint() CallEndpoint {
+	if o == nil {
+		var ret CallEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *Participant) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *Participant) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = v
+}
+
+// GetState returns the State field value if set, zero value otherwise.
+func (o *Participant) GetState() ParticipantState {
+	if o == nil || IsNil(o.State) {
+		var ret ParticipantState
+		return ret
+	}
+	return *o.State
+}
+
+// GetStateOk returns a tuple with the State field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Participant) GetStateOk() (*ParticipantState, bool) {
+	if o == nil || IsNil(o.State) {
+		return nil, false
+	}
+	return o.State, true
+}
+
+// HasState returns a boolean if a field has been set.
+func (o *Participant) HasState() bool {
+	if o != nil && !IsNil(o.State) {
+		return true
+	}
+
+	return false
+}
+
+// SetState gets a reference to the given ParticipantState and assigns it to the State field.
+func (o *Participant) SetState(v ParticipantState) {
+	o.State = &v
+}
+
+// GetJoinTime returns the JoinTime field value if set, zero value otherwise.
+func (o *Participant) GetJoinTime() Time {
+	if o == nil || IsNil(o.JoinTime) {
+		var ret Time
+		return ret
+	}
+	return *o.JoinTime
+}
+
+// GetJoinTimeOk returns a tuple with the JoinTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Participant) GetJoinTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.JoinTime) {
+		return nil, false
+	}
+	return o.JoinTime, true
+}
+
+// HasJoinTime returns a boolean if a field has been set.
+func (o *Participant) HasJoinTime() bool {
+	if o != nil && !IsNil(o.JoinTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetJoinTime gets a reference to the given Time and assigns it to the JoinTime field.
+func (o *Participant) SetJoinTime(v Time) {
+	o.JoinTime = &v
+}
+
+// GetLeaveTime returns the LeaveTime field value if set, zero value otherwise.
+func (o *Participant) GetLeaveTime() Time {
+	if o == nil || IsNil(o.LeaveTime) {
+		var ret Time
+		return ret
+	}
+	return *o.LeaveTime
+}
+
+// GetLeaveTimeOk returns a tuple with the LeaveTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Participant) GetLeaveTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.LeaveTime) {
+		return nil, false
+	}
+	return o.LeaveTime, true
+}
+
+// HasLeaveTime returns a boolean if a field has been set.
+func (o *Participant) HasLeaveTime() bool {
+	if o != nil && !IsNil(o.LeaveTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetLeaveTime gets a reference to the given Time and assigns it to the LeaveTime field.
+func (o *Participant) SetLeaveTime(v Time) {
+	o.LeaveTime = &v
+}
+
+// GetMedia returns the Media field value if set, zero value otherwise.
+func (o *Participant) GetMedia() MediaProperties {
+	if o == nil || IsNil(o.Media) {
+		var ret MediaProperties
+		return ret
+	}
+	return *o.Media
+}
+
+// GetMediaOk returns a tuple with the Media field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Participant) GetMediaOk() (*MediaProperties, bool) {
+	if o == nil || IsNil(o.Media) {
+		return nil, false
+	}
+	return o.Media, true
+}
+
+// HasMedia returns a boolean if a field has been set.
+func (o *Participant) HasMedia() bool {
+	if o != nil && !IsNil(o.Media) {
+		return true
+	}
+
+	return false
+}
+
+// SetMedia gets a reference to the given MediaProperties and assigns it to the Media field.
+func (o *Participant) SetMedia(v MediaProperties) {
+	o.Media = &v
+}
+
+func (o Participant) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Participant) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallId) {
+		toSerialize["callId"] = o.CallId
+	}
+	toSerialize["endpoint"] = o.Endpoint
+	if !IsNil(o.State) {
+		toSerialize["state"] = o.State
+	}
+	if !IsNil(o.JoinTime) {
+		toSerialize["joinTime"] = o.JoinTime
+	}
+	if !IsNil(o.LeaveTime) {
+		toSerialize["leaveTime"] = o.LeaveTime
+	}
+	if !IsNil(o.Media) {
+		toSerialize["media"] = o.Media
+	}
+	return toSerialize, nil
+}
+
+type NullableParticipant struct {
+	value *Participant
+	isSet bool
+}
+
+func (v NullableParticipant) Get() *Participant {
+	return v.value
+}
+
+func (v *NullableParticipant) Set(val *Participant) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableParticipant) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableParticipant) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableParticipant(val *Participant) *NullableParticipant {
+	return &NullableParticipant{value: val, isSet: true}
+}
+
+func (v NullableParticipant) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableParticipant) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/participant_session.go b/pkg/infobip/models/voice/participant_session.go
new file mode 100644
index 0000000..ea87723
--- /dev/null
+++ b/pkg/infobip/models/voice/participant_session.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ParticipantSession type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ParticipantSession{}
+
+// ParticipantSession List of participant sessions.
+type ParticipantSession struct {
+	// Unique call ID.
+	CallId *string
+	// Date and time for when the participant joined the conference.
+	JoinTime *Time
+	// Date and time for when the participant left the conference.
+	LeaveTime *Time
+}
+
+// NewParticipantSession instantiates a new ParticipantSession object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewParticipantSession() *ParticipantSession {
+	this := ParticipantSession{}
+	return &this
+}
+
+// NewParticipantSessionWithDefaults instantiates a new ParticipantSession object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewParticipantSessionWithDefaults() *ParticipantSession {
+	this := ParticipantSession{}
+
+	return &this
+}
+
+// GetCallId returns the CallId field value if set, zero value otherwise.
+func (o *ParticipantSession) GetCallId() string {
+	if o == nil || IsNil(o.CallId) {
+		var ret string
+		return ret
+	}
+	return *o.CallId
+}
+
+// GetCallIdOk returns a tuple with the CallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ParticipantSession) GetCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallId) {
+		return nil, false
+	}
+	return o.CallId, true
+}
+
+// HasCallId returns a boolean if a field has been set.
+func (o *ParticipantSession) HasCallId() bool {
+	if o != nil && !IsNil(o.CallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallId gets a reference to the given string and assigns it to the CallId field.
+func (o *ParticipantSession) SetCallId(v string) {
+	o.CallId = &v
+}
+
+// GetJoinTime returns the JoinTime field value if set, zero value otherwise.
+func (o *ParticipantSession) GetJoinTime() Time {
+	if o == nil || IsNil(o.JoinTime) {
+		var ret Time
+		return ret
+	}
+	return *o.JoinTime
+}
+
+// GetJoinTimeOk returns a tuple with the JoinTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ParticipantSession) GetJoinTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.JoinTime) {
+		return nil, false
+	}
+	return o.JoinTime, true
+}
+
+// HasJoinTime returns a boolean if a field has been set.
+func (o *ParticipantSession) HasJoinTime() bool {
+	if o != nil && !IsNil(o.JoinTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetJoinTime gets a reference to the given Time and assigns it to the JoinTime field.
+func (o *ParticipantSession) SetJoinTime(v Time) {
+	o.JoinTime = &v
+}
+
+// GetLeaveTime returns the LeaveTime field value if set, zero value otherwise.
+func (o *ParticipantSession) GetLeaveTime() Time {
+	if o == nil || IsNil(o.LeaveTime) {
+		var ret Time
+		return ret
+	}
+	return *o.LeaveTime
+}
+
+// GetLeaveTimeOk returns a tuple with the LeaveTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ParticipantSession) GetLeaveTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.LeaveTime) {
+		return nil, false
+	}
+	return o.LeaveTime, true
+}
+
+// HasLeaveTime returns a boolean if a field has been set.
+func (o *ParticipantSession) HasLeaveTime() bool {
+	if o != nil && !IsNil(o.LeaveTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetLeaveTime gets a reference to the given Time and assigns it to the LeaveTime field.
+func (o *ParticipantSession) SetLeaveTime(v Time) {
+	o.LeaveTime = &v
+}
+
+func (o ParticipantSession) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ParticipantSession) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallId) {
+		toSerialize["callId"] = o.CallId
+	}
+	if !IsNil(o.JoinTime) {
+		toSerialize["joinTime"] = o.JoinTime
+	}
+	if !IsNil(o.LeaveTime) {
+		toSerialize["leaveTime"] = o.LeaveTime
+	}
+	return toSerialize, nil
+}
+
+type NullableParticipantSession struct {
+	value *ParticipantSession
+	isSet bool
+}
+
+func (v NullableParticipantSession) Get() *ParticipantSession {
+	return v.value
+}
+
+func (v *NullableParticipantSession) Set(val *ParticipantSession) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableParticipantSession) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableParticipantSession) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableParticipantSession(val *ParticipantSession) *NullableParticipantSession {
+	return &NullableParticipantSession{value: val, isSet: true}
+}
+
+func (v NullableParticipantSession) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableParticipantSession) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/participant_state.go b/pkg/infobip/models/voice/participant_state.go
new file mode 100644
index 0000000..0307945
--- /dev/null
+++ b/pkg/infobip/models/voice/participant_state.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ParticipantState Participant state.
+type ParticipantState string
+
+// List of ParticipantState
+const (
+	PARTICIPANTSTATE_JOINING ParticipantState = "JOINING"
+	PARTICIPANTSTATE_JOINED  ParticipantState = "JOINED"
+	PARTICIPANTSTATE_LEFT    ParticipantState = "LEFT"
+)
+
+// All allowed values of ParticipantState enum
+var AllowedParticipantStateEnumValues = []ParticipantState{
+	"JOINING",
+	"JOINED",
+	"LEFT",
+}
+
+func (v *ParticipantState) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ParticipantState(value)
+	for _, existing := range AllowedParticipantStateEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ParticipantState", value)
+}
+
+// NewParticipantStateFromValue returns a pointer to a valid ParticipantState
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewParticipantStateFromValue(v string) (*ParticipantState, error) {
+	ev := ParticipantState(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ParticipantState: valid values are %v", v, AllowedParticipantStateEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ParticipantState) IsValid() bool {
+	for _, existing := range AllowedParticipantStateEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ParticipantState value
+func (v ParticipantState) Ptr() *ParticipantState {
+	return &v
+}
+
+type NullableParticipantState struct {
+	value *ParticipantState
+	isSet bool
+}
+
+func (v NullableParticipantState) Get() *ParticipantState {
+	return v.value
+}
+
+func (v *NullableParticipantState) Set(val *ParticipantState) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableParticipantState) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableParticipantState) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableParticipantState(val *ParticipantState) *NullableParticipantState {
+	return &NullableParticipantState{value: val, isSet: true}
+}
+
+func (v NullableParticipantState) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableParticipantState) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/pause.go b/pkg/infobip/models/voice/pause.go
new file mode 100644
index 0000000..0196052
--- /dev/null
+++ b/pkg/infobip/models/voice/pause.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Pause type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Pause{}
+
+// Pause Pause action pauses execution of the IVR scenario for the provided duration.
+type Pause struct {
+	// the amount to wait in seconds, from 0 (exclusive) to 5 (inclusive)
+	Pause float64
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Pause Pause
+
+// NewPause instantiates a new Pause object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPause(pause float64) *Pause {
+	this := Pause{}
+	this.Pause = pause
+	return &this
+}
+
+// NewPauseWithDefaults instantiates a new Pause object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPauseWithDefaults() *Pause {
+	this := Pause{}
+
+	return &this
+}
+
+// GetPause returns the Pause field value
+func (o *Pause) GetPause() float64 {
+	if o == nil {
+		var ret float64
+		return ret
+	}
+
+	return o.Pause
+}
+
+// GetPauseOk returns a tuple with the Pause field value
+// and a boolean to check if the value has been set.
+func (o *Pause) GetPauseOk() (*float64, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Pause, true
+}
+
+// SetPause sets field value
+func (o *Pause) SetPause(v float64) {
+	o.Pause = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Pause) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Pause) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Pause) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Pause) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Pause) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Pause) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["pause"] = o.Pause
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullablePause struct {
+	value *Pause
+	isSet bool
+}
+
+func (v NullablePause) Get() *Pause {
+	return v.value
+}
+
+func (v *NullablePause) Set(val *Pause) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePause) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePause) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePause(val *Pause) *NullablePause {
+	return &NullablePause{value: val, isSet: true}
+}
+
+func (v NullablePause) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePause) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/phone_endpoint.go b/pkg/infobip/models/voice/phone_endpoint.go
new file mode 100644
index 0000000..67d2b04
--- /dev/null
+++ b/pkg/infobip/models/voice/phone_endpoint.go
@@ -0,0 +1,126 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the PhoneEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &PhoneEndpoint{}
+
+// PhoneEndpoint struct for PhoneEndpoint
+type PhoneEndpoint struct {
+	Type CallEndpointType
+	// Phone number in the [E.164](https://en.wikipedia.org/wiki/E.164) format.
+	PhoneNumber string
+}
+
+type _PhoneEndpoint PhoneEndpoint
+
+// NewPhoneEndpoint instantiates a new PhoneEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewPhoneEndpoint(phoneNumber string) *PhoneEndpoint {
+	this := PhoneEndpoint{}
+	this.Type = "PHONE"
+	this.PhoneNumber = phoneNumber
+	return &this
+}
+
+// NewPhoneEndpointWithDefaults instantiates a new PhoneEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPhoneEndpointWithDefaults() *PhoneEndpoint {
+	this := PhoneEndpoint{}
+	this.Type = "PHONE"
+	return &this
+}
+
+// GetPhoneNumber returns the PhoneNumber field value
+func (o *PhoneEndpoint) GetPhoneNumber() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value
+// and a boolean to check if the value has been set.
+func (o *PhoneEndpoint) GetPhoneNumberOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PhoneNumber, true
+}
+
+// SetPhoneNumber sets field value
+func (o *PhoneEndpoint) SetPhoneNumber(v string) {
+	o.PhoneNumber = v
+}
+
+func (o PhoneEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o PhoneEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["phoneNumber"] = o.PhoneNumber
+	return toSerialize, nil
+}
+
+type NullablePhoneEndpoint struct {
+	value *PhoneEndpoint
+	isSet bool
+}
+
+func (v NullablePhoneEndpoint) Get() *PhoneEndpoint {
+	return v.value
+}
+
+func (v *NullablePhoneEndpoint) Set(val *PhoneEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePhoneEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePhoneEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePhoneEndpoint(val *PhoneEndpoint) *NullablePhoneEndpoint {
+	return &NullablePhoneEndpoint{value: val, isSet: true}
+}
+
+func (v NullablePhoneEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePhoneEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/platform.go b/pkg/infobip/models/voice/platform.go
new file mode 100644
index 0000000..ce57df1
--- /dev/null
+++ b/pkg/infobip/models/voice/platform.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Platform type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Platform{}
+
+// Platform Platform options. For more details, see [documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management).
+type Platform struct {
+	// Required to use entity in a send request for outbound traffic. Returned in notification events. For more details, see [documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management).
+	EntityId *string
+	// Required for application use in a send request for outbound traffic. Returned in notification events. For more details, see [documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management).
+	ApplicationId *string
+}
+
+// NewPlatform instantiates a new Platform object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPlatform() *Platform {
+	this := Platform{}
+	return &this
+}
+
+// NewPlatformWithDefaults instantiates a new Platform object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPlatformWithDefaults() *Platform {
+	this := Platform{}
+
+	return &this
+}
+
+// GetEntityId returns the EntityId field value if set, zero value otherwise.
+func (o *Platform) GetEntityId() string {
+	if o == nil || IsNil(o.EntityId) {
+		var ret string
+		return ret
+	}
+	return *o.EntityId
+}
+
+// GetEntityIdOk returns a tuple with the EntityId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Platform) GetEntityIdOk() (*string, bool) {
+	if o == nil || IsNil(o.EntityId) {
+		return nil, false
+	}
+	return o.EntityId, true
+}
+
+// HasEntityId returns a boolean if a field has been set.
+func (o *Platform) HasEntityId() bool {
+	if o != nil && !IsNil(o.EntityId) {
+		return true
+	}
+
+	return false
+}
+
+// SetEntityId gets a reference to the given string and assigns it to the EntityId field.
+func (o *Platform) SetEntityId(v string) {
+	o.EntityId = &v
+}
+
+// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
+func (o *Platform) GetApplicationId() string {
+	if o == nil || IsNil(o.ApplicationId) {
+		var ret string
+		return ret
+	}
+	return *o.ApplicationId
+}
+
+// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Platform) GetApplicationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ApplicationId) {
+		return nil, false
+	}
+	return o.ApplicationId, true
+}
+
+// HasApplicationId returns a boolean if a field has been set.
+func (o *Platform) HasApplicationId() bool {
+	if o != nil && !IsNil(o.ApplicationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
+func (o *Platform) SetApplicationId(v string) {
+	o.ApplicationId = &v
+}
+
+func (o Platform) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Platform) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.EntityId) {
+		toSerialize["entityId"] = o.EntityId
+	}
+	if !IsNil(o.ApplicationId) {
+		toSerialize["applicationId"] = o.ApplicationId
+	}
+	return toSerialize, nil
+}
+
+type NullablePlatform struct {
+	value *Platform
+	isSet bool
+}
+
+func (v NullablePlatform) Get() *Platform {
+	return v.value
+}
+
+func (v *NullablePlatform) Set(val *Platform) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePlatform) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePlatform) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePlatform(val *Platform) *NullablePlatform {
+	return &NullablePlatform{value: val, isSet: true}
+}
+
+func (v NullablePlatform) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePlatform) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/play.go b/pkg/infobip/models/voice/play.go
new file mode 100644
index 0000000..e357ff4
--- /dev/null
+++ b/pkg/infobip/models/voice/play.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Play type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Play{}
+
+// Play Play action performs playback of audio provided by the client’s URL. Supported formats of the provided file are aac, aiff, m4a, mp2, mp3, mp4 (audio only), ogg, wav and wma. Our platform needs to have permission to make GET and HEAD HTTP requests on the provided URL. Standard http ports (like 80, 8080, etc.) are advised.
+type Play struct {
+	// Audio file URL.
+	PlayFromUrl string
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Play Play
+
+// NewPlay instantiates a new Play object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPlay(playFromUrl string) *Play {
+	this := Play{}
+	this.PlayFromUrl = playFromUrl
+	return &this
+}
+
+// NewPlayWithDefaults instantiates a new Play object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPlayWithDefaults() *Play {
+	this := Play{}
+
+	return &this
+}
+
+// GetPlayFromUrl returns the PlayFromUrl field value
+func (o *Play) GetPlayFromUrl() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PlayFromUrl
+}
+
+// GetPlayFromUrlOk returns a tuple with the PlayFromUrl field value
+// and a boolean to check if the value has been set.
+func (o *Play) GetPlayFromUrlOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PlayFromUrl, true
+}
+
+// SetPlayFromUrl sets field value
+func (o *Play) SetPlayFromUrl(v string) {
+	o.PlayFromUrl = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Play) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Play) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Play) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Play) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Play) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Play) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["playFromUrl"] = o.PlayFromUrl
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullablePlay struct {
+	value *Play
+	isSet bool
+}
+
+func (v NullablePlay) Get() *Play {
+	return v.value
+}
+
+func (v *NullablePlay) Set(val *Play) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePlay) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePlay) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePlay(val *Play) *NullablePlay {
+	return &NullablePlay{value: val, isSet: true}
+}
+
+func (v NullablePlay) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePlay) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/play_content.go b/pkg/infobip/models/voice/play_content.go
new file mode 100644
index 0000000..22a069e
--- /dev/null
+++ b/pkg/infobip/models/voice/play_content.go
@@ -0,0 +1,198 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// PlayContent struct for PlayContent
+type PlayContent struct {
+	FilePlayContent      *FilePlayContent
+	RecordingPlayContent *RecordingPlayContent
+	TextPlayContent      *TextPlayContent
+	UrlPlayContent       *UrlPlayContent
+}
+
+// FilePlayContentAsPlayContent is a convenience function that returns FilePlayContent wrapped in PlayContent
+func FilePlayContentAsPlayContent(v *FilePlayContent) PlayContent {
+	return PlayContent{
+		FilePlayContent: v,
+	}
+}
+
+// RecordingPlayContentAsPlayContent is a convenience function that returns RecordingPlayContent wrapped in PlayContent
+func RecordingPlayContentAsPlayContent(v *RecordingPlayContent) PlayContent {
+	return PlayContent{
+		RecordingPlayContent: v,
+	}
+}
+
+// TextPlayContentAsPlayContent is a convenience function that returns TextPlayContent wrapped in PlayContent
+func TextPlayContentAsPlayContent(v *TextPlayContent) PlayContent {
+	return PlayContent{
+		TextPlayContent: v,
+	}
+}
+
+// UrlPlayContentAsPlayContent is a convenience function that returns UrlPlayContent wrapped in PlayContent
+func UrlPlayContentAsPlayContent(v *UrlPlayContent) PlayContent {
+	return PlayContent{
+		UrlPlayContent: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *PlayContent) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'FILE'
+	if jsonDict["type"] == "FILE" {
+		// try to unmarshal JSON data into FilePlayContent
+		err = json.Unmarshal(data, &dst.FilePlayContent)
+		if err == nil {
+			jsonFilePlayContent, _ := json.Marshal(dst.FilePlayContent)
+			if string(jsonFilePlayContent) == "{}" { // empty struct
+				dst.FilePlayContent = nil
+			} else {
+				return nil // data stored in dst.FilePlayContent, return on the first match
+			}
+		} else {
+			dst.FilePlayContent = nil
+		}
+	}
+	// check if the discriminator value is 'RECORDING'
+	if jsonDict["type"] == "RECORDING" {
+		// try to unmarshal JSON data into RecordingPlayContent
+		err = json.Unmarshal(data, &dst.RecordingPlayContent)
+		if err == nil {
+			jsonRecordingPlayContent, _ := json.Marshal(dst.RecordingPlayContent)
+			if string(jsonRecordingPlayContent) == "{}" { // empty struct
+				dst.RecordingPlayContent = nil
+			} else {
+				return nil // data stored in dst.RecordingPlayContent, return on the first match
+			}
+		} else {
+			dst.RecordingPlayContent = nil
+		}
+	}
+	// check if the discriminator value is 'TEXT'
+	if jsonDict["type"] == "TEXT" {
+		// try to unmarshal JSON data into TextPlayContent
+		err = json.Unmarshal(data, &dst.TextPlayContent)
+		if err == nil {
+			jsonTextPlayContent, _ := json.Marshal(dst.TextPlayContent)
+			if string(jsonTextPlayContent) == "{}" { // empty struct
+				dst.TextPlayContent = nil
+			} else {
+				return nil // data stored in dst.TextPlayContent, return on the first match
+			}
+		} else {
+			dst.TextPlayContent = nil
+		}
+	}
+	// check if the discriminator value is 'URL'
+	if jsonDict["type"] == "URL" {
+		// try to unmarshal JSON data into UrlPlayContent
+		err = json.Unmarshal(data, &dst.UrlPlayContent)
+		if err == nil {
+			jsonUrlPlayContent, _ := json.Marshal(dst.UrlPlayContent)
+			if string(jsonUrlPlayContent) == "{}" { // empty struct
+				dst.UrlPlayContent = nil
+			} else {
+				return nil // data stored in dst.UrlPlayContent, return on the first match
+			}
+		} else {
+			dst.UrlPlayContent = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(PlayContent)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src PlayContent) MarshalJSON() ([]byte, error) {
+	if src.FilePlayContent != nil {
+		return json.Marshal(&src.FilePlayContent)
+	}
+	if src.RecordingPlayContent != nil {
+		return json.Marshal(&src.RecordingPlayContent)
+	}
+	if src.TextPlayContent != nil {
+		return json.Marshal(&src.TextPlayContent)
+	}
+	if src.UrlPlayContent != nil {
+		return json.Marshal(&src.UrlPlayContent)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *PlayContent) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.FilePlayContent != nil {
+		return obj.FilePlayContent
+	}
+	if obj.RecordingPlayContent != nil {
+		return obj.RecordingPlayContent
+	}
+	if obj.TextPlayContent != nil {
+		return obj.TextPlayContent
+	}
+	if obj.UrlPlayContent != nil {
+		return obj.UrlPlayContent
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullablePlayContent struct {
+	value *PlayContent
+	isSet bool
+}
+
+func (v NullablePlayContent) Get() *PlayContent {
+	return v.value
+}
+
+func (v *NullablePlayContent) Set(val *PlayContent) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePlayContent) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePlayContent) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePlayContent(val *PlayContent) *NullablePlayContent {
+	return &NullablePlayContent{value: val, isSet: true}
+}
+
+func (v NullablePlayContent) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePlayContent) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/play_content_type.go b/pkg/infobip/models/voice/play_content_type.go
new file mode 100644
index 0000000..56768e6
--- /dev/null
+++ b/pkg/infobip/models/voice/play_content_type.go
@@ -0,0 +1,114 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// PlayContentType the model 'PlayContentType'
+type PlayContentType string
+
+// List of PlayContentType
+const (
+	PLAYCONTENTTYPE_FILE      PlayContentType = "FILE"
+	PLAYCONTENTTYPE_URL       PlayContentType = "URL"
+	PLAYCONTENTTYPE_RECORDING PlayContentType = "RECORDING"
+	PLAYCONTENTTYPE_TEXT      PlayContentType = "TEXT"
+)
+
+// All allowed values of PlayContentType enum
+var AllowedPlayContentTypeEnumValues = []PlayContentType{
+	"FILE",
+	"URL",
+	"RECORDING",
+	"TEXT",
+}
+
+func (v *PlayContentType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := PlayContentType(value)
+	for _, existing := range AllowedPlayContentTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid PlayContentType", value)
+}
+
+// NewPlayContentTypeFromValue returns a pointer to a valid PlayContentType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewPlayContentTypeFromValue(v string) (*PlayContentType, error) {
+	ev := PlayContentType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for PlayContentType: valid values are %v", v, AllowedPlayContentTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v PlayContentType) IsValid() bool {
+	for _, existing := range AllowedPlayContentTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to PlayContentType value
+func (v PlayContentType) Ptr() *PlayContentType {
+	return &v
+}
+
+type NullablePlayContentType struct {
+	value *PlayContentType
+	isSet bool
+}
+
+func (v NullablePlayContentType) Get() *PlayContentType {
+	return v.value
+}
+
+func (v *NullablePlayContentType) Set(val *PlayContentType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePlayContentType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePlayContentType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePlayContentType(val *PlayContentType) *NullablePlayContentType {
+	return &NullablePlayContentType{value: val, isSet: true}
+}
+
+func (v NullablePlayContentType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePlayContentType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/play_from_recording.go b/pkg/infobip/models/voice/play_from_recording.go
new file mode 100644
index 0000000..fdfd3ec
--- /dev/null
+++ b/pkg/infobip/models/voice/play_from_recording.go
@@ -0,0 +1,159 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the PlayFromRecording type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &PlayFromRecording{}
+
+// PlayFromRecording Play from Recording Action plays audio recorded from the current or some other call.
+type PlayFromRecording struct {
+	// Can be null (play last recorded audio from the current call), number (play the recording passed index) or text (play recording with identifier - current or previous call)
+	PlayFromRecording string
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _PlayFromRecording PlayFromRecording
+
+// NewPlayFromRecording instantiates a new PlayFromRecording object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPlayFromRecording(playFromRecording string) *PlayFromRecording {
+	this := PlayFromRecording{}
+	this.PlayFromRecording = playFromRecording
+	return &this
+}
+
+// NewPlayFromRecordingWithDefaults instantiates a new PlayFromRecording object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPlayFromRecordingWithDefaults() *PlayFromRecording {
+	this := PlayFromRecording{}
+
+	return &this
+}
+
+// GetPlayFromRecording returns the PlayFromRecording field value
+func (o *PlayFromRecording) GetPlayFromRecording() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PlayFromRecording
+}
+
+// GetPlayFromRecordingOk returns a tuple with the PlayFromRecording field value
+// and a boolean to check if the value has been set.
+func (o *PlayFromRecording) GetPlayFromRecordingOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PlayFromRecording, true
+}
+
+// SetPlayFromRecording sets field value
+func (o *PlayFromRecording) SetPlayFromRecording(v string) {
+	o.PlayFromRecording = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *PlayFromRecording) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PlayFromRecording) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *PlayFromRecording) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *PlayFromRecording) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o PlayFromRecording) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o PlayFromRecording) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["playFromRecording"] = o.PlayFromRecording
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullablePlayFromRecording struct {
+	value *PlayFromRecording
+	isSet bool
+}
+
+func (v NullablePlayFromRecording) Get() *PlayFromRecording {
+	return v.value
+}
+
+func (v *NullablePlayFromRecording) Set(val *PlayFromRecording) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePlayFromRecording) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePlayFromRecording) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePlayFromRecording(val *PlayFromRecording) *NullablePlayFromRecording {
+	return &NullablePlayFromRecording{value: val, isSet: true}
+}
+
+func (v NullablePlayFromRecording) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePlayFromRecording) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/play_request.go b/pkg/infobip/models/voice/play_request.go
new file mode 100644
index 0000000..f5f4db9
--- /dev/null
+++ b/pkg/infobip/models/voice/play_request.go
@@ -0,0 +1,305 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the PlayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &PlayRequest{}
+
+// PlayRequest Call play request.
+type PlayRequest struct {
+	// Number of times the file will be played.
+	LoopCount *int32
+	// The duration, in milliseconds, of the file to be played. If timeout is not defined, the file will be played until it ends.
+	Timeout *int64
+	// The starting point, in milliseconds, from which the file will be played. If offset is not defined, the file will be played from its beginning.
+	Offset  *int64
+	Content PlayContent
+	StopOn  *Termination
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+}
+
+type _PlayRequest PlayRequest
+
+// NewPlayRequest instantiates a new PlayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPlayRequest(content PlayContent) *PlayRequest {
+	this := PlayRequest{}
+	this.Content = content
+	return &this
+}
+
+// NewPlayRequestWithDefaults instantiates a new PlayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPlayRequestWithDefaults() *PlayRequest {
+	this := PlayRequest{}
+
+	return &this
+}
+
+// GetLoopCount returns the LoopCount field value if set, zero value otherwise.
+func (o *PlayRequest) GetLoopCount() int32 {
+	if o == nil || IsNil(o.LoopCount) {
+		var ret int32
+		return ret
+	}
+	return *o.LoopCount
+}
+
+// GetLoopCountOk returns a tuple with the LoopCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PlayRequest) GetLoopCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.LoopCount) {
+		return nil, false
+	}
+	return o.LoopCount, true
+}
+
+// HasLoopCount returns a boolean if a field has been set.
+func (o *PlayRequest) HasLoopCount() bool {
+	if o != nil && !IsNil(o.LoopCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetLoopCount gets a reference to the given int32 and assigns it to the LoopCount field.
+func (o *PlayRequest) SetLoopCount(v int32) {
+	o.LoopCount = &v
+}
+
+// GetTimeout returns the Timeout field value if set, zero value otherwise.
+func (o *PlayRequest) GetTimeout() int64 {
+	if o == nil || IsNil(o.Timeout) {
+		var ret int64
+		return ret
+	}
+	return *o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PlayRequest) GetTimeoutOk() (*int64, bool) {
+	if o == nil || IsNil(o.Timeout) {
+		return nil, false
+	}
+	return o.Timeout, true
+}
+
+// HasTimeout returns a boolean if a field has been set.
+func (o *PlayRequest) HasTimeout() bool {
+	if o != nil && !IsNil(o.Timeout) {
+		return true
+	}
+
+	return false
+}
+
+// SetTimeout gets a reference to the given int64 and assigns it to the Timeout field.
+func (o *PlayRequest) SetTimeout(v int64) {
+	o.Timeout = &v
+}
+
+// GetOffset returns the Offset field value if set, zero value otherwise.
+func (o *PlayRequest) GetOffset() int64 {
+	if o == nil || IsNil(o.Offset) {
+		var ret int64
+		return ret
+	}
+	return *o.Offset
+}
+
+// GetOffsetOk returns a tuple with the Offset field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PlayRequest) GetOffsetOk() (*int64, bool) {
+	if o == nil || IsNil(o.Offset) {
+		return nil, false
+	}
+	return o.Offset, true
+}
+
+// HasOffset returns a boolean if a field has been set.
+func (o *PlayRequest) HasOffset() bool {
+	if o != nil && !IsNil(o.Offset) {
+		return true
+	}
+
+	return false
+}
+
+// SetOffset gets a reference to the given int64 and assigns it to the Offset field.
+func (o *PlayRequest) SetOffset(v int64) {
+	o.Offset = &v
+}
+
+// GetContent returns the Content field value
+func (o *PlayRequest) GetContent() PlayContent {
+	if o == nil {
+		var ret PlayContent
+		return ret
+	}
+
+	return o.Content
+}
+
+// GetContentOk returns a tuple with the Content field value
+// and a boolean to check if the value has been set.
+func (o *PlayRequest) GetContentOk() (*PlayContent, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Content, true
+}
+
+// SetContent sets field value
+func (o *PlayRequest) SetContent(v PlayContent) {
+	o.Content = v
+}
+
+// GetStopOn returns the StopOn field value if set, zero value otherwise.
+func (o *PlayRequest) GetStopOn() Termination {
+	if o == nil || IsNil(o.StopOn) {
+		var ret Termination
+		return ret
+	}
+	return *o.StopOn
+}
+
+// GetStopOnOk returns a tuple with the StopOn field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PlayRequest) GetStopOnOk() (*Termination, bool) {
+	if o == nil || IsNil(o.StopOn) {
+		return nil, false
+	}
+	return o.StopOn, true
+}
+
+// HasStopOn returns a boolean if a field has been set.
+func (o *PlayRequest) HasStopOn() bool {
+	if o != nil && !IsNil(o.StopOn) {
+		return true
+	}
+
+	return false
+}
+
+// SetStopOn gets a reference to the given Termination and assigns it to the StopOn field.
+func (o *PlayRequest) SetStopOn(v Termination) {
+	o.StopOn = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *PlayRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PlayRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *PlayRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *PlayRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o PlayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o PlayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.LoopCount) {
+		toSerialize["loopCount"] = o.LoopCount
+	}
+	if !IsNil(o.Timeout) {
+		toSerialize["timeout"] = o.Timeout
+	}
+	if !IsNil(o.Offset) {
+		toSerialize["offset"] = o.Offset
+	}
+	toSerialize["content"] = o.Content
+	if !IsNil(o.StopOn) {
+		toSerialize["stopOn"] = o.StopOn
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullablePlayRequest struct {
+	value *PlayRequest
+	isSet bool
+}
+
+func (v NullablePlayRequest) Get() *PlayRequest {
+	return v.value
+}
+
+func (v *NullablePlayRequest) Set(val *PlayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePlayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePlayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePlayRequest(val *PlayRequest) *NullablePlayRequest {
+	return &NullablePlayRequest{value: val, isSet: true}
+}
+
+func (v NullablePlayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePlayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/pre_answer_request.go b/pkg/infobip/models/voice/pre_answer_request.go
new file mode 100644
index 0000000..f2faeaa
--- /dev/null
+++ b/pkg/infobip/models/voice/pre_answer_request.go
@@ -0,0 +1,170 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the PreAnswerRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &PreAnswerRequest{}
+
+// PreAnswerRequest struct for PreAnswerRequest
+type PreAnswerRequest struct {
+	// Indicates whether to play a ringing sound on the call after pre-answering it.
+	Ringing *bool
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+}
+
+// NewPreAnswerRequest instantiates a new PreAnswerRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPreAnswerRequest() *PreAnswerRequest {
+	this := PreAnswerRequest{}
+	var ringing bool = false
+	this.Ringing = &ringing
+	return &this
+}
+
+// NewPreAnswerRequestWithDefaults instantiates a new PreAnswerRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPreAnswerRequestWithDefaults() *PreAnswerRequest {
+	this := PreAnswerRequest{}
+
+	var ringing bool = false
+	this.Ringing = &ringing
+	return &this
+}
+
+// GetRinging returns the Ringing field value if set, zero value otherwise.
+func (o *PreAnswerRequest) GetRinging() bool {
+	if o == nil || IsNil(o.Ringing) {
+		var ret bool
+		return ret
+	}
+	return *o.Ringing
+}
+
+// GetRingingOk returns a tuple with the Ringing field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PreAnswerRequest) GetRingingOk() (*bool, bool) {
+	if o == nil || IsNil(o.Ringing) {
+		return nil, false
+	}
+	return o.Ringing, true
+}
+
+// HasRinging returns a boolean if a field has been set.
+func (o *PreAnswerRequest) HasRinging() bool {
+	if o != nil && !IsNil(o.Ringing) {
+		return true
+	}
+
+	return false
+}
+
+// SetRinging gets a reference to the given bool and assigns it to the Ringing field.
+func (o *PreAnswerRequest) SetRinging(v bool) {
+	o.Ringing = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *PreAnswerRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *PreAnswerRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *PreAnswerRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *PreAnswerRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o PreAnswerRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o PreAnswerRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Ringing) {
+		toSerialize["ringing"] = o.Ringing
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullablePreAnswerRequest struct {
+	value *PreAnswerRequest
+	isSet bool
+}
+
+func (v NullablePreAnswerRequest) Get() *PreAnswerRequest {
+	return v.value
+}
+
+func (v *NullablePreAnswerRequest) Set(val *PreAnswerRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePreAnswerRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePreAnswerRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePreAnswerRequest(val *PreAnswerRequest) *NullablePreAnswerRequest {
+	return &NullablePreAnswerRequest{value: val, isSet: true}
+}
+
+func (v NullablePreAnswerRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePreAnswerRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/price.go b/pkg/infobip/models/voice/price.go
new file mode 100644
index 0000000..8b5fe2e
--- /dev/null
+++ b/pkg/infobip/models/voice/price.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Price type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Price{}
+
+// Price Sent voice message price.
+type Price struct {
+	// Price per one second of the voice message.
+	PricePerSecond *float32
+	// The currency in which the price is expressed.
+	Currency *string
+}
+
+// NewPrice instantiates a new Price object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewPrice() *Price {
+	this := Price{}
+	return &this
+}
+
+// NewPriceWithDefaults instantiates a new Price object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewPriceWithDefaults() *Price {
+	this := Price{}
+
+	return &this
+}
+
+// GetPricePerSecond returns the PricePerSecond field value if set, zero value otherwise.
+func (o *Price) GetPricePerSecond() float32 {
+	if o == nil || IsNil(o.PricePerSecond) {
+		var ret float32
+		return ret
+	}
+	return *o.PricePerSecond
+}
+
+// GetPricePerSecondOk returns a tuple with the PricePerSecond field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Price) GetPricePerSecondOk() (*float32, bool) {
+	if o == nil || IsNil(o.PricePerSecond) {
+		return nil, false
+	}
+	return o.PricePerSecond, true
+}
+
+// HasPricePerSecond returns a boolean if a field has been set.
+func (o *Price) HasPricePerSecond() bool {
+	if o != nil && !IsNil(o.PricePerSecond) {
+		return true
+	}
+
+	return false
+}
+
+// SetPricePerSecond gets a reference to the given float32 and assigns it to the PricePerSecond field.
+func (o *Price) SetPricePerSecond(v float32) {
+	o.PricePerSecond = &v
+}
+
+// GetCurrency returns the Currency field value if set, zero value otherwise.
+func (o *Price) GetCurrency() string {
+	if o == nil || IsNil(o.Currency) {
+		var ret string
+		return ret
+	}
+	return *o.Currency
+}
+
+// GetCurrencyOk returns a tuple with the Currency field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Price) GetCurrencyOk() (*string, bool) {
+	if o == nil || IsNil(o.Currency) {
+		return nil, false
+	}
+	return o.Currency, true
+}
+
+// HasCurrency returns a boolean if a field has been set.
+func (o *Price) HasCurrency() bool {
+	if o != nil && !IsNil(o.Currency) {
+		return true
+	}
+
+	return false
+}
+
+// SetCurrency gets a reference to the given string and assigns it to the Currency field.
+func (o *Price) SetCurrency(v string) {
+	o.Currency = &v
+}
+
+func (o Price) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Price) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.PricePerSecond) {
+		toSerialize["pricePerSecond"] = o.PricePerSecond
+	}
+	if !IsNil(o.Currency) {
+		toSerialize["currency"] = o.Currency
+	}
+	return toSerialize, nil
+}
+
+type NullablePrice struct {
+	value *Price
+	isSet bool
+}
+
+func (v NullablePrice) Get() *Price {
+	return v.value
+}
+
+func (v *NullablePrice) Set(val *Price) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullablePrice) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullablePrice) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullablePrice(val *Price) *NullablePrice {
+	return &NullablePrice{value: val, isSet: true}
+}
+
+func (v NullablePrice) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullablePrice) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/provider.go b/pkg/infobip/models/voice/provider.go
new file mode 100644
index 0000000..ad20316
--- /dev/null
+++ b/pkg/infobip/models/voice/provider.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// Provider struct for Provider
+type Provider struct {
+	CiscoWebexProvider   *CiscoWebexProvider
+	FreshworksProvider   *FreshworksProvider
+	GenesysCloudProvider *GenesysCloudProvider
+}
+
+// CiscoWebexProviderAsProvider is a convenience function that returns CiscoWebexProvider wrapped in Provider
+func CiscoWebexProviderAsProvider(v *CiscoWebexProvider) Provider {
+	return Provider{
+		CiscoWebexProvider: v,
+	}
+}
+
+// FreshworksProviderAsProvider is a convenience function that returns FreshworksProvider wrapped in Provider
+func FreshworksProviderAsProvider(v *FreshworksProvider) Provider {
+	return Provider{
+		FreshworksProvider: v,
+	}
+}
+
+// GenesysCloudProviderAsProvider is a convenience function that returns GenesysCloudProvider wrapped in Provider
+func GenesysCloudProviderAsProvider(v *GenesysCloudProvider) Provider {
+	return Provider{
+		GenesysCloudProvider: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *Provider) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'CISCO_WEBEX'
+	if jsonDict["type"] == "CISCO_WEBEX" {
+		// try to unmarshal JSON data into CiscoWebexProvider
+		err = json.Unmarshal(data, &dst.CiscoWebexProvider)
+		if err == nil {
+			jsonCiscoWebexProvider, _ := json.Marshal(dst.CiscoWebexProvider)
+			if string(jsonCiscoWebexProvider) == "{}" { // empty struct
+				dst.CiscoWebexProvider = nil
+			} else {
+				return nil // data stored in dst.CiscoWebexProvider, return on the first match
+			}
+		} else {
+			dst.CiscoWebexProvider = nil
+		}
+	}
+	// check if the discriminator value is 'FRESHWORKS'
+	if jsonDict["type"] == "FRESHWORKS" {
+		// try to unmarshal JSON data into FreshworksProvider
+		err = json.Unmarshal(data, &dst.FreshworksProvider)
+		if err == nil {
+			jsonFreshworksProvider, _ := json.Marshal(dst.FreshworksProvider)
+			if string(jsonFreshworksProvider) == "{}" { // empty struct
+				dst.FreshworksProvider = nil
+			} else {
+				return nil // data stored in dst.FreshworksProvider, return on the first match
+			}
+		} else {
+			dst.FreshworksProvider = nil
+		}
+	}
+	// check if the discriminator value is 'GENESYS_CLOUD'
+	if jsonDict["type"] == "GENESYS_CLOUD" {
+		// try to unmarshal JSON data into GenesysCloudProvider
+		err = json.Unmarshal(data, &dst.GenesysCloudProvider)
+		if err == nil {
+			jsonGenesysCloudProvider, _ := json.Marshal(dst.GenesysCloudProvider)
+			if string(jsonGenesysCloudProvider) == "{}" { // empty struct
+				dst.GenesysCloudProvider = nil
+			} else {
+				return nil // data stored in dst.GenesysCloudProvider, return on the first match
+			}
+		} else {
+			dst.GenesysCloudProvider = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(Provider)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src Provider) MarshalJSON() ([]byte, error) {
+	if src.CiscoWebexProvider != nil {
+		return json.Marshal(&src.CiscoWebexProvider)
+	}
+	if src.FreshworksProvider != nil {
+		return json.Marshal(&src.FreshworksProvider)
+	}
+	if src.GenesysCloudProvider != nil {
+		return json.Marshal(&src.GenesysCloudProvider)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *Provider) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CiscoWebexProvider != nil {
+		return obj.CiscoWebexProvider
+	}
+	if obj.FreshworksProvider != nil {
+		return obj.FreshworksProvider
+	}
+	if obj.GenesysCloudProvider != nil {
+		return obj.GenesysCloudProvider
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableProvider struct {
+	value *Provider
+	isSet bool
+}
+
+func (v NullableProvider) Get() *Provider {
+	return v.value
+}
+
+func (v *NullableProvider) Set(val *Provider) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableProvider) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableProvider) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableProvider(val *Provider) *NullableProvider {
+	return &NullableProvider{value: val, isSet: true}
+}
+
+func (v NullableProvider) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableProvider) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/provider_sip_trunk_request.go b/pkg/infobip/models/voice/provider_sip_trunk_request.go
new file mode 100644
index 0000000..e120b74
--- /dev/null
+++ b/pkg/infobip/models/voice/provider_sip_trunk_request.go
@@ -0,0 +1,311 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ProviderSipTrunkRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ProviderSipTrunkRequest{}
+
+// ProviderSipTrunkRequest struct for ProviderSipTrunkRequest
+type ProviderSipTrunkRequest struct {
+	Type                      SipTrunkType
+	Name                      string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	InternationalCallsAllowed *bool
+	ChannelLimit              int32
+	BillingPackage            BillingPackage
+	Provider                  Provider
+}
+
+type _ProviderSipTrunkRequest ProviderSipTrunkRequest
+
+// NewProviderSipTrunkRequest instantiates a new ProviderSipTrunkRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewProviderSipTrunkRequest(provider Provider) *ProviderSipTrunkRequest {
+	this := ProviderSipTrunkRequest{}
+	this.Type = "PROVIDER"
+	this.Provider = provider
+	return &this
+}
+
+// NewProviderSipTrunkRequestWithDefaults instantiates a new ProviderSipTrunkRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewProviderSipTrunkRequestWithDefaults() *ProviderSipTrunkRequest {
+	this := ProviderSipTrunkRequest{}
+	this.Type = "PROVIDER"
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *ProviderSipTrunkRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *ProviderSipTrunkRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *ProviderSipTrunkRequest) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *ProviderSipTrunkRequest) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *ProviderSipTrunkRequest) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *ProviderSipTrunkRequest) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *ProviderSipTrunkRequest) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *ProviderSipTrunkRequest) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *ProviderSipTrunkRequest) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *ProviderSipTrunkRequest) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *ProviderSipTrunkRequest) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value
+func (o *ProviderSipTrunkRequest) GetChannelLimit() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetChannelLimitOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ChannelLimit, true
+}
+
+// SetChannelLimit sets field value
+func (o *ProviderSipTrunkRequest) SetChannelLimit(v int32) {
+	o.ChannelLimit = v
+}
+
+// GetBillingPackage returns the BillingPackage field value
+func (o *ProviderSipTrunkRequest) GetBillingPackage() BillingPackage {
+	if o == nil {
+		var ret BillingPackage
+		return ret
+	}
+
+	return o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.BillingPackage, true
+}
+
+// SetBillingPackage sets field value
+func (o *ProviderSipTrunkRequest) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = v
+}
+
+// GetProvider returns the Provider field value
+func (o *ProviderSipTrunkRequest) GetProvider() Provider {
+	if o == nil {
+		var ret Provider
+		return ret
+	}
+
+	return o.Provider
+}
+
+// GetProviderOk returns a tuple with the Provider field value
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkRequest) GetProviderOk() (*Provider, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Provider, true
+}
+
+// SetProvider sets field value
+func (o *ProviderSipTrunkRequest) SetProvider(v Provider) {
+	o.Provider = v
+}
+
+func (o ProviderSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ProviderSipTrunkRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	toSerialize["channelLimit"] = o.ChannelLimit
+	toSerialize["billingPackage"] = o.BillingPackage
+	toSerialize["provider"] = o.Provider
+	return toSerialize, nil
+}
+
+type NullableProviderSipTrunkRequest struct {
+	value *ProviderSipTrunkRequest
+	isSet bool
+}
+
+func (v NullableProviderSipTrunkRequest) Get() *ProviderSipTrunkRequest {
+	return v.value
+}
+
+func (v *NullableProviderSipTrunkRequest) Set(val *ProviderSipTrunkRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableProviderSipTrunkRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableProviderSipTrunkRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableProviderSipTrunkRequest(val *ProviderSipTrunkRequest) *NullableProviderSipTrunkRequest {
+	return &NullableProviderSipTrunkRequest{value: val, isSet: true}
+}
+
+func (v NullableProviderSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableProviderSipTrunkRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/provider_sip_trunk_response.go b/pkg/infobip/models/voice/provider_sip_trunk_response.go
new file mode 100644
index 0000000..cb7ec07
--- /dev/null
+++ b/pkg/infobip/models/voice/provider_sip_trunk_response.go
@@ -0,0 +1,636 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ProviderSipTrunkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ProviderSipTrunkResponse{}
+
+// ProviderSipTrunkResponse struct for ProviderSipTrunkResponse
+type ProviderSipTrunkResponse struct {
+	Id                        *string
+	Type                      SipTrunkType
+	Name                      *string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	Codecs                    []AudioCodec
+	Dtmf                      *DtmfType
+	Fax                       *FaxType
+	NumberFormat              *NumberPresentationFormat
+	InternationalCallsAllowed *bool
+	ChannelLimit              *int32
+	Anonymization             *AnonymizationType
+	BillingPackage            *BillingPackage
+	SbcHosts                  *SbcHosts
+	SipOptions                *SipOptions
+	Provider                  *Provider
+}
+
+// NewProviderSipTrunkResponse instantiates a new ProviderSipTrunkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewProviderSipTrunkResponse() *ProviderSipTrunkResponse {
+	this := ProviderSipTrunkResponse{}
+	this.Type = "PROVIDER"
+	return &this
+}
+
+// NewProviderSipTrunkResponseWithDefaults instantiates a new ProviderSipTrunkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewProviderSipTrunkResponseWithDefaults() *ProviderSipTrunkResponse {
+	this := ProviderSipTrunkResponse{}
+	this.Type = "PROVIDER"
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *ProviderSipTrunkResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *ProviderSipTrunkResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *ProviderSipTrunkResponse) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *ProviderSipTrunkResponse) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *ProviderSipTrunkResponse) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *ProviderSipTrunkResponse) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *ProviderSipTrunkResponse) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *ProviderSipTrunkResponse) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *ProviderSipTrunkResponse) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetChannelLimit() int32 {
+	if o == nil || IsNil(o.ChannelLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetChannelLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChannelLimit) {
+		return nil, false
+	}
+	return o.ChannelLimit, true
+}
+
+// HasChannelLimit returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasChannelLimit() bool {
+	if o != nil && !IsNil(o.ChannelLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetChannelLimit gets a reference to the given int32 and assigns it to the ChannelLimit field.
+func (o *ProviderSipTrunkResponse) SetChannelLimit(v int32) {
+	o.ChannelLimit = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *ProviderSipTrunkResponse) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetBillingPackage returns the BillingPackage field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetBillingPackage() BillingPackage {
+	if o == nil || IsNil(o.BillingPackage) {
+		var ret BillingPackage
+		return ret
+	}
+	return *o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil || IsNil(o.BillingPackage) {
+		return nil, false
+	}
+	return o.BillingPackage, true
+}
+
+// HasBillingPackage returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasBillingPackage() bool {
+	if o != nil && !IsNil(o.BillingPackage) {
+		return true
+	}
+
+	return false
+}
+
+// SetBillingPackage gets a reference to the given BillingPackage and assigns it to the BillingPackage field.
+func (o *ProviderSipTrunkResponse) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = &v
+}
+
+// GetSbcHosts returns the SbcHosts field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetSbcHosts() SbcHosts {
+	if o == nil || IsNil(o.SbcHosts) {
+		var ret SbcHosts
+		return ret
+	}
+	return *o.SbcHosts
+}
+
+// GetSbcHostsOk returns a tuple with the SbcHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetSbcHostsOk() (*SbcHosts, bool) {
+	if o == nil || IsNil(o.SbcHosts) {
+		return nil, false
+	}
+	return o.SbcHosts, true
+}
+
+// HasSbcHosts returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasSbcHosts() bool {
+	if o != nil && !IsNil(o.SbcHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSbcHosts gets a reference to the given SbcHosts and assigns it to the SbcHosts field.
+func (o *ProviderSipTrunkResponse) SetSbcHosts(v SbcHosts) {
+	o.SbcHosts = &v
+}
+
+// GetSipOptions returns the SipOptions field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetSipOptions() SipOptions {
+	if o == nil || IsNil(o.SipOptions) {
+		var ret SipOptions
+		return ret
+	}
+	return *o.SipOptions
+}
+
+// GetSipOptionsOk returns a tuple with the SipOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetSipOptionsOk() (*SipOptions, bool) {
+	if o == nil || IsNil(o.SipOptions) {
+		return nil, false
+	}
+	return o.SipOptions, true
+}
+
+// HasSipOptions returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasSipOptions() bool {
+	if o != nil && !IsNil(o.SipOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipOptions gets a reference to the given SipOptions and assigns it to the SipOptions field.
+func (o *ProviderSipTrunkResponse) SetSipOptions(v SipOptions) {
+	o.SipOptions = &v
+}
+
+// GetProvider returns the Provider field value if set, zero value otherwise.
+func (o *ProviderSipTrunkResponse) GetProvider() Provider {
+	if o == nil || IsNil(o.Provider) {
+		var ret Provider
+		return ret
+	}
+	return *o.Provider
+}
+
+// GetProviderOk returns a tuple with the Provider field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *ProviderSipTrunkResponse) GetProviderOk() (*Provider, bool) {
+	if o == nil || IsNil(o.Provider) {
+		return nil, false
+	}
+	return o.Provider, true
+}
+
+// HasProvider returns a boolean if a field has been set.
+func (o *ProviderSipTrunkResponse) HasProvider() bool {
+	if o != nil && !IsNil(o.Provider) {
+		return true
+	}
+
+	return false
+}
+
+// SetProvider gets a reference to the given Provider and assigns it to the Provider field.
+func (o *ProviderSipTrunkResponse) SetProvider(v Provider) {
+	o.Provider = &v
+}
+
+func (o ProviderSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ProviderSipTrunkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	if !IsNil(o.ChannelLimit) {
+		toSerialize["channelLimit"] = o.ChannelLimit
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.BillingPackage) {
+		toSerialize["billingPackage"] = o.BillingPackage
+	}
+	if !IsNil(o.SbcHosts) {
+		toSerialize["sbcHosts"] = o.SbcHosts
+	}
+	if !IsNil(o.SipOptions) {
+		toSerialize["sipOptions"] = o.SipOptions
+	}
+	if !IsNil(o.Provider) {
+		toSerialize["provider"] = o.Provider
+	}
+	return toSerialize, nil
+}
+
+type NullableProviderSipTrunkResponse struct {
+	value *ProviderSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableProviderSipTrunkResponse) Get() *ProviderSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableProviderSipTrunkResponse) Set(val *ProviderSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableProviderSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableProviderSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableProviderSipTrunkResponse(val *ProviderSipTrunkResponse) *NullableProviderSipTrunkResponse {
+	return &NullableProviderSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableProviderSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableProviderSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/provider_trunk_type.go b/pkg/infobip/models/voice/provider_trunk_type.go
new file mode 100644
index 0000000..43d4e09
--- /dev/null
+++ b/pkg/infobip/models/voice/provider_trunk_type.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// ProviderTrunkType Provider type.
+type ProviderTrunkType string
+
+// List of ProviderTrunkType
+const (
+	PROVIDERTRUNKTYPE_FRESHWORKS    ProviderTrunkType = "FRESHWORKS"
+	PROVIDERTRUNKTYPE_GENESYS_CLOUD ProviderTrunkType = "GENESYS_CLOUD"
+	PROVIDERTRUNKTYPE_CISCO_WEBEX   ProviderTrunkType = "CISCO_WEBEX"
+)
+
+// All allowed values of ProviderTrunkType enum
+var AllowedProviderTrunkTypeEnumValues = []ProviderTrunkType{
+	"FRESHWORKS",
+	"GENESYS_CLOUD",
+	"CISCO_WEBEX",
+}
+
+func (v *ProviderTrunkType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := ProviderTrunkType(value)
+	for _, existing := range AllowedProviderTrunkTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid ProviderTrunkType", value)
+}
+
+// NewProviderTrunkTypeFromValue returns a pointer to a valid ProviderTrunkType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewProviderTrunkTypeFromValue(v string) (*ProviderTrunkType, error) {
+	ev := ProviderTrunkType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for ProviderTrunkType: valid values are %v", v, AllowedProviderTrunkTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v ProviderTrunkType) IsValid() bool {
+	for _, existing := range AllowedProviderTrunkTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to ProviderTrunkType value
+func (v ProviderTrunkType) Ptr() *ProviderTrunkType {
+	return &v
+}
+
+type NullableProviderTrunkType struct {
+	value *ProviderTrunkType
+	isSet bool
+}
+
+func (v NullableProviderTrunkType) Get() *ProviderTrunkType {
+	return v.value
+}
+
+func (v *NullableProviderTrunkType) Set(val *ProviderTrunkType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableProviderTrunkType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableProviderTrunkType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableProviderTrunkType(val *ProviderTrunkType) *NullableProviderTrunkType {
+	return &NullableProviderTrunkType{value: val, isSet: true}
+}
+
+func (v NullableProviderTrunkType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableProviderTrunkType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/record.go b/pkg/infobip/models/voice/record.go
new file mode 100644
index 0000000..e1637b0
--- /dev/null
+++ b/pkg/infobip/models/voice/record.go
@@ -0,0 +1,195 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Record type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Record{}
+
+// Record Record action records a portion of the call. The recording starts at the moment where the Record action is added in the IVR.
+type Record struct {
+	// The duration to record for in seconds; null for unlimited.
+	Record  int32
+	Options *RecordOptions
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Record Record
+
+// NewRecord instantiates a new Record object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecord(record int32) *Record {
+	this := Record{}
+	this.Record = record
+	return &this
+}
+
+// NewRecordWithDefaults instantiates a new Record object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordWithDefaults() *Record {
+	this := Record{}
+
+	return &this
+}
+
+// GetRecord returns the Record field value
+func (o *Record) GetRecord() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Record
+}
+
+// GetRecordOk returns a tuple with the Record field value
+// and a boolean to check if the value has been set.
+func (o *Record) GetRecordOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Record, true
+}
+
+// SetRecord sets field value
+func (o *Record) SetRecord(v int32) {
+	o.Record = v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *Record) GetOptions() RecordOptions {
+	if o == nil || IsNil(o.Options) {
+		var ret RecordOptions
+		return ret
+	}
+	return *o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Record) GetOptionsOk() (*RecordOptions, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *Record) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given RecordOptions and assigns it to the Options field.
+func (o *Record) SetOptions(v RecordOptions) {
+	o.Options = &v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Record) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Record) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Record) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Record) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Record) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Record) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["record"] = o.Record
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableRecord struct {
+	value *Record
+	isSet bool
+}
+
+func (v NullableRecord) Get() *Record {
+	return v.value
+}
+
+func (v *NullableRecord) Set(val *Record) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecord) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecord) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecord(val *Record) *NullableRecord {
+	return &NullableRecord{value: val, isSet: true}
+}
+
+func (v NullableRecord) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecord) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/record_options.go b/pkg/infobip/models/voice/record_options.go
new file mode 100644
index 0000000..1a14760
--- /dev/null
+++ b/pkg/infobip/models/voice/record_options.go
@@ -0,0 +1,240 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordOptions{}
+
+// RecordOptions struct for RecordOptions
+type RecordOptions struct {
+	// DTMF codes which should stop recording when input by the user.
+	EscapeDigits *string
+	// Flag indicating a beep sound should be played at the start of the recording.
+	Beep *bool
+	// The amount of silence to wait for before stopping the recording.
+	MaxSilence *int32
+	// The identifier for the recording. Identified recordings can be reused in Play from Recording. The parameter can be constructed using variables.
+	Identifier *string
+}
+
+// NewRecordOptions instantiates a new RecordOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecordOptions() *RecordOptions {
+	this := RecordOptions{}
+	return &this
+}
+
+// NewRecordOptionsWithDefaults instantiates a new RecordOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordOptionsWithDefaults() *RecordOptions {
+	this := RecordOptions{}
+
+	return &this
+}
+
+// GetEscapeDigits returns the EscapeDigits field value if set, zero value otherwise.
+func (o *RecordOptions) GetEscapeDigits() string {
+	if o == nil || IsNil(o.EscapeDigits) {
+		var ret string
+		return ret
+	}
+	return *o.EscapeDigits
+}
+
+// GetEscapeDigitsOk returns a tuple with the EscapeDigits field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordOptions) GetEscapeDigitsOk() (*string, bool) {
+	if o == nil || IsNil(o.EscapeDigits) {
+		return nil, false
+	}
+	return o.EscapeDigits, true
+}
+
+// HasEscapeDigits returns a boolean if a field has been set.
+func (o *RecordOptions) HasEscapeDigits() bool {
+	if o != nil && !IsNil(o.EscapeDigits) {
+		return true
+	}
+
+	return false
+}
+
+// SetEscapeDigits gets a reference to the given string and assigns it to the EscapeDigits field.
+func (o *RecordOptions) SetEscapeDigits(v string) {
+	o.EscapeDigits = &v
+}
+
+// GetBeep returns the Beep field value if set, zero value otherwise.
+func (o *RecordOptions) GetBeep() bool {
+	if o == nil || IsNil(o.Beep) {
+		var ret bool
+		return ret
+	}
+	return *o.Beep
+}
+
+// GetBeepOk returns a tuple with the Beep field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordOptions) GetBeepOk() (*bool, bool) {
+	if o == nil || IsNil(o.Beep) {
+		return nil, false
+	}
+	return o.Beep, true
+}
+
+// HasBeep returns a boolean if a field has been set.
+func (o *RecordOptions) HasBeep() bool {
+	if o != nil && !IsNil(o.Beep) {
+		return true
+	}
+
+	return false
+}
+
+// SetBeep gets a reference to the given bool and assigns it to the Beep field.
+func (o *RecordOptions) SetBeep(v bool) {
+	o.Beep = &v
+}
+
+// GetMaxSilence returns the MaxSilence field value if set, zero value otherwise.
+func (o *RecordOptions) GetMaxSilence() int32 {
+	if o == nil || IsNil(o.MaxSilence) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxSilence
+}
+
+// GetMaxSilenceOk returns a tuple with the MaxSilence field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordOptions) GetMaxSilenceOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxSilence) {
+		return nil, false
+	}
+	return o.MaxSilence, true
+}
+
+// HasMaxSilence returns a boolean if a field has been set.
+func (o *RecordOptions) HasMaxSilence() bool {
+	if o != nil && !IsNil(o.MaxSilence) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxSilence gets a reference to the given int32 and assigns it to the MaxSilence field.
+func (o *RecordOptions) SetMaxSilence(v int32) {
+	o.MaxSilence = &v
+}
+
+// GetIdentifier returns the Identifier field value if set, zero value otherwise.
+func (o *RecordOptions) GetIdentifier() string {
+	if o == nil || IsNil(o.Identifier) {
+		var ret string
+		return ret
+	}
+	return *o.Identifier
+}
+
+// GetIdentifierOk returns a tuple with the Identifier field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordOptions) GetIdentifierOk() (*string, bool) {
+	if o == nil || IsNil(o.Identifier) {
+		return nil, false
+	}
+	return o.Identifier, true
+}
+
+// HasIdentifier returns a boolean if a field has been set.
+func (o *RecordOptions) HasIdentifier() bool {
+	if o != nil && !IsNil(o.Identifier) {
+		return true
+	}
+
+	return false
+}
+
+// SetIdentifier gets a reference to the given string and assigns it to the Identifier field.
+func (o *RecordOptions) SetIdentifier(v string) {
+	o.Identifier = &v
+}
+
+func (o RecordOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.EscapeDigits) {
+		toSerialize["escapeDigits"] = o.EscapeDigits
+	}
+	if !IsNil(o.Beep) {
+		toSerialize["beep"] = o.Beep
+	}
+	if !IsNil(o.MaxSilence) {
+		toSerialize["maxSilence"] = o.MaxSilence
+	}
+	if !IsNil(o.Identifier) {
+		toSerialize["identifier"] = o.Identifier
+	}
+	return toSerialize, nil
+}
+
+type NullableRecordOptions struct {
+	value *RecordOptions
+	isSet bool
+}
+
+func (v NullableRecordOptions) Get() *RecordOptions {
+	return v.value
+}
+
+func (v *NullableRecordOptions) Set(val *RecordOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordOptions(val *RecordOptions) *NullableRecordOptions {
+	return &NullableRecordOptions{value: val, isSet: true}
+}
+
+func (v NullableRecordOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recorded_audio_files_response.go b/pkg/infobip/models/voice/recorded_audio_files_response.go
new file mode 100644
index 0000000..79c7471
--- /dev/null
+++ b/pkg/infobip/models/voice/recorded_audio_files_response.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordedAudioFilesResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordedAudioFilesResponse{}
+
+// RecordedAudioFilesResponse struct for RecordedAudioFilesResponse
+type RecordedAudioFilesResponse struct {
+	// Array of recorded files metadata, one for each recorded file.
+	Files []RecordedIvrFile
+}
+
+// NewRecordedAudioFilesResponse instantiates a new RecordedAudioFilesResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecordedAudioFilesResponse() *RecordedAudioFilesResponse {
+	this := RecordedAudioFilesResponse{}
+	return &this
+}
+
+// NewRecordedAudioFilesResponseWithDefaults instantiates a new RecordedAudioFilesResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordedAudioFilesResponseWithDefaults() *RecordedAudioFilesResponse {
+	this := RecordedAudioFilesResponse{}
+
+	return &this
+}
+
+// GetFiles returns the Files field value if set, zero value otherwise.
+func (o *RecordedAudioFilesResponse) GetFiles() []RecordedIvrFile {
+	if o == nil || IsNil(o.Files) {
+		var ret []RecordedIvrFile
+		return ret
+	}
+	return o.Files
+}
+
+// GetFilesOk returns a tuple with the Files field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedAudioFilesResponse) GetFilesOk() ([]RecordedIvrFile, bool) {
+	if o == nil || IsNil(o.Files) {
+		return nil, false
+	}
+	return o.Files, true
+}
+
+// HasFiles returns a boolean if a field has been set.
+func (o *RecordedAudioFilesResponse) HasFiles() bool {
+	if o != nil && !IsNil(o.Files) {
+		return true
+	}
+
+	return false
+}
+
+// SetFiles gets a reference to the given []RecordedIvrFile and assigns it to the Files field.
+func (o *RecordedAudioFilesResponse) SetFiles(v []RecordedIvrFile) {
+	o.Files = v
+}
+
+func (o RecordedAudioFilesResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordedAudioFilesResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Files) {
+		toSerialize["files"] = o.Files
+	}
+	return toSerialize, nil
+}
+
+type NullableRecordedAudioFilesResponse struct {
+	value *RecordedAudioFilesResponse
+	isSet bool
+}
+
+func (v NullableRecordedAudioFilesResponse) Get() *RecordedAudioFilesResponse {
+	return v.value
+}
+
+func (v *NullableRecordedAudioFilesResponse) Set(val *RecordedAudioFilesResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordedAudioFilesResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordedAudioFilesResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordedAudioFilesResponse(val *RecordedAudioFilesResponse) *NullableRecordedAudioFilesResponse {
+	return &NullableRecordedAudioFilesResponse{value: val, isSet: true}
+}
+
+func (v NullableRecordedAudioFilesResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordedAudioFilesResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recorded_ivr_file.go b/pkg/infobip/models/voice/recorded_ivr_file.go
new file mode 100644
index 0000000..5544a4c
--- /dev/null
+++ b/pkg/infobip/models/voice/recorded_ivr_file.go
@@ -0,0 +1,351 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordedIvrFile type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordedIvrFile{}
+
+// RecordedIvrFile Array of recorded files metadata, one for each recorded file.
+type RecordedIvrFile struct {
+	// The ID that uniquely identifies the sent message.
+	MessageId *string
+	// Numeric sender ID.
+	From *string
+	// Destination address.
+	To *string
+	// Scenario key.
+	ScenarioId *string
+	// Differentiates recordings made by separate Record actions.
+	GroupId *string
+	// Relative URL path to the recorded file. To download the audio, just perform a GET request using the relative URL of a specific file. The returned audio data is encoded as PCM 16bit 8kHz WAVE audio. The files are available on Infobip servers for 2 months.
+	Url *string
+	// The time the recording took place.
+	RecordedAt *Time
+}
+
+// NewRecordedIvrFile instantiates a new RecordedIvrFile object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecordedIvrFile() *RecordedIvrFile {
+	this := RecordedIvrFile{}
+	return &this
+}
+
+// NewRecordedIvrFileWithDefaults instantiates a new RecordedIvrFile object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordedIvrFileWithDefaults() *RecordedIvrFile {
+	this := RecordedIvrFile{}
+
+	return &this
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *RecordedIvrFile) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *RecordedIvrFile) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *RecordedIvrFile) SetTo(v string) {
+	o.To = &v
+}
+
+// GetScenarioId returns the ScenarioId field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetScenarioId() string {
+	if o == nil || IsNil(o.ScenarioId) {
+		var ret string
+		return ret
+	}
+	return *o.ScenarioId
+}
+
+// GetScenarioIdOk returns a tuple with the ScenarioId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetScenarioIdOk() (*string, bool) {
+	if o == nil || IsNil(o.ScenarioId) {
+		return nil, false
+	}
+	return o.ScenarioId, true
+}
+
+// HasScenarioId returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasScenarioId() bool {
+	if o != nil && !IsNil(o.ScenarioId) {
+		return true
+	}
+
+	return false
+}
+
+// SetScenarioId gets a reference to the given string and assigns it to the ScenarioId field.
+func (o *RecordedIvrFile) SetScenarioId(v string) {
+	o.ScenarioId = &v
+}
+
+// GetGroupId returns the GroupId field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetGroupId() string {
+	if o == nil || IsNil(o.GroupId) {
+		var ret string
+		return ret
+	}
+	return *o.GroupId
+}
+
+// GetGroupIdOk returns a tuple with the GroupId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetGroupIdOk() (*string, bool) {
+	if o == nil || IsNil(o.GroupId) {
+		return nil, false
+	}
+	return o.GroupId, true
+}
+
+// HasGroupId returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasGroupId() bool {
+	if o != nil && !IsNil(o.GroupId) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupId gets a reference to the given string and assigns it to the GroupId field.
+func (o *RecordedIvrFile) SetGroupId(v string) {
+	o.GroupId = &v
+}
+
+// GetUrl returns the Url field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetUrl() string {
+	if o == nil || IsNil(o.Url) {
+		var ret string
+		return ret
+	}
+	return *o.Url
+}
+
+// GetUrlOk returns a tuple with the Url field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.Url) {
+		return nil, false
+	}
+	return o.Url, true
+}
+
+// HasUrl returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasUrl() bool {
+	if o != nil && !IsNil(o.Url) {
+		return true
+	}
+
+	return false
+}
+
+// SetUrl gets a reference to the given string and assigns it to the Url field.
+func (o *RecordedIvrFile) SetUrl(v string) {
+	o.Url = &v
+}
+
+// GetRecordedAt returns the RecordedAt field value if set, zero value otherwise.
+func (o *RecordedIvrFile) GetRecordedAt() Time {
+	if o == nil || IsNil(o.RecordedAt) {
+		var ret Time
+		return ret
+	}
+	return *o.RecordedAt
+}
+
+// GetRecordedAtOk returns a tuple with the RecordedAt field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordedIvrFile) GetRecordedAtOk() (*Time, bool) {
+	if o == nil || IsNil(o.RecordedAt) {
+		return nil, false
+	}
+	return o.RecordedAt, true
+}
+
+// HasRecordedAt returns a boolean if a field has been set.
+func (o *RecordedIvrFile) HasRecordedAt() bool {
+	if o != nil && !IsNil(o.RecordedAt) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecordedAt gets a reference to the given Time and assigns it to the RecordedAt field.
+func (o *RecordedIvrFile) SetRecordedAt(v Time) {
+	o.RecordedAt = &v
+}
+
+func (o RecordedIvrFile) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordedIvrFile) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.ScenarioId) {
+		toSerialize["scenarioId"] = o.ScenarioId
+	}
+	if !IsNil(o.GroupId) {
+		toSerialize["groupId"] = o.GroupId
+	}
+	if !IsNil(o.Url) {
+		toSerialize["url"] = o.Url
+	}
+	if !IsNil(o.RecordedAt) {
+		toSerialize["recordedAt"] = o.RecordedAt
+	}
+	return toSerialize, nil
+}
+
+type NullableRecordedIvrFile struct {
+	value *RecordedIvrFile
+	isSet bool
+}
+
+func (v NullableRecordedIvrFile) Get() *RecordedIvrFile {
+	return v.value
+}
+
+func (v *NullableRecordedIvrFile) Set(val *RecordedIvrFile) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordedIvrFile) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordedIvrFile) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordedIvrFile(val *RecordedIvrFile) *NullableRecordedIvrFile {
+	return &NullableRecordedIvrFile{value: val, isSet: true}
+}
+
+func (v NullableRecordedIvrFile) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordedIvrFile) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording.go b/pkg/infobip/models/voice/recording.go
new file mode 100644
index 0000000..e1f68d5
--- /dev/null
+++ b/pkg/infobip/models/voice/recording.go
@@ -0,0 +1,451 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Recording type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Recording{}
+
+// Recording struct for Recording
+type Recording struct {
+	// Call ID.
+	CallId    *string
+	Endpoint  CallEndpoint
+	Direction *CallDirection
+	// Call recording files.
+	Files  []RecordingFile
+	Status *RecordingStatus
+	// Reason for recording failure.
+	Reason *string
+	// Calls Configuration ID.
+	CallsConfigurationId *string
+	Platform             *Platform
+	// Date and time when the (first) call recording started.
+	StartTime *Time
+	// Date and time when the (last) call recording ended.
+	EndTime *Time
+}
+
+type _Recording Recording
+
+// NewRecording instantiates a new Recording object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecording(endpoint CallEndpoint) *Recording {
+	this := Recording{}
+	this.Endpoint = endpoint
+	return &this
+}
+
+// NewRecordingWithDefaults instantiates a new Recording object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordingWithDefaults() *Recording {
+	this := Recording{}
+
+	return &this
+}
+
+// GetCallId returns the CallId field value if set, zero value otherwise.
+func (o *Recording) GetCallId() string {
+	if o == nil || IsNil(o.CallId) {
+		var ret string
+		return ret
+	}
+	return *o.CallId
+}
+
+// GetCallIdOk returns a tuple with the CallId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetCallIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallId) {
+		return nil, false
+	}
+	return o.CallId, true
+}
+
+// HasCallId returns a boolean if a field has been set.
+func (o *Recording) HasCallId() bool {
+	if o != nil && !IsNil(o.CallId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallId gets a reference to the given string and assigns it to the CallId field.
+func (o *Recording) SetCallId(v string) {
+	o.CallId = &v
+}
+
+// GetEndpoint returns the Endpoint field value
+func (o *Recording) GetEndpoint() CallEndpoint {
+	if o == nil {
+		var ret CallEndpoint
+		return ret
+	}
+
+	return o.Endpoint
+}
+
+// GetEndpointOk returns a tuple with the Endpoint field value
+// and a boolean to check if the value has been set.
+func (o *Recording) GetEndpointOk() (*CallEndpoint, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Endpoint, true
+}
+
+// SetEndpoint sets field value
+func (o *Recording) SetEndpoint(v CallEndpoint) {
+	o.Endpoint = v
+}
+
+// GetDirection returns the Direction field value if set, zero value otherwise.
+func (o *Recording) GetDirection() CallDirection {
+	if o == nil || IsNil(o.Direction) {
+		var ret CallDirection
+		return ret
+	}
+	return *o.Direction
+}
+
+// GetDirectionOk returns a tuple with the Direction field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetDirectionOk() (*CallDirection, bool) {
+	if o == nil || IsNil(o.Direction) {
+		return nil, false
+	}
+	return o.Direction, true
+}
+
+// HasDirection returns a boolean if a field has been set.
+func (o *Recording) HasDirection() bool {
+	if o != nil && !IsNil(o.Direction) {
+		return true
+	}
+
+	return false
+}
+
+// SetDirection gets a reference to the given CallDirection and assigns it to the Direction field.
+func (o *Recording) SetDirection(v CallDirection) {
+	o.Direction = &v
+}
+
+// GetFiles returns the Files field value if set, zero value otherwise.
+func (o *Recording) GetFiles() []RecordingFile {
+	if o == nil || IsNil(o.Files) {
+		var ret []RecordingFile
+		return ret
+	}
+	return o.Files
+}
+
+// GetFilesOk returns a tuple with the Files field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetFilesOk() ([]RecordingFile, bool) {
+	if o == nil || IsNil(o.Files) {
+		return nil, false
+	}
+	return o.Files, true
+}
+
+// HasFiles returns a boolean if a field has been set.
+func (o *Recording) HasFiles() bool {
+	if o != nil && !IsNil(o.Files) {
+		return true
+	}
+
+	return false
+}
+
+// SetFiles gets a reference to the given []RecordingFile and assigns it to the Files field.
+func (o *Recording) SetFiles(v []RecordingFile) {
+	o.Files = v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *Recording) GetStatus() RecordingStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret RecordingStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetStatusOk() (*RecordingStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *Recording) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given RecordingStatus and assigns it to the Status field.
+func (o *Recording) SetStatus(v RecordingStatus) {
+	o.Status = &v
+}
+
+// GetReason returns the Reason field value if set, zero value otherwise.
+func (o *Recording) GetReason() string {
+	if o == nil || IsNil(o.Reason) {
+		var ret string
+		return ret
+	}
+	return *o.Reason
+}
+
+// GetReasonOk returns a tuple with the Reason field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetReasonOk() (*string, bool) {
+	if o == nil || IsNil(o.Reason) {
+		return nil, false
+	}
+	return o.Reason, true
+}
+
+// HasReason returns a boolean if a field has been set.
+func (o *Recording) HasReason() bool {
+	if o != nil && !IsNil(o.Reason) {
+		return true
+	}
+
+	return false
+}
+
+// SetReason gets a reference to the given string and assigns it to the Reason field.
+func (o *Recording) SetReason(v string) {
+	o.Reason = &v
+}
+
+// GetCallsConfigurationId returns the CallsConfigurationId field value if set, zero value otherwise.
+func (o *Recording) GetCallsConfigurationId() string {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		var ret string
+		return ret
+	}
+	return *o.CallsConfigurationId
+}
+
+// GetCallsConfigurationIdOk returns a tuple with the CallsConfigurationId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetCallsConfigurationIdOk() (*string, bool) {
+	if o == nil || IsNil(o.CallsConfigurationId) {
+		return nil, false
+	}
+	return o.CallsConfigurationId, true
+}
+
+// HasCallsConfigurationId returns a boolean if a field has been set.
+func (o *Recording) HasCallsConfigurationId() bool {
+	if o != nil && !IsNil(o.CallsConfigurationId) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallsConfigurationId gets a reference to the given string and assigns it to the CallsConfigurationId field.
+func (o *Recording) SetCallsConfigurationId(v string) {
+	o.CallsConfigurationId = &v
+}
+
+// GetPlatform returns the Platform field value if set, zero value otherwise.
+func (o *Recording) GetPlatform() Platform {
+	if o == nil || IsNil(o.Platform) {
+		var ret Platform
+		return ret
+	}
+	return *o.Platform
+}
+
+// GetPlatformOk returns a tuple with the Platform field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetPlatformOk() (*Platform, bool) {
+	if o == nil || IsNil(o.Platform) {
+		return nil, false
+	}
+	return o.Platform, true
+}
+
+// HasPlatform returns a boolean if a field has been set.
+func (o *Recording) HasPlatform() bool {
+	if o != nil && !IsNil(o.Platform) {
+		return true
+	}
+
+	return false
+}
+
+// SetPlatform gets a reference to the given Platform and assigns it to the Platform field.
+func (o *Recording) SetPlatform(v Platform) {
+	o.Platform = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *Recording) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *Recording) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *Recording) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *Recording) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Recording) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *Recording) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *Recording) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+func (o Recording) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Recording) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CallId) {
+		toSerialize["callId"] = o.CallId
+	}
+	toSerialize["endpoint"] = o.Endpoint
+	if !IsNil(o.Direction) {
+		toSerialize["direction"] = o.Direction
+	}
+	if !IsNil(o.Files) {
+		toSerialize["files"] = o.Files
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Reason) {
+		toSerialize["reason"] = o.Reason
+	}
+	if !IsNil(o.CallsConfigurationId) {
+		toSerialize["callsConfigurationId"] = o.CallsConfigurationId
+	}
+	if !IsNil(o.Platform) {
+		toSerialize["platform"] = o.Platform
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	return toSerialize, nil
+}
+
+type NullableRecording struct {
+	value *Recording
+	isSet bool
+}
+
+func (v NullableRecording) Get() *Recording {
+	return v.value
+}
+
+func (v *NullableRecording) Set(val *Recording) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecording) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecording) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecording(val *Recording) *NullableRecording {
+	return &NullableRecording{value: val, isSet: true}
+}
+
+func (v NullableRecording) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecording) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_file.go b/pkg/infobip/models/voice/recording_file.go
new file mode 100644
index 0000000..d3dcbc8
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_file.go
@@ -0,0 +1,480 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordingFile type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordingFile{}
+
+// RecordingFile struct for RecordingFile
+type RecordingFile struct {
+	// File ID.
+	Id *string
+	// File name.
+	Name       string
+	FileFormat FileFormat
+	// File size in bytes.
+	Size *int64
+	// File creation time.
+	CreationTime *Time
+	// File duration in seconds.
+	Duration *int64
+	// Date and time when the recording started.
+	StartTime *Time
+	// Date and time when the recording ended.
+	EndTime          *Time
+	Location         *RecordingFileLocation
+	SftpUploadStatus *SftpUploadStatus
+	// Custom data.
+	CustomData *map[string]string
+}
+
+type _RecordingFile RecordingFile
+
+// NewRecordingFile instantiates a new RecordingFile object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecordingFile(name string, fileFormat FileFormat) *RecordingFile {
+	this := RecordingFile{}
+	this.Name = name
+	this.FileFormat = fileFormat
+	return &this
+}
+
+// NewRecordingFileWithDefaults instantiates a new RecordingFile object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordingFileWithDefaults() *RecordingFile {
+	this := RecordingFile{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *RecordingFile) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *RecordingFile) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *RecordingFile) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value
+func (o *RecordingFile) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *RecordingFile) SetName(v string) {
+	o.Name = v
+}
+
+// GetFileFormat returns the FileFormat field value
+func (o *RecordingFile) GetFileFormat() FileFormat {
+	if o == nil {
+		var ret FileFormat
+		return ret
+	}
+
+	return o.FileFormat
+}
+
+// GetFileFormatOk returns a tuple with the FileFormat field value
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetFileFormatOk() (*FileFormat, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FileFormat, true
+}
+
+// SetFileFormat sets field value
+func (o *RecordingFile) SetFileFormat(v FileFormat) {
+	o.FileFormat = v
+}
+
+// GetSize returns the Size field value if set, zero value otherwise.
+func (o *RecordingFile) GetSize() int64 {
+	if o == nil || IsNil(o.Size) {
+		var ret int64
+		return ret
+	}
+	return *o.Size
+}
+
+// GetSizeOk returns a tuple with the Size field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetSizeOk() (*int64, bool) {
+	if o == nil || IsNil(o.Size) {
+		return nil, false
+	}
+	return o.Size, true
+}
+
+// HasSize returns a boolean if a field has been set.
+func (o *RecordingFile) HasSize() bool {
+	if o != nil && !IsNil(o.Size) {
+		return true
+	}
+
+	return false
+}
+
+// SetSize gets a reference to the given int64 and assigns it to the Size field.
+func (o *RecordingFile) SetSize(v int64) {
+	o.Size = &v
+}
+
+// GetCreationTime returns the CreationTime field value if set, zero value otherwise.
+func (o *RecordingFile) GetCreationTime() Time {
+	if o == nil || IsNil(o.CreationTime) {
+		var ret Time
+		return ret
+	}
+	return *o.CreationTime
+}
+
+// GetCreationTimeOk returns a tuple with the CreationTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetCreationTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.CreationTime) {
+		return nil, false
+	}
+	return o.CreationTime, true
+}
+
+// HasCreationTime returns a boolean if a field has been set.
+func (o *RecordingFile) HasCreationTime() bool {
+	if o != nil && !IsNil(o.CreationTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreationTime gets a reference to the given Time and assigns it to the CreationTime field.
+func (o *RecordingFile) SetCreationTime(v Time) {
+	o.CreationTime = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *RecordingFile) GetDuration() int64 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int64
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetDurationOk() (*int64, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *RecordingFile) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int64 and assigns it to the Duration field.
+func (o *RecordingFile) SetDuration(v int64) {
+	o.Duration = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *RecordingFile) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *RecordingFile) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *RecordingFile) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *RecordingFile) GetEndTime() Time {
+	if o == nil || IsNil(o.EndTime) {
+		var ret Time
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetEndTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *RecordingFile) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given Time and assigns it to the EndTime field.
+func (o *RecordingFile) SetEndTime(v Time) {
+	o.EndTime = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *RecordingFile) GetLocation() RecordingFileLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret RecordingFileLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetLocationOk() (*RecordingFileLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *RecordingFile) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given RecordingFileLocation and assigns it to the Location field.
+func (o *RecordingFile) SetLocation(v RecordingFileLocation) {
+	o.Location = &v
+}
+
+// GetSftpUploadStatus returns the SftpUploadStatus field value if set, zero value otherwise.
+func (o *RecordingFile) GetSftpUploadStatus() SftpUploadStatus {
+	if o == nil || IsNil(o.SftpUploadStatus) {
+		var ret SftpUploadStatus
+		return ret
+	}
+	return *o.SftpUploadStatus
+}
+
+// GetSftpUploadStatusOk returns a tuple with the SftpUploadStatus field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetSftpUploadStatusOk() (*SftpUploadStatus, bool) {
+	if o == nil || IsNil(o.SftpUploadStatus) {
+		return nil, false
+	}
+	return o.SftpUploadStatus, true
+}
+
+// HasSftpUploadStatus returns a boolean if a field has been set.
+func (o *RecordingFile) HasSftpUploadStatus() bool {
+	if o != nil && !IsNil(o.SftpUploadStatus) {
+		return true
+	}
+
+	return false
+}
+
+// SetSftpUploadStatus gets a reference to the given SftpUploadStatus and assigns it to the SftpUploadStatus field.
+func (o *RecordingFile) SetSftpUploadStatus(v SftpUploadStatus) {
+	o.SftpUploadStatus = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *RecordingFile) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingFile) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *RecordingFile) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *RecordingFile) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o RecordingFile) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordingFile) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	toSerialize["name"] = o.Name
+	toSerialize["fileFormat"] = o.FileFormat
+	if !IsNil(o.Size) {
+		toSerialize["size"] = o.Size
+	}
+	if !IsNil(o.CreationTime) {
+		toSerialize["creationTime"] = o.CreationTime
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.SftpUploadStatus) {
+		toSerialize["sftpUploadStatus"] = o.SftpUploadStatus
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableRecordingFile struct {
+	value *RecordingFile
+	isSet bool
+}
+
+func (v NullableRecordingFile) Get() *RecordingFile {
+	return v.value
+}
+
+func (v *NullableRecordingFile) Set(val *RecordingFile) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingFile) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingFile) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingFile(val *RecordingFile) *NullableRecordingFile {
+	return &NullableRecordingFile{value: val, isSet: true}
+}
+
+func (v NullableRecordingFile) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingFile) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_file_location.go b/pkg/infobip/models/voice/recording_file_location.go
new file mode 100644
index 0000000..7629136
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_file_location.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// RecordingFileLocation Location of recording file after processing.
+type RecordingFileLocation string
+
+// List of RecordingFileLocation
+const (
+	RECORDINGFILELOCATION_SFTP   RecordingFileLocation = "SFTP"
+	RECORDINGFILELOCATION_HOSTED RecordingFileLocation = "HOSTED"
+)
+
+// All allowed values of RecordingFileLocation enum
+var AllowedRecordingFileLocationEnumValues = []RecordingFileLocation{
+	"SFTP",
+	"HOSTED",
+}
+
+func (v *RecordingFileLocation) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := RecordingFileLocation(value)
+	for _, existing := range AllowedRecordingFileLocationEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid RecordingFileLocation", value)
+}
+
+// NewRecordingFileLocationFromValue returns a pointer to a valid RecordingFileLocation
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewRecordingFileLocationFromValue(v string) (*RecordingFileLocation, error) {
+	ev := RecordingFileLocation(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for RecordingFileLocation: valid values are %v", v, AllowedRecordingFileLocationEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v RecordingFileLocation) IsValid() bool {
+	for _, existing := range AllowedRecordingFileLocationEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to RecordingFileLocation value
+func (v RecordingFileLocation) Ptr() *RecordingFileLocation {
+	return &v
+}
+
+type NullableRecordingFileLocation struct {
+	value *RecordingFileLocation
+	isSet bool
+}
+
+func (v NullableRecordingFileLocation) Get() *RecordingFileLocation {
+	return v.value
+}
+
+func (v *NullableRecordingFileLocation) Set(val *RecordingFileLocation) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingFileLocation) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingFileLocation) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingFileLocation(val *RecordingFileLocation) *NullableRecordingFileLocation {
+	return &NullableRecordingFileLocation{value: val, isSet: true}
+}
+
+func (v NullableRecordingFileLocation) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingFileLocation) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_location.go b/pkg/infobip/models/voice/recording_location.go
new file mode 100644
index 0000000..b7ab847
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_location.go
@@ -0,0 +1,140 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// RecordingLocation the model 'RecordingLocation'
+type RecordingLocation string
+
+// List of RecordingLocation
+const (
+	RECORDINGLOCATION_SAO_PAULO      RecordingLocation = "SAO_PAULO"
+	RECORDINGLOCATION_BOGOTA         RecordingLocation = "BOGOTA"
+	RECORDINGLOCATION_FRANKFURT      RecordingLocation = "FRANKFURT"
+	RECORDINGLOCATION_JOHANNESBURG   RecordingLocation = "JOHANNESBURG"
+	RECORDINGLOCATION_JOHANNESBURG_1 RecordingLocation = "JOHANNESBURG_1"
+	RECORDINGLOCATION_NEW_YORK       RecordingLocation = "NEW_YORK"
+	RECORDINGLOCATION_PORTLAND       RecordingLocation = "PORTLAND"
+	RECORDINGLOCATION_MOSCOW         RecordingLocation = "MOSCOW"
+	RECORDINGLOCATION_SINGAPORE      RecordingLocation = "SINGAPORE"
+	RECORDINGLOCATION_ISTANBUL       RecordingLocation = "ISTANBUL"
+	RECORDINGLOCATION_KUALA_LUMPUR   RecordingLocation = "KUALA_LUMPUR"
+	RECORDINGLOCATION_JAKARTA        RecordingLocation = "JAKARTA"
+	RECORDINGLOCATION_MUMBAI         RecordingLocation = "MUMBAI"
+	RECORDINGLOCATION_HONG_KONG_1    RecordingLocation = "HONG_KONG_1"
+	RECORDINGLOCATION_HONG_KONG      RecordingLocation = "HONG_KONG"
+	RECORDINGLOCATION_RIYADH         RecordingLocation = "RIYADH"
+	RECORDINGLOCATION_CHENNAI        RecordingLocation = "CHENNAI"
+)
+
+// All allowed values of RecordingLocation enum
+var AllowedRecordingLocationEnumValues = []RecordingLocation{
+	"SAO_PAULO",
+	"BOGOTA",
+	"FRANKFURT",
+	"JOHANNESBURG",
+	"JOHANNESBURG_1",
+	"NEW_YORK",
+	"PORTLAND",
+	"MOSCOW",
+	"SINGAPORE",
+	"ISTANBUL",
+	"KUALA_LUMPUR",
+	"JAKARTA",
+	"MUMBAI",
+	"HONG_KONG_1",
+	"HONG_KONG",
+	"RIYADH",
+	"CHENNAI",
+}
+
+func (v *RecordingLocation) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := RecordingLocation(value)
+	for _, existing := range AllowedRecordingLocationEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid RecordingLocation", value)
+}
+
+// NewRecordingLocationFromValue returns a pointer to a valid RecordingLocation
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewRecordingLocationFromValue(v string) (*RecordingLocation, error) {
+	ev := RecordingLocation(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for RecordingLocation: valid values are %v", v, AllowedRecordingLocationEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v RecordingLocation) IsValid() bool {
+	for _, existing := range AllowedRecordingLocationEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to RecordingLocation value
+func (v RecordingLocation) Ptr() *RecordingLocation {
+	return &v
+}
+
+type NullableRecordingLocation struct {
+	value *RecordingLocation
+	isSet bool
+}
+
+func (v NullableRecordingLocation) Get() *RecordingLocation {
+	return v.value
+}
+
+func (v *NullableRecordingLocation) Set(val *RecordingLocation) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingLocation) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingLocation) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingLocation(val *RecordingLocation) *NullableRecordingLocation {
+	return &NullableRecordingLocation{value: val, isSet: true}
+}
+
+func (v NullableRecordingLocation) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingLocation) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_play_content.go b/pkg/infobip/models/voice/recording_play_content.go
new file mode 100644
index 0000000..db4a89f
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_play_content.go
@@ -0,0 +1,125 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordingPlayContent type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordingPlayContent{}
+
+// RecordingPlayContent struct for RecordingPlayContent
+type RecordingPlayContent struct {
+	Type   PlayContentType
+	FileId string
+}
+
+type _RecordingPlayContent RecordingPlayContent
+
+// NewRecordingPlayContent instantiates a new RecordingPlayContent object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewRecordingPlayContent(fileId string) *RecordingPlayContent {
+	this := RecordingPlayContent{}
+	this.Type = "RECORDING"
+	this.FileId = fileId
+	return &this
+}
+
+// NewRecordingPlayContentWithDefaults instantiates a new RecordingPlayContent object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordingPlayContentWithDefaults() *RecordingPlayContent {
+	this := RecordingPlayContent{}
+	this.Type = "RECORDING"
+	return &this
+}
+
+// GetFileId returns the FileId field value
+func (o *RecordingPlayContent) GetFileId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.FileId
+}
+
+// GetFileIdOk returns a tuple with the FileId field value
+// and a boolean to check if the value has been set.
+func (o *RecordingPlayContent) GetFileIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FileId, true
+}
+
+// SetFileId sets field value
+func (o *RecordingPlayContent) SetFileId(v string) {
+	o.FileId = v
+}
+
+func (o RecordingPlayContent) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordingPlayContent) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["fileId"] = o.FileId
+	return toSerialize, nil
+}
+
+type NullableRecordingPlayContent struct {
+	value *RecordingPlayContent
+	isSet bool
+}
+
+func (v NullableRecordingPlayContent) Get() *RecordingPlayContent {
+	return v.value
+}
+
+func (v *NullableRecordingPlayContent) Set(val *RecordingPlayContent) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingPlayContent) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingPlayContent) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingPlayContent(val *RecordingPlayContent) *NullableRecordingPlayContent {
+	return &NullableRecordingPlayContent{value: val, isSet: true}
+}
+
+func (v NullableRecordingPlayContent) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingPlayContent) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_request.go b/pkg/infobip/models/voice/recording_request.go
new file mode 100644
index 0000000..4ed88c1
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_request.go
@@ -0,0 +1,310 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordingRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordingRequest{}
+
+// RecordingRequest struct for RecordingRequest
+type RecordingRequest struct {
+	RecordingType RecordingType
+	// Silence duration, in seconds, before the recording stops. (If this field is set the recording can't be stopped by the [stop recording endpoint](#call-stop-recording).)
+	MaxSilence *int32
+	// Flag indicating if a beep sound should be played before recording.
+	Beep *bool
+	// Maximum recording duration in seconds.  (If this field is set the recording can't be stopped by the [stop recording endpoint](#call-stop-recording).)
+	MaxDuration *int32
+	// Custom data.
+	CustomData *map[string]string
+	// Custom name for the recording's zip file. Applicable only when SFTP server is enabled on [Voice settings page](https://portal.infobip.com/apps/voice/recording/settings). Using the same `filePrefix` will override the files on the SFTP server.
+	FilePrefix *string
+}
+
+type _RecordingRequest RecordingRequest
+
+// NewRecordingRequest instantiates a new RecordingRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecordingRequest(recordingType RecordingType) *RecordingRequest {
+	this := RecordingRequest{}
+	this.RecordingType = recordingType
+	var beep bool = false
+	this.Beep = &beep
+	return &this
+}
+
+// NewRecordingRequestWithDefaults instantiates a new RecordingRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordingRequestWithDefaults() *RecordingRequest {
+	this := RecordingRequest{}
+
+	var beep bool = false
+	this.Beep = &beep
+	return &this
+}
+
+// GetRecordingType returns the RecordingType field value
+func (o *RecordingRequest) GetRecordingType() RecordingType {
+	if o == nil {
+		var ret RecordingType
+		return ret
+	}
+
+	return o.RecordingType
+}
+
+// GetRecordingTypeOk returns a tuple with the RecordingType field value
+// and a boolean to check if the value has been set.
+func (o *RecordingRequest) GetRecordingTypeOk() (*RecordingType, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.RecordingType, true
+}
+
+// SetRecordingType sets field value
+func (o *RecordingRequest) SetRecordingType(v RecordingType) {
+	o.RecordingType = v
+}
+
+// GetMaxSilence returns the MaxSilence field value if set, zero value otherwise.
+func (o *RecordingRequest) GetMaxSilence() int32 {
+	if o == nil || IsNil(o.MaxSilence) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxSilence
+}
+
+// GetMaxSilenceOk returns a tuple with the MaxSilence field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingRequest) GetMaxSilenceOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxSilence) {
+		return nil, false
+	}
+	return o.MaxSilence, true
+}
+
+// HasMaxSilence returns a boolean if a field has been set.
+func (o *RecordingRequest) HasMaxSilence() bool {
+	if o != nil && !IsNil(o.MaxSilence) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxSilence gets a reference to the given int32 and assigns it to the MaxSilence field.
+func (o *RecordingRequest) SetMaxSilence(v int32) {
+	o.MaxSilence = &v
+}
+
+// GetBeep returns the Beep field value if set, zero value otherwise.
+func (o *RecordingRequest) GetBeep() bool {
+	if o == nil || IsNil(o.Beep) {
+		var ret bool
+		return ret
+	}
+	return *o.Beep
+}
+
+// GetBeepOk returns a tuple with the Beep field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingRequest) GetBeepOk() (*bool, bool) {
+	if o == nil || IsNil(o.Beep) {
+		return nil, false
+	}
+	return o.Beep, true
+}
+
+// HasBeep returns a boolean if a field has been set.
+func (o *RecordingRequest) HasBeep() bool {
+	if o != nil && !IsNil(o.Beep) {
+		return true
+	}
+
+	return false
+}
+
+// SetBeep gets a reference to the given bool and assigns it to the Beep field.
+func (o *RecordingRequest) SetBeep(v bool) {
+	o.Beep = &v
+}
+
+// GetMaxDuration returns the MaxDuration field value if set, zero value otherwise.
+func (o *RecordingRequest) GetMaxDuration() int32 {
+	if o == nil || IsNil(o.MaxDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxDuration
+}
+
+// GetMaxDurationOk returns a tuple with the MaxDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingRequest) GetMaxDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxDuration) {
+		return nil, false
+	}
+	return o.MaxDuration, true
+}
+
+// HasMaxDuration returns a boolean if a field has been set.
+func (o *RecordingRequest) HasMaxDuration() bool {
+	if o != nil && !IsNil(o.MaxDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxDuration gets a reference to the given int32 and assigns it to the MaxDuration field.
+func (o *RecordingRequest) SetMaxDuration(v int32) {
+	o.MaxDuration = &v
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *RecordingRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *RecordingRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *RecordingRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+// GetFilePrefix returns the FilePrefix field value if set, zero value otherwise.
+func (o *RecordingRequest) GetFilePrefix() string {
+	if o == nil || IsNil(o.FilePrefix) {
+		var ret string
+		return ret
+	}
+	return *o.FilePrefix
+}
+
+// GetFilePrefixOk returns a tuple with the FilePrefix field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingRequest) GetFilePrefixOk() (*string, bool) {
+	if o == nil || IsNil(o.FilePrefix) {
+		return nil, false
+	}
+	return o.FilePrefix, true
+}
+
+// HasFilePrefix returns a boolean if a field has been set.
+func (o *RecordingRequest) HasFilePrefix() bool {
+	if o != nil && !IsNil(o.FilePrefix) {
+		return true
+	}
+
+	return false
+}
+
+// SetFilePrefix gets a reference to the given string and assigns it to the FilePrefix field.
+func (o *RecordingRequest) SetFilePrefix(v string) {
+	o.FilePrefix = &v
+}
+
+func (o RecordingRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordingRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["recordingType"] = o.RecordingType
+	if !IsNil(o.MaxSilence) {
+		toSerialize["maxSilence"] = o.MaxSilence
+	}
+	if !IsNil(o.Beep) {
+		toSerialize["beep"] = o.Beep
+	}
+	if !IsNil(o.MaxDuration) {
+		toSerialize["maxDuration"] = o.MaxDuration
+	}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	if !IsNil(o.FilePrefix) {
+		toSerialize["filePrefix"] = o.FilePrefix
+	}
+	return toSerialize, nil
+}
+
+type NullableRecordingRequest struct {
+	value *RecordingRequest
+	isSet bool
+}
+
+func (v NullableRecordingRequest) Get() *RecordingRequest {
+	return v.value
+}
+
+func (v *NullableRecordingRequest) Set(val *RecordingRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingRequest(val *RecordingRequest) *NullableRecordingRequest {
+	return &NullableRecordingRequest{value: val, isSet: true}
+}
+
+func (v NullableRecordingRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_start_request.go b/pkg/infobip/models/voice/recording_start_request.go
new file mode 100644
index 0000000..c5b3b92
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_start_request.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RecordingStartRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RecordingStartRequest{}
+
+// RecordingStartRequest struct for RecordingStartRequest
+type RecordingStartRequest struct {
+	Recording *RecordingRequest
+}
+
+// NewRecordingStartRequest instantiates a new RecordingStartRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRecordingStartRequest() *RecordingStartRequest {
+	this := RecordingStartRequest{}
+	return &this
+}
+
+// NewRecordingStartRequestWithDefaults instantiates a new RecordingStartRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRecordingStartRequestWithDefaults() *RecordingStartRequest {
+	this := RecordingStartRequest{}
+
+	return &this
+}
+
+// GetRecording returns the Recording field value if set, zero value otherwise.
+func (o *RecordingStartRequest) GetRecording() RecordingRequest {
+	if o == nil || IsNil(o.Recording) {
+		var ret RecordingRequest
+		return ret
+	}
+	return *o.Recording
+}
+
+// GetRecordingOk returns a tuple with the Recording field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RecordingStartRequest) GetRecordingOk() (*RecordingRequest, bool) {
+	if o == nil || IsNil(o.Recording) {
+		return nil, false
+	}
+	return o.Recording, true
+}
+
+// HasRecording returns a boolean if a field has been set.
+func (o *RecordingStartRequest) HasRecording() bool {
+	if o != nil && !IsNil(o.Recording) {
+		return true
+	}
+
+	return false
+}
+
+// SetRecording gets a reference to the given RecordingRequest and assigns it to the Recording field.
+func (o *RecordingStartRequest) SetRecording(v RecordingRequest) {
+	o.Recording = &v
+}
+
+func (o RecordingStartRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RecordingStartRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Recording) {
+		toSerialize["recording"] = o.Recording
+	}
+	return toSerialize, nil
+}
+
+type NullableRecordingStartRequest struct {
+	value *RecordingStartRequest
+	isSet bool
+}
+
+func (v NullableRecordingStartRequest) Get() *RecordingStartRequest {
+	return v.value
+}
+
+func (v *NullableRecordingStartRequest) Set(val *RecordingStartRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingStartRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingStartRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingStartRequest(val *RecordingStartRequest) *NullableRecordingStartRequest {
+	return &NullableRecordingStartRequest{value: val, isSet: true}
+}
+
+func (v NullableRecordingStartRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingStartRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_status.go b/pkg/infobip/models/voice/recording_status.go
new file mode 100644
index 0000000..a92b039
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_status.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// RecordingStatus Status of call recording.
+type RecordingStatus string
+
+// List of RecordingStatus
+const (
+	RECORDINGSTATUS_SUCCESSFUL       RecordingStatus = "SUCCESSFUL"
+	RECORDINGSTATUS_PARTIALLY_FAILED RecordingStatus = "PARTIALLY_FAILED"
+	RECORDINGSTATUS_FAILED           RecordingStatus = "FAILED"
+)
+
+// All allowed values of RecordingStatus enum
+var AllowedRecordingStatusEnumValues = []RecordingStatus{
+	"SUCCESSFUL",
+	"PARTIALLY_FAILED",
+	"FAILED",
+}
+
+func (v *RecordingStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := RecordingStatus(value)
+	for _, existing := range AllowedRecordingStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid RecordingStatus", value)
+}
+
+// NewRecordingStatusFromValue returns a pointer to a valid RecordingStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewRecordingStatusFromValue(v string) (*RecordingStatus, error) {
+	ev := RecordingStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for RecordingStatus: valid values are %v", v, AllowedRecordingStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v RecordingStatus) IsValid() bool {
+	for _, existing := range AllowedRecordingStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to RecordingStatus value
+func (v RecordingStatus) Ptr() *RecordingStatus {
+	return &v
+}
+
+type NullableRecordingStatus struct {
+	value *RecordingStatus
+	isSet bool
+}
+
+func (v NullableRecordingStatus) Get() *RecordingStatus {
+	return v.value
+}
+
+func (v *NullableRecordingStatus) Set(val *RecordingStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingStatus(val *RecordingStatus) *NullableRecordingStatus {
+	return &NullableRecordingStatus{value: val, isSet: true}
+}
+
+func (v NullableRecordingStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/recording_type.go b/pkg/infobip/models/voice/recording_type.go
new file mode 100644
index 0000000..03e0be9
--- /dev/null
+++ b/pkg/infobip/models/voice/recording_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// RecordingType Recording type.
+type RecordingType string
+
+// List of RecordingType
+const (
+	RECORDINGTYPE_AUDIO           RecordingType = "AUDIO"
+	RECORDINGTYPE_AUDIO_AND_VIDEO RecordingType = "AUDIO_AND_VIDEO"
+)
+
+// All allowed values of RecordingType enum
+var AllowedRecordingTypeEnumValues = []RecordingType{
+	"AUDIO",
+	"AUDIO_AND_VIDEO",
+}
+
+func (v *RecordingType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := RecordingType(value)
+	for _, existing := range AllowedRecordingTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid RecordingType", value)
+}
+
+// NewRecordingTypeFromValue returns a pointer to a valid RecordingType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewRecordingTypeFromValue(v string) (*RecordingType, error) {
+	ev := RecordingType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for RecordingType: valid values are %v", v, AllowedRecordingTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v RecordingType) IsValid() bool {
+	for _, existing := range AllowedRecordingTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to RecordingType value
+func (v RecordingType) Ptr() *RecordingType {
+	return &v
+}
+
+type NullableRecordingType struct {
+	value *RecordingType
+	isSet bool
+}
+
+func (v NullableRecordingType) Get() *RecordingType {
+	return v.value
+}
+
+func (v *NullableRecordingType) Set(val *RecordingType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRecordingType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRecordingType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRecordingType(val *RecordingType) *NullableRecordingType {
+	return &NullableRecordingType{value: val, isSet: true}
+}
+
+func (v NullableRecordingType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRecordingType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/region.go b/pkg/infobip/models/voice/region.go
new file mode 100644
index 0000000..bbedf43
--- /dev/null
+++ b/pkg/infobip/models/voice/region.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Region type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Region{}
+
+// Region SIP trunk service address region.
+type Region struct {
+	// Name of the region from the country where SIP trunk is located.
+	Name *string
+	// Code of the region from the country where SIP trunk is located.
+	Code *string
+	// Code of the country where SIP trunk is located.
+	CountryCode *string
+}
+
+// NewRegion instantiates a new Region object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRegion() *Region {
+	this := Region{}
+	return &this
+}
+
+// NewRegionWithDefaults instantiates a new Region object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRegionWithDefaults() *Region {
+	this := Region{}
+
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *Region) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Region) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *Region) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *Region) SetName(v string) {
+	o.Name = &v
+}
+
+// GetCode returns the Code field value if set, zero value otherwise.
+func (o *Region) GetCode() string {
+	if o == nil || IsNil(o.Code) {
+		var ret string
+		return ret
+	}
+	return *o.Code
+}
+
+// GetCodeOk returns a tuple with the Code field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Region) GetCodeOk() (*string, bool) {
+	if o == nil || IsNil(o.Code) {
+		return nil, false
+	}
+	return o.Code, true
+}
+
+// HasCode returns a boolean if a field has been set.
+func (o *Region) HasCode() bool {
+	if o != nil && !IsNil(o.Code) {
+		return true
+	}
+
+	return false
+}
+
+// SetCode gets a reference to the given string and assigns it to the Code field.
+func (o *Region) SetCode(v string) {
+	o.Code = &v
+}
+
+// GetCountryCode returns the CountryCode field value if set, zero value otherwise.
+func (o *Region) GetCountryCode() string {
+	if o == nil || IsNil(o.CountryCode) {
+		var ret string
+		return ret
+	}
+	return *o.CountryCode
+}
+
+// GetCountryCodeOk returns a tuple with the CountryCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Region) GetCountryCodeOk() (*string, bool) {
+	if o == nil || IsNil(o.CountryCode) {
+		return nil, false
+	}
+	return o.CountryCode, true
+}
+
+// HasCountryCode returns a boolean if a field has been set.
+func (o *Region) HasCountryCode() bool {
+	if o != nil && !IsNil(o.CountryCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountryCode gets a reference to the given string and assigns it to the CountryCode field.
+func (o *Region) SetCountryCode(v string) {
+	o.CountryCode = &v
+}
+
+func (o Region) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Region) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Code) {
+		toSerialize["code"] = o.Code
+	}
+	if !IsNil(o.CountryCode) {
+		toSerialize["countryCode"] = o.CountryCode
+	}
+	return toSerialize, nil
+}
+
+type NullableRegion struct {
+	value *Region
+	isSet bool
+}
+
+func (v NullableRegion) Get() *Region {
+	return v.value
+}
+
+func (v *NullableRegion) Set(val *Region) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRegion) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRegion) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRegion(val *Region) *NullableRegion {
+	return &NullableRegion{value: val, isSet: true}
+}
+
+func (v NullableRegion) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRegion) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/region_list.go b/pkg/infobip/models/voice/region_list.go
new file mode 100644
index 0000000..8cdf407
--- /dev/null
+++ b/pkg/infobip/models/voice/region_list.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RegionList type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RegionList{}
+
+// RegionList struct for RegionList
+type RegionList struct {
+	// List of regions.
+	Regions []Region
+}
+
+// NewRegionList instantiates a new RegionList object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRegionList() *RegionList {
+	this := RegionList{}
+	return &this
+}
+
+// NewRegionListWithDefaults instantiates a new RegionList object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRegionListWithDefaults() *RegionList {
+	this := RegionList{}
+
+	return &this
+}
+
+// GetRegions returns the Regions field value if set, zero value otherwise.
+func (o *RegionList) GetRegions() []Region {
+	if o == nil || IsNil(o.Regions) {
+		var ret []Region
+		return ret
+	}
+	return o.Regions
+}
+
+// GetRegionsOk returns a tuple with the Regions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegionList) GetRegionsOk() ([]Region, bool) {
+	if o == nil || IsNil(o.Regions) {
+		return nil, false
+	}
+	return o.Regions, true
+}
+
+// HasRegions returns a boolean if a field has been set.
+func (o *RegionList) HasRegions() bool {
+	if o != nil && !IsNil(o.Regions) {
+		return true
+	}
+
+	return false
+}
+
+// SetRegions gets a reference to the given []Region and assigns it to the Regions field.
+func (o *RegionList) SetRegions(v []Region) {
+	o.Regions = v
+}
+
+func (o RegionList) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RegionList) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Regions) {
+		toSerialize["regions"] = o.Regions
+	}
+	return toSerialize, nil
+}
+
+type NullableRegionList struct {
+	value *RegionList
+	isSet bool
+}
+
+func (v NullableRegionList) Get() *RegionList {
+	return v.value
+}
+
+func (v *NullableRegionList) Set(val *RegionList) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRegionList) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRegionList) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRegionList(val *RegionList) *NullableRegionList {
+	return &NullableRegionList{value: val, isSet: true}
+}
+
+func (v NullableRegionList) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRegionList) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/registered_sip_trunk_request.go b/pkg/infobip/models/voice/registered_sip_trunk_request.go
new file mode 100644
index 0000000..590cd8d
--- /dev/null
+++ b/pkg/infobip/models/voice/registered_sip_trunk_request.go
@@ -0,0 +1,518 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RegisteredSipTrunkRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RegisteredSipTrunkRequest{}
+
+// RegisteredSipTrunkRequest struct for RegisteredSipTrunkRequest
+type RegisteredSipTrunkRequest struct {
+	Type                      SipTrunkType
+	Name                      string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	InternationalCallsAllowed *bool
+	ChannelLimit              int32
+	BillingPackage            BillingPackage
+	// List of audio codecs supported by a SIP trunk.
+	Codecs        []AudioCodec
+	Dtmf          *DtmfType
+	Fax           *FaxType
+	NumberFormat  *NumberPresentationFormat
+	Anonymization *AnonymizationType
+	// Enables an authentication challenge for each call.
+	InviteAuthentication *bool
+}
+
+type _RegisteredSipTrunkRequest RegisteredSipTrunkRequest
+
+// NewRegisteredSipTrunkRequest instantiates a new RegisteredSipTrunkRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewRegisteredSipTrunkRequest() *RegisteredSipTrunkRequest {
+	this := RegisteredSipTrunkRequest{}
+	this.Type = "REGISTERED"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	var inviteAuthentication bool = false
+	this.InviteAuthentication = &inviteAuthentication
+	return &this
+}
+
+// NewRegisteredSipTrunkRequestWithDefaults instantiates a new RegisteredSipTrunkRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRegisteredSipTrunkRequestWithDefaults() *RegisteredSipTrunkRequest {
+	this := RegisteredSipTrunkRequest{}
+	this.Type = "REGISTERED"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	var inviteAuthentication bool = false
+	this.InviteAuthentication = &inviteAuthentication
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *RegisteredSipTrunkRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *RegisteredSipTrunkRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *RegisteredSipTrunkRequest) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *RegisteredSipTrunkRequest) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *RegisteredSipTrunkRequest) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value
+func (o *RegisteredSipTrunkRequest) GetChannelLimit() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetChannelLimitOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ChannelLimit, true
+}
+
+// SetChannelLimit sets field value
+func (o *RegisteredSipTrunkRequest) SetChannelLimit(v int32) {
+	o.ChannelLimit = v
+}
+
+// GetBillingPackage returns the BillingPackage field value
+func (o *RegisteredSipTrunkRequest) GetBillingPackage() BillingPackage {
+	if o == nil {
+		var ret BillingPackage
+		return ret
+	}
+
+	return o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.BillingPackage, true
+}
+
+// SetBillingPackage sets field value
+func (o *RegisteredSipTrunkRequest) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *RegisteredSipTrunkRequest) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *RegisteredSipTrunkRequest) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *RegisteredSipTrunkRequest) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *RegisteredSipTrunkRequest) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *RegisteredSipTrunkRequest) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetInviteAuthentication returns the InviteAuthentication field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkRequest) GetInviteAuthentication() bool {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		var ret bool
+		return ret
+	}
+	return *o.InviteAuthentication
+}
+
+// GetInviteAuthenticationOk returns a tuple with the InviteAuthentication field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkRequest) GetInviteAuthenticationOk() (*bool, bool) {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		return nil, false
+	}
+	return o.InviteAuthentication, true
+}
+
+// HasInviteAuthentication returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkRequest) HasInviteAuthentication() bool {
+	if o != nil && !IsNil(o.InviteAuthentication) {
+		return true
+	}
+
+	return false
+}
+
+// SetInviteAuthentication gets a reference to the given bool and assigns it to the InviteAuthentication field.
+func (o *RegisteredSipTrunkRequest) SetInviteAuthentication(v bool) {
+	o.InviteAuthentication = &v
+}
+
+func (o RegisteredSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RegisteredSipTrunkRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	toSerialize["channelLimit"] = o.ChannelLimit
+	toSerialize["billingPackage"] = o.BillingPackage
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.InviteAuthentication) {
+		toSerialize["inviteAuthentication"] = o.InviteAuthentication
+	}
+	return toSerialize, nil
+}
+
+type NullableRegisteredSipTrunkRequest struct {
+	value *RegisteredSipTrunkRequest
+	isSet bool
+}
+
+func (v NullableRegisteredSipTrunkRequest) Get() *RegisteredSipTrunkRequest {
+	return v.value
+}
+
+func (v *NullableRegisteredSipTrunkRequest) Set(val *RegisteredSipTrunkRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRegisteredSipTrunkRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRegisteredSipTrunkRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRegisteredSipTrunkRequest(val *RegisteredSipTrunkRequest) *NullableRegisteredSipTrunkRequest {
+	return &NullableRegisteredSipTrunkRequest{value: val, isSet: true}
+}
+
+func (v NullableRegisteredSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRegisteredSipTrunkRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/registered_sip_trunk_response.go b/pkg/infobip/models/voice/registered_sip_trunk_response.go
new file mode 100644
index 0000000..d2e7de8
--- /dev/null
+++ b/pkg/infobip/models/voice/registered_sip_trunk_response.go
@@ -0,0 +1,674 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RegisteredSipTrunkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RegisteredSipTrunkResponse{}
+
+// RegisteredSipTrunkResponse struct for RegisteredSipTrunkResponse
+type RegisteredSipTrunkResponse struct {
+	Id                        *string
+	Type                      SipTrunkType
+	Name                      *string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	Codecs                    []AudioCodec
+	Dtmf                      *DtmfType
+	Fax                       *FaxType
+	NumberFormat              *NumberPresentationFormat
+	InternationalCallsAllowed *bool
+	ChannelLimit              *int32
+	Anonymization             *AnonymizationType
+	BillingPackage            *BillingPackage
+	SbcHosts                  *SbcHosts
+	SipOptions                *SipOptions
+	// Registration username.
+	Username *string
+	// Enables an authentication challenge for each call.
+	InviteAuthentication *bool
+}
+
+// NewRegisteredSipTrunkResponse instantiates a new RegisteredSipTrunkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewRegisteredSipTrunkResponse() *RegisteredSipTrunkResponse {
+	this := RegisteredSipTrunkResponse{}
+	this.Type = "REGISTERED"
+	return &this
+}
+
+// NewRegisteredSipTrunkResponseWithDefaults instantiates a new RegisteredSipTrunkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRegisteredSipTrunkResponseWithDefaults() *RegisteredSipTrunkResponse {
+	this := RegisteredSipTrunkResponse{}
+	this.Type = "REGISTERED"
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *RegisteredSipTrunkResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *RegisteredSipTrunkResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *RegisteredSipTrunkResponse) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *RegisteredSipTrunkResponse) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *RegisteredSipTrunkResponse) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *RegisteredSipTrunkResponse) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *RegisteredSipTrunkResponse) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *RegisteredSipTrunkResponse) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *RegisteredSipTrunkResponse) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetChannelLimit() int32 {
+	if o == nil || IsNil(o.ChannelLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetChannelLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChannelLimit) {
+		return nil, false
+	}
+	return o.ChannelLimit, true
+}
+
+// HasChannelLimit returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasChannelLimit() bool {
+	if o != nil && !IsNil(o.ChannelLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetChannelLimit gets a reference to the given int32 and assigns it to the ChannelLimit field.
+func (o *RegisteredSipTrunkResponse) SetChannelLimit(v int32) {
+	o.ChannelLimit = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *RegisteredSipTrunkResponse) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetBillingPackage returns the BillingPackage field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetBillingPackage() BillingPackage {
+	if o == nil || IsNil(o.BillingPackage) {
+		var ret BillingPackage
+		return ret
+	}
+	return *o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil || IsNil(o.BillingPackage) {
+		return nil, false
+	}
+	return o.BillingPackage, true
+}
+
+// HasBillingPackage returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasBillingPackage() bool {
+	if o != nil && !IsNil(o.BillingPackage) {
+		return true
+	}
+
+	return false
+}
+
+// SetBillingPackage gets a reference to the given BillingPackage and assigns it to the BillingPackage field.
+func (o *RegisteredSipTrunkResponse) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = &v
+}
+
+// GetSbcHosts returns the SbcHosts field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetSbcHosts() SbcHosts {
+	if o == nil || IsNil(o.SbcHosts) {
+		var ret SbcHosts
+		return ret
+	}
+	return *o.SbcHosts
+}
+
+// GetSbcHostsOk returns a tuple with the SbcHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetSbcHostsOk() (*SbcHosts, bool) {
+	if o == nil || IsNil(o.SbcHosts) {
+		return nil, false
+	}
+	return o.SbcHosts, true
+}
+
+// HasSbcHosts returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasSbcHosts() bool {
+	if o != nil && !IsNil(o.SbcHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSbcHosts gets a reference to the given SbcHosts and assigns it to the SbcHosts field.
+func (o *RegisteredSipTrunkResponse) SetSbcHosts(v SbcHosts) {
+	o.SbcHosts = &v
+}
+
+// GetSipOptions returns the SipOptions field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetSipOptions() SipOptions {
+	if o == nil || IsNil(o.SipOptions) {
+		var ret SipOptions
+		return ret
+	}
+	return *o.SipOptions
+}
+
+// GetSipOptionsOk returns a tuple with the SipOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetSipOptionsOk() (*SipOptions, bool) {
+	if o == nil || IsNil(o.SipOptions) {
+		return nil, false
+	}
+	return o.SipOptions, true
+}
+
+// HasSipOptions returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasSipOptions() bool {
+	if o != nil && !IsNil(o.SipOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipOptions gets a reference to the given SipOptions and assigns it to the SipOptions field.
+func (o *RegisteredSipTrunkResponse) SetSipOptions(v SipOptions) {
+	o.SipOptions = &v
+}
+
+// GetUsername returns the Username field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetUsername() string {
+	if o == nil || IsNil(o.Username) {
+		var ret string
+		return ret
+	}
+	return *o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetUsernameOk() (*string, bool) {
+	if o == nil || IsNil(o.Username) {
+		return nil, false
+	}
+	return o.Username, true
+}
+
+// HasUsername returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasUsername() bool {
+	if o != nil && !IsNil(o.Username) {
+		return true
+	}
+
+	return false
+}
+
+// SetUsername gets a reference to the given string and assigns it to the Username field.
+func (o *RegisteredSipTrunkResponse) SetUsername(v string) {
+	o.Username = &v
+}
+
+// GetInviteAuthentication returns the InviteAuthentication field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkResponse) GetInviteAuthentication() bool {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		var ret bool
+		return ret
+	}
+	return *o.InviteAuthentication
+}
+
+// GetInviteAuthenticationOk returns a tuple with the InviteAuthentication field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkResponse) GetInviteAuthenticationOk() (*bool, bool) {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		return nil, false
+	}
+	return o.InviteAuthentication, true
+}
+
+// HasInviteAuthentication returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkResponse) HasInviteAuthentication() bool {
+	if o != nil && !IsNil(o.InviteAuthentication) {
+		return true
+	}
+
+	return false
+}
+
+// SetInviteAuthentication gets a reference to the given bool and assigns it to the InviteAuthentication field.
+func (o *RegisteredSipTrunkResponse) SetInviteAuthentication(v bool) {
+	o.InviteAuthentication = &v
+}
+
+func (o RegisteredSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RegisteredSipTrunkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	if !IsNil(o.ChannelLimit) {
+		toSerialize["channelLimit"] = o.ChannelLimit
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.BillingPackage) {
+		toSerialize["billingPackage"] = o.BillingPackage
+	}
+	if !IsNil(o.SbcHosts) {
+		toSerialize["sbcHosts"] = o.SbcHosts
+	}
+	if !IsNil(o.SipOptions) {
+		toSerialize["sipOptions"] = o.SipOptions
+	}
+	if !IsNil(o.Username) {
+		toSerialize["username"] = o.Username
+	}
+	if !IsNil(o.InviteAuthentication) {
+		toSerialize["inviteAuthentication"] = o.InviteAuthentication
+	}
+	return toSerialize, nil
+}
+
+type NullableRegisteredSipTrunkResponse struct {
+	value *RegisteredSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableRegisteredSipTrunkResponse) Get() *RegisteredSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableRegisteredSipTrunkResponse) Set(val *RegisteredSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRegisteredSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRegisteredSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRegisteredSipTrunkResponse(val *RegisteredSipTrunkResponse) *NullableRegisteredSipTrunkResponse {
+	return &NullableRegisteredSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableRegisteredSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRegisteredSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/registered_sip_trunk_update_request.go b/pkg/infobip/models/voice/registered_sip_trunk_update_request.go
new file mode 100644
index 0000000..4fdf41b
--- /dev/null
+++ b/pkg/infobip/models/voice/registered_sip_trunk_update_request.go
@@ -0,0 +1,514 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RegisteredSipTrunkUpdateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RegisteredSipTrunkUpdateRequest{}
+
+// RegisteredSipTrunkUpdateRequest struct for RegisteredSipTrunkUpdateRequest
+type RegisteredSipTrunkUpdateRequest struct {
+	Type                      SipTrunkType
+	Name                      string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	InternationalCallsAllowed *bool
+	ChannelLimit              int32
+	BillingPackage            BillingPackage
+	// Enables an authentication challenge for each call.
+	InviteAuthentication *bool
+	// List of audio codecs supported by a SIP trunk.
+	Codecs        []AudioCodec
+	Dtmf          *DtmfType
+	Fax           *FaxType
+	Anonymization *AnonymizationType
+	NumberFormat  *NumberPresentationFormat
+}
+
+type _RegisteredSipTrunkUpdateRequest RegisteredSipTrunkUpdateRequest
+
+// NewRegisteredSipTrunkUpdateRequest instantiates a new RegisteredSipTrunkUpdateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewRegisteredSipTrunkUpdateRequest() *RegisteredSipTrunkUpdateRequest {
+	this := RegisteredSipTrunkUpdateRequest{}
+	this.Type = "REGISTERED"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	return &this
+}
+
+// NewRegisteredSipTrunkUpdateRequestWithDefaults instantiates a new RegisteredSipTrunkUpdateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRegisteredSipTrunkUpdateRequestWithDefaults() *RegisteredSipTrunkUpdateRequest {
+	this := RegisteredSipTrunkUpdateRequest{}
+	this.Type = "REGISTERED"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *RegisteredSipTrunkUpdateRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *RegisteredSipTrunkUpdateRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *RegisteredSipTrunkUpdateRequest) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *RegisteredSipTrunkUpdateRequest) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *RegisteredSipTrunkUpdateRequest) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value
+func (o *RegisteredSipTrunkUpdateRequest) GetChannelLimit() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetChannelLimitOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ChannelLimit, true
+}
+
+// SetChannelLimit sets field value
+func (o *RegisteredSipTrunkUpdateRequest) SetChannelLimit(v int32) {
+	o.ChannelLimit = v
+}
+
+// GetBillingPackage returns the BillingPackage field value
+func (o *RegisteredSipTrunkUpdateRequest) GetBillingPackage() BillingPackage {
+	if o == nil {
+		var ret BillingPackage
+		return ret
+	}
+
+	return o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.BillingPackage, true
+}
+
+// SetBillingPackage sets field value
+func (o *RegisteredSipTrunkUpdateRequest) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = v
+}
+
+// GetInviteAuthentication returns the InviteAuthentication field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetInviteAuthentication() bool {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		var ret bool
+		return ret
+	}
+	return *o.InviteAuthentication
+}
+
+// GetInviteAuthenticationOk returns a tuple with the InviteAuthentication field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetInviteAuthenticationOk() (*bool, bool) {
+	if o == nil || IsNil(o.InviteAuthentication) {
+		return nil, false
+	}
+	return o.InviteAuthentication, true
+}
+
+// HasInviteAuthentication returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasInviteAuthentication() bool {
+	if o != nil && !IsNil(o.InviteAuthentication) {
+		return true
+	}
+
+	return false
+}
+
+// SetInviteAuthentication gets a reference to the given bool and assigns it to the InviteAuthentication field.
+func (o *RegisteredSipTrunkUpdateRequest) SetInviteAuthentication(v bool) {
+	o.InviteAuthentication = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *RegisteredSipTrunkUpdateRequest) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *RegisteredSipTrunkUpdateRequest) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *RegisteredSipTrunkUpdateRequest) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *RegisteredSipTrunkUpdateRequest) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *RegisteredSipTrunkUpdateRequest) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RegisteredSipTrunkUpdateRequest) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *RegisteredSipTrunkUpdateRequest) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *RegisteredSipTrunkUpdateRequest) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+func (o RegisteredSipTrunkUpdateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RegisteredSipTrunkUpdateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	toSerialize["channelLimit"] = o.ChannelLimit
+	toSerialize["billingPackage"] = o.BillingPackage
+	if !IsNil(o.InviteAuthentication) {
+		toSerialize["inviteAuthentication"] = o.InviteAuthentication
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	return toSerialize, nil
+}
+
+type NullableRegisteredSipTrunkUpdateRequest struct {
+	value *RegisteredSipTrunkUpdateRequest
+	isSet bool
+}
+
+func (v NullableRegisteredSipTrunkUpdateRequest) Get() *RegisteredSipTrunkUpdateRequest {
+	return v.value
+}
+
+func (v *NullableRegisteredSipTrunkUpdateRequest) Set(val *RegisteredSipTrunkUpdateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRegisteredSipTrunkUpdateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRegisteredSipTrunkUpdateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRegisteredSipTrunkUpdateRequest(val *RegisteredSipTrunkUpdateRequest) *NullableRegisteredSipTrunkUpdateRequest {
+	return &NullableRegisteredSipTrunkUpdateRequest{value: val, isSet: true}
+}
+
+func (v NullableRegisteredSipTrunkUpdateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRegisteredSipTrunkUpdateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/repeat_until.go b/pkg/infobip/models/voice/repeat_until.go
new file mode 100644
index 0000000..ec2593b
--- /dev/null
+++ b/pkg/infobip/models/voice/repeat_until.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RepeatUntil type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RepeatUntil{}
+
+// RepeatUntil This action is deprecated and should not be used, as it leads to incorrect behaviour and it will not be supported in the future. Please, use repeat-while loop instead.
+type RepeatUntil struct {
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Repeat []ScriptInner
+	// The expression to evaluate.
+	Until string
+}
+
+type _RepeatUntil RepeatUntil
+
+// NewRepeatUntil instantiates a new RepeatUntil object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRepeatUntil(repeat []ScriptInner, until string) *RepeatUntil {
+	this := RepeatUntil{}
+	this.Repeat = repeat
+	this.Until = until
+	return &this
+}
+
+// NewRepeatUntilWithDefaults instantiates a new RepeatUntil object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRepeatUntilWithDefaults() *RepeatUntil {
+	this := RepeatUntil{}
+
+	return &this
+}
+
+// GetRepeat returns the Repeat field value
+func (o *RepeatUntil) GetRepeat() []ScriptInner {
+	if o == nil {
+		var ret []ScriptInner
+		return ret
+	}
+
+	return o.Repeat
+}
+
+// GetRepeatOk returns a tuple with the Repeat field value
+// and a boolean to check if the value has been set.
+func (o *RepeatUntil) GetRepeatOk() ([]ScriptInner, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Repeat, true
+}
+
+// SetRepeat sets field value
+func (o *RepeatUntil) SetRepeat(v []ScriptInner) {
+	o.Repeat = v
+}
+
+// GetUntil returns the Until field value
+func (o *RepeatUntil) GetUntil() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Until
+}
+
+// GetUntilOk returns a tuple with the Until field value
+// and a boolean to check if the value has been set.
+func (o *RepeatUntil) GetUntilOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Until, true
+}
+
+// SetUntil sets field value
+func (o *RepeatUntil) SetUntil(v string) {
+	o.Until = v
+}
+
+func (o RepeatUntil) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RepeatUntil) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["repeat"] = o.Repeat
+	toSerialize["until"] = o.Until
+	return toSerialize, nil
+}
+
+type NullableRepeatUntil struct {
+	value *RepeatUntil
+	isSet bool
+}
+
+func (v NullableRepeatUntil) Get() *RepeatUntil {
+	return v.value
+}
+
+func (v *NullableRepeatUntil) Set(val *RepeatUntil) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRepeatUntil) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRepeatUntil) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRepeatUntil(val *RepeatUntil) *NullableRepeatUntil {
+	return &NullableRepeatUntil{value: val, isSet: true}
+}
+
+func (v NullableRepeatUntil) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRepeatUntil) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/repeat_while.go b/pkg/infobip/models/voice/repeat_while.go
new file mode 100644
index 0000000..885cfab
--- /dev/null
+++ b/pkg/infobip/models/voice/repeat_while.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RepeatWhile type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RepeatWhile{}
+
+// RepeatWhile Repeat-While action is a control flow statement that repeatedly executes a block of code, as long as the boolean condition in the while field is true. Comparison is done using equal (==) or not equal (!=) operators. Make sure not to provide a condition that causes an infinite loop.
+type RepeatWhile struct {
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Repeat []ScriptInner
+	// The expression to evaluate.
+	While string
+}
+
+type _RepeatWhile RepeatWhile
+
+// NewRepeatWhile instantiates a new RepeatWhile object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRepeatWhile(repeat []ScriptInner, while string) *RepeatWhile {
+	this := RepeatWhile{}
+	this.Repeat = repeat
+	this.While = while
+	return &this
+}
+
+// NewRepeatWhileWithDefaults instantiates a new RepeatWhile object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRepeatWhileWithDefaults() *RepeatWhile {
+	this := RepeatWhile{}
+
+	return &this
+}
+
+// GetRepeat returns the Repeat field value
+func (o *RepeatWhile) GetRepeat() []ScriptInner {
+	if o == nil {
+		var ret []ScriptInner
+		return ret
+	}
+
+	return o.Repeat
+}
+
+// GetRepeatOk returns a tuple with the Repeat field value
+// and a boolean to check if the value has been set.
+func (o *RepeatWhile) GetRepeatOk() ([]ScriptInner, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Repeat, true
+}
+
+// SetRepeat sets field value
+func (o *RepeatWhile) SetRepeat(v []ScriptInner) {
+	o.Repeat = v
+}
+
+// GetWhile returns the While field value
+func (o *RepeatWhile) GetWhile() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.While
+}
+
+// GetWhileOk returns a tuple with the While field value
+// and a boolean to check if the value has been set.
+func (o *RepeatWhile) GetWhileOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.While, true
+}
+
+// SetWhile sets field value
+func (o *RepeatWhile) SetWhile(v string) {
+	o.While = v
+}
+
+func (o RepeatWhile) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RepeatWhile) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["repeat"] = o.Repeat
+	toSerialize["while"] = o.While
+	return toSerialize, nil
+}
+
+type NullableRepeatWhile struct {
+	value *RepeatWhile
+	isSet bool
+}
+
+func (v NullableRepeatWhile) Get() *RepeatWhile {
+	return v.value
+}
+
+func (v *NullableRepeatWhile) Set(val *RepeatWhile) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRepeatWhile) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRepeatWhile) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRepeatWhile(val *RepeatWhile) *NullableRepeatWhile {
+	return &NullableRepeatWhile{value: val, isSet: true}
+}
+
+func (v NullableRepeatWhile) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRepeatWhile) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/sms/report.go b/pkg/infobip/models/voice/report.go
similarity index 60%
rename from pkg/infobip/models/sms/report.go
rename to pkg/infobip/models/voice/report.go
index c10b04f..3b7115a 100644
--- a/pkg/infobip/models/sms/report.go
+++ b/pkg/infobip/models/voice/report.go
@@ -8,7 +8,7 @@ Contact: support@infobip.com
 
 // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
 
-package sms
+package voice
 
 import (
 	"encoding/json"
@@ -19,41 +19,33 @@ import (
 // checks if the Report type satisfies the MappedNullable interface at compile time
 var _ MappedNullable = &Report{}
 
-// Report struct for Report
+// Report Arrays of delivery reports, one object for every message.
 type Report struct {
-	// Unique ID assigned to the request if messaging multiple recipients or sending multiple messages via a single API request.
+	// The ID that uniquely identifies the bulk of messages.
 	BulkId *string
-	// Unique message ID.
+	// The ID that uniquely identifies the message sent.
 	MessageId *string
-	// Message destination address.
-	To *string
-	// The sender ID which can be alphanumeric or numeric (e.g., `CompanyName`).
+	// The sender ID which can be alphanumeric or numeric.
 	From *string
-	// Date and time when the message was [scheduled](#channels/sms/get-scheduled-sms-messages) to be sent. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
-	SentAt *Time
-	// Date and time when the Infobip services finished processing the message (i.e., delivered to the destination, delivered to the destination network, etc.). Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
-	DoneAt *Time
-	// The number of parts the message content was split into.
-	SmsCount *int32
+	// Destination address of the voice message.
+	To *string
+	// Date and time when the voice message was initiated. Has the following format: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
+	SentAt *string
 	// Mobile country and network codes.
 	MccMnc *string
-	// Callback data sent through ‛callbackData‛ field when sending message.
+	// Custom data sent over to the notifyUrl.
 	CallbackData *string
+	VoiceCall    *VoiceData
 	Price        *Price
-	Status       *Status
-	Error        *Error
-	// The entity used when sending the message. For more details, see our [documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management).
-	EntityId *string
-	// The application used when sending the message. For more details, see our [documentation](https://www.infobip.com/docs/cpaas-x/application-and-entity-management).
-	ApplicationId *string
-	// ID that allows you to track, analyze, and show an aggregated overview and the performance of individual campaigns per sending channel.
-	CampaignReferenceId *string
+	Status       *SingleMessageStatus
+	Error        *VoiceError
 }
 
 // NewReport instantiates a new Report object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
+
 func NewReport() *Report {
 	this := Report{}
 	return &this
@@ -64,6 +56,7 @@ func NewReport() *Report {
 // but it doesn't guarantee that properties required by API are set
 func NewReportWithDefaults() *Report {
 	this := Report{}
+
 	return &this
 }
 
@@ -131,38 +124,6 @@ func (o *Report) SetMessageId(v string) {
 	o.MessageId = &v
 }
 
-// GetTo returns the To field value if set, zero value otherwise.
-func (o *Report) GetTo() string {
-	if o == nil || IsNil(o.To) {
-		var ret string
-		return ret
-	}
-	return *o.To
-}
-
-// GetToOk returns a tuple with the To field value if set, nil otherwise
-// and a boolean to check if the value has been set.
-func (o *Report) GetToOk() (*string, bool) {
-	if o == nil || IsNil(o.To) {
-		return nil, false
-	}
-	return o.To, true
-}
-
-// HasTo returns a boolean if a field has been set.
-func (o *Report) HasTo() bool {
-	if o != nil && !IsNil(o.To) {
-		return true
-	}
-
-	return false
-}
-
-// SetTo gets a reference to the given string and assigns it to the To field.
-func (o *Report) SetTo(v string) {
-	o.To = &v
-}
-
 // GetFrom returns the From field value if set, zero value otherwise.
 func (o *Report) GetFrom() string {
 	if o == nil || IsNil(o.From) {
@@ -195,100 +156,68 @@ func (o *Report) SetFrom(v string) {
 	o.From = &v
 }
 
-// GetSentAt returns the SentAt field value if set, zero value otherwise.
-func (o *Report) GetSentAt() Time {
-	if o == nil || IsNil(o.SentAt) {
-		var ret Time
-		return ret
-	}
-	return *o.SentAt
-}
-
-// GetSentAtOk returns a tuple with the SentAt field value if set, nil otherwise
-// and a boolean to check if the value has been set.
-func (o *Report) GetSentAtOk() (*Time, bool) {
-	if o == nil || IsNil(o.SentAt) {
-		return nil, false
-	}
-	return o.SentAt, true
-}
-
-// HasSentAt returns a boolean if a field has been set.
-func (o *Report) HasSentAt() bool {
-	if o != nil && !IsNil(o.SentAt) {
-		return true
-	}
-
-	return false
-}
-
-// SetSentAt gets a reference to the given Time and assigns it to the SentAt field.
-func (o *Report) SetSentAt(v Time) {
-	o.SentAt = &v
-}
-
-// GetDoneAt returns the DoneAt field value if set, zero value otherwise.
-func (o *Report) GetDoneAt() Time {
-	if o == nil || IsNil(o.DoneAt) {
-		var ret Time
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *Report) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
 		return ret
 	}
-	return *o.DoneAt
+	return *o.To
 }
 
-// GetDoneAtOk returns a tuple with the DoneAt field value if set, nil otherwise
+// GetToOk returns a tuple with the To field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Report) GetDoneAtOk() (*Time, bool) {
-	if o == nil || IsNil(o.DoneAt) {
+func (o *Report) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
 		return nil, false
 	}
-	return o.DoneAt, true
+	return o.To, true
 }
 
-// HasDoneAt returns a boolean if a field has been set.
-func (o *Report) HasDoneAt() bool {
-	if o != nil && !IsNil(o.DoneAt) {
+// HasTo returns a boolean if a field has been set.
+func (o *Report) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
 		return true
 	}
 
 	return false
 }
 
-// SetDoneAt gets a reference to the given Time and assigns it to the DoneAt field.
-func (o *Report) SetDoneAt(v Time) {
-	o.DoneAt = &v
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *Report) SetTo(v string) {
+	o.To = &v
 }
 
-// GetSmsCount returns the SmsCount field value if set, zero value otherwise.
-func (o *Report) GetSmsCount() int32 {
-	if o == nil || IsNil(o.SmsCount) {
-		var ret int32
+// GetSentAt returns the SentAt field value if set, zero value otherwise.
+func (o *Report) GetSentAt() string {
+	if o == nil || IsNil(o.SentAt) {
+		var ret string
 		return ret
 	}
-	return *o.SmsCount
+	return *o.SentAt
 }
 
-// GetSmsCountOk returns a tuple with the SmsCount field value if set, nil otherwise
+// GetSentAtOk returns a tuple with the SentAt field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Report) GetSmsCountOk() (*int32, bool) {
-	if o == nil || IsNil(o.SmsCount) {
+func (o *Report) GetSentAtOk() (*string, bool) {
+	if o == nil || IsNil(o.SentAt) {
 		return nil, false
 	}
-	return o.SmsCount, true
+	return o.SentAt, true
 }
 
-// HasSmsCount returns a boolean if a field has been set.
-func (o *Report) HasSmsCount() bool {
-	if o != nil && !IsNil(o.SmsCount) {
+// HasSentAt returns a boolean if a field has been set.
+func (o *Report) HasSentAt() bool {
+	if o != nil && !IsNil(o.SentAt) {
 		return true
 	}
 
 	return false
 }
 
-// SetSmsCount gets a reference to the given int32 and assigns it to the SmsCount field.
-func (o *Report) SetSmsCount(v int32) {
-	o.SmsCount = &v
+// SetSentAt gets a reference to the given string and assigns it to the SentAt field.
+func (o *Report) SetSentAt(v string) {
+	o.SentAt = &v
 }
 
 // GetMccMnc returns the MccMnc field value if set, zero value otherwise.
@@ -355,6 +284,38 @@ func (o *Report) SetCallbackData(v string) {
 	o.CallbackData = &v
 }
 
+// GetVoiceCall returns the VoiceCall field value if set, zero value otherwise.
+func (o *Report) GetVoiceCall() VoiceData {
+	if o == nil || IsNil(o.VoiceCall) {
+		var ret VoiceData
+		return ret
+	}
+	return *o.VoiceCall
+}
+
+// GetVoiceCallOk returns a tuple with the VoiceCall field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Report) GetVoiceCallOk() (*VoiceData, bool) {
+	if o == nil || IsNil(o.VoiceCall) {
+		return nil, false
+	}
+	return o.VoiceCall, true
+}
+
+// HasVoiceCall returns a boolean if a field has been set.
+func (o *Report) HasVoiceCall() bool {
+	if o != nil && !IsNil(o.VoiceCall) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoiceCall gets a reference to the given VoiceData and assigns it to the VoiceCall field.
+func (o *Report) SetVoiceCall(v VoiceData) {
+	o.VoiceCall = &v
+}
+
 // GetPrice returns the Price field value if set, zero value otherwise.
 func (o *Report) GetPrice() Price {
 	if o == nil || IsNil(o.Price) {
@@ -388,9 +349,9 @@ func (o *Report) SetPrice(v Price) {
 }
 
 // GetStatus returns the Status field value if set, zero value otherwise.
-func (o *Report) GetStatus() Status {
+func (o *Report) GetStatus() SingleMessageStatus {
 	if o == nil || IsNil(o.Status) {
-		var ret Status
+		var ret SingleMessageStatus
 		return ret
 	}
 	return *o.Status
@@ -398,7 +359,7 @@ func (o *Report) GetStatus() Status {
 
 // GetStatusOk returns a tuple with the Status field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Report) GetStatusOk() (*Status, bool) {
+func (o *Report) GetStatusOk() (*SingleMessageStatus, bool) {
 	if o == nil || IsNil(o.Status) {
 		return nil, false
 	}
@@ -414,15 +375,15 @@ func (o *Report) HasStatus() bool {
 	return false
 }
 
-// SetStatus gets a reference to the given Status and assigns it to the Status field.
-func (o *Report) SetStatus(v Status) {
+// SetStatus gets a reference to the given SingleMessageStatus and assigns it to the Status field.
+func (o *Report) SetStatus(v SingleMessageStatus) {
 	o.Status = &v
 }
 
 // GetError returns the Error field value if set, zero value otherwise.
-func (o *Report) GetError() Error {
+func (o *Report) GetError() VoiceError {
 	if o == nil || IsNil(o.Error) {
-		var ret Error
+		var ret VoiceError
 		return ret
 	}
 	return *o.Error
@@ -430,7 +391,7 @@ func (o *Report) GetError() Error {
 
 // GetErrorOk returns a tuple with the Error field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *Report) GetErrorOk() (*Error, bool) {
+func (o *Report) GetErrorOk() (*VoiceError, bool) {
 	if o == nil || IsNil(o.Error) {
 		return nil, false
 	}
@@ -446,107 +407,11 @@ func (o *Report) HasError() bool {
 	return false
 }
 
-// SetError gets a reference to the given Error and assigns it to the Error field.
-func (o *Report) SetError(v Error) {
+// SetError gets a reference to the given VoiceError and assigns it to the Error field.
+func (o *Report) SetError(v VoiceError) {
 	o.Error = &v
 }
 
-// GetEntityId returns the EntityId field value if set, zero value otherwise.
-func (o *Report) GetEntityId() string {
-	if o == nil || IsNil(o.EntityId) {
-		var ret string
-		return ret
-	}
-	return *o.EntityId
-}
-
-// GetEntityIdOk returns a tuple with the EntityId field value if set, nil otherwise
-// and a boolean to check if the value has been set.
-func (o *Report) GetEntityIdOk() (*string, bool) {
-	if o == nil || IsNil(o.EntityId) {
-		return nil, false
-	}
-	return o.EntityId, true
-}
-
-// HasEntityId returns a boolean if a field has been set.
-func (o *Report) HasEntityId() bool {
-	if o != nil && !IsNil(o.EntityId) {
-		return true
-	}
-
-	return false
-}
-
-// SetEntityId gets a reference to the given string and assigns it to the EntityId field.
-func (o *Report) SetEntityId(v string) {
-	o.EntityId = &v
-}
-
-// GetApplicationId returns the ApplicationId field value if set, zero value otherwise.
-func (o *Report) GetApplicationId() string {
-	if o == nil || IsNil(o.ApplicationId) {
-		var ret string
-		return ret
-	}
-	return *o.ApplicationId
-}
-
-// GetApplicationIdOk returns a tuple with the ApplicationId field value if set, nil otherwise
-// and a boolean to check if the value has been set.
-func (o *Report) GetApplicationIdOk() (*string, bool) {
-	if o == nil || IsNil(o.ApplicationId) {
-		return nil, false
-	}
-	return o.ApplicationId, true
-}
-
-// HasApplicationId returns a boolean if a field has been set.
-func (o *Report) HasApplicationId() bool {
-	if o != nil && !IsNil(o.ApplicationId) {
-		return true
-	}
-
-	return false
-}
-
-// SetApplicationId gets a reference to the given string and assigns it to the ApplicationId field.
-func (o *Report) SetApplicationId(v string) {
-	o.ApplicationId = &v
-}
-
-// GetCampaignReferenceId returns the CampaignReferenceId field value if set, zero value otherwise.
-func (o *Report) GetCampaignReferenceId() string {
-	if o == nil || IsNil(o.CampaignReferenceId) {
-		var ret string
-		return ret
-	}
-	return *o.CampaignReferenceId
-}
-
-// GetCampaignReferenceIdOk returns a tuple with the CampaignReferenceId field value if set, nil otherwise
-// and a boolean to check if the value has been set.
-func (o *Report) GetCampaignReferenceIdOk() (*string, bool) {
-	if o == nil || IsNil(o.CampaignReferenceId) {
-		return nil, false
-	}
-	return o.CampaignReferenceId, true
-}
-
-// HasCampaignReferenceId returns a boolean if a field has been set.
-func (o *Report) HasCampaignReferenceId() bool {
-	if o != nil && !IsNil(o.CampaignReferenceId) {
-		return true
-	}
-
-	return false
-}
-
-// SetCampaignReferenceId gets a reference to the given string and assigns it to the CampaignReferenceId field.
-func (o *Report) SetCampaignReferenceId(v string) {
-	o.CampaignReferenceId = &v
-}
-
 func (o Report) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
@@ -563,27 +428,24 @@ func (o Report) ToMap() (map[string]interface{}, error) {
 	if !IsNil(o.MessageId) {
 		toSerialize["messageId"] = o.MessageId
 	}
-	if !IsNil(o.To) {
-		toSerialize["to"] = o.To
-	}
 	if !IsNil(o.From) {
 		toSerialize["from"] = o.From
 	}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
 	if !IsNil(o.SentAt) {
 		toSerialize["sentAt"] = o.SentAt
 	}
-	if !IsNil(o.DoneAt) {
-		toSerialize["doneAt"] = o.DoneAt
-	}
-	if !IsNil(o.SmsCount) {
-		toSerialize["smsCount"] = o.SmsCount
-	}
 	if !IsNil(o.MccMnc) {
 		toSerialize["mccMnc"] = o.MccMnc
 	}
 	if !IsNil(o.CallbackData) {
 		toSerialize["callbackData"] = o.CallbackData
 	}
+	if !IsNil(o.VoiceCall) {
+		toSerialize["voiceCall"] = o.VoiceCall
+	}
 	if !IsNil(o.Price) {
 		toSerialize["price"] = o.Price
 	}
@@ -593,15 +455,6 @@ func (o Report) ToMap() (map[string]interface{}, error) {
 	if !IsNil(o.Error) {
 		toSerialize["error"] = o.Error
 	}
-	if !IsNil(o.EntityId) {
-		toSerialize["entityId"] = o.EntityId
-	}
-	if !IsNil(o.ApplicationId) {
-		toSerialize["applicationId"] = o.ApplicationId
-	}
-	if !IsNil(o.CampaignReferenceId) {
-		toSerialize["campaignReferenceId"] = o.CampaignReferenceId
-	}
 	return toSerialize, nil
 }
 
diff --git a/pkg/infobip/models/sms/delivery_result.go b/pkg/infobip/models/voice/report_response.go
similarity index 57%
rename from pkg/infobip/models/sms/delivery_result.go
rename to pkg/infobip/models/voice/report_response.go
index f6c9f94..7412f34 100644
--- a/pkg/infobip/models/sms/delivery_result.go
+++ b/pkg/infobip/models/voice/report_response.go
@@ -8,7 +8,7 @@ Contact: support@infobip.com
 
 // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
 
-package sms
+package voice
 
 import (
 	"encoding/json"
@@ -16,33 +16,36 @@ import (
 	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
 )
 
-// checks if the DeliveryResult type satisfies the MappedNullable interface at compile time
-var _ MappedNullable = &DeliveryResult{}
+// checks if the ReportResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ReportResponse{}
 
-// DeliveryResult struct for DeliveryResult
-type DeliveryResult struct {
+// ReportResponse struct for ReportResponse
+type ReportResponse struct {
+	// Arrays of delivery reports, one object for every message.
 	Results []Report
 }
 
-// NewDeliveryResult instantiates a new DeliveryResult object
+// NewReportResponse instantiates a new ReportResponse object
 // This constructor will assign default values to properties that have it defined,
 // and makes sure properties required by API are set, but the set of arguments
 // will change when the set of required properties is changed
-func NewDeliveryResult() *DeliveryResult {
-	this := DeliveryResult{}
+
+func NewReportResponse() *ReportResponse {
+	this := ReportResponse{}
 	return &this
 }
 
-// NewDeliveryResultWithDefaults instantiates a new DeliveryResult object
+// NewReportResponseWithDefaults instantiates a new ReportResponse object
 // This constructor will only assign default values to properties that have it defined,
 // but it doesn't guarantee that properties required by API are set
-func NewDeliveryResultWithDefaults() *DeliveryResult {
-	this := DeliveryResult{}
+func NewReportResponseWithDefaults() *ReportResponse {
+	this := ReportResponse{}
+
 	return &this
 }
 
 // GetResults returns the Results field value if set, zero value otherwise.
-func (o *DeliveryResult) GetResults() []Report {
+func (o *ReportResponse) GetResults() []Report {
 	if o == nil || IsNil(o.Results) {
 		var ret []Report
 		return ret
@@ -52,7 +55,7 @@ func (o *DeliveryResult) GetResults() []Report {
 
 // GetResultsOk returns a tuple with the Results field value if set, nil otherwise
 // and a boolean to check if the value has been set.
-func (o *DeliveryResult) GetResultsOk() ([]Report, bool) {
+func (o *ReportResponse) GetResultsOk() ([]Report, bool) {
 	if o == nil || IsNil(o.Results) {
 		return nil, false
 	}
@@ -60,7 +63,7 @@ func (o *DeliveryResult) GetResultsOk() ([]Report, bool) {
 }
 
 // HasResults returns a boolean if a field has been set.
-func (o *DeliveryResult) HasResults() bool {
+func (o *ReportResponse) HasResults() bool {
 	if o != nil && !IsNil(o.Results) {
 		return true
 	}
@@ -69,11 +72,11 @@ func (o *DeliveryResult) HasResults() bool {
 }
 
 // SetResults gets a reference to the given []Report and assigns it to the Results field.
-func (o *DeliveryResult) SetResults(v []Report) {
+func (o *ReportResponse) SetResults(v []Report) {
 	o.Results = v
 }
 
-func (o DeliveryResult) MarshalJSON() ([]byte, error) {
+func (o ReportResponse) MarshalJSON() ([]byte, error) {
 	toSerialize, err := o.ToMap()
 	if err != nil {
 		return []byte{}, err
@@ -81,7 +84,7 @@ func (o DeliveryResult) MarshalJSON() ([]byte, error) {
 	return json.Marshal(toSerialize)
 }
 
-func (o DeliveryResult) ToMap() (map[string]interface{}, error) {
+func (o ReportResponse) ToMap() (map[string]interface{}, error) {
 	toSerialize := map[string]interface{}{}
 	if !IsNil(o.Results) {
 		toSerialize["results"] = o.Results
@@ -89,38 +92,38 @@ func (o DeliveryResult) ToMap() (map[string]interface{}, error) {
 	return toSerialize, nil
 }
 
-type NullableDeliveryResult struct {
-	value *DeliveryResult
+type NullableReportResponse struct {
+	value *ReportResponse
 	isSet bool
 }
 
-func (v NullableDeliveryResult) Get() *DeliveryResult {
+func (v NullableReportResponse) Get() *ReportResponse {
 	return v.value
 }
 
-func (v *NullableDeliveryResult) Set(val *DeliveryResult) {
+func (v *NullableReportResponse) Set(val *ReportResponse) {
 	v.value = val
 	v.isSet = true
 }
 
-func (v NullableDeliveryResult) IsSet() bool {
+func (v NullableReportResponse) IsSet() bool {
 	return v.isSet
 }
 
-func (v *NullableDeliveryResult) Unset() {
+func (v *NullableReportResponse) Unset() {
 	v.value = nil
 	v.isSet = false
 }
 
-func NewNullableDeliveryResult(val *DeliveryResult) *NullableDeliveryResult {
-	return &NullableDeliveryResult{value: val, isSet: true}
+func NewNullableReportResponse(val *ReportResponse) *NullableReportResponse {
+	return &NullableReportResponse{value: val, isSet: true}
 }
 
-func (v NullableDeliveryResult) MarshalJSON() ([]byte, error) {
+func (v NullableReportResponse) MarshalJSON() ([]byte, error) {
 	return json.Marshal(v.value)
 }
 
-func (v *NullableDeliveryResult) UnmarshalJSON(src []byte) error {
+func (v *NullableReportResponse) UnmarshalJSON(src []byte) error {
 	v.isSet = true
 	return json.Unmarshal(src, &v.value)
 }
diff --git a/pkg/infobip/models/voice/reschedule_request.go b/pkg/infobip/models/voice/reschedule_request.go
new file mode 100644
index 0000000..084ff84
--- /dev/null
+++ b/pkg/infobip/models/voice/reschedule_request.go
@@ -0,0 +1,122 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RescheduleRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RescheduleRequest{}
+
+// RescheduleRequest struct for RescheduleRequest
+type RescheduleRequest struct {
+	// Rescheduled start time.
+	StartTime Time
+}
+
+type _RescheduleRequest RescheduleRequest
+
+// NewRescheduleRequest instantiates a new RescheduleRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRescheduleRequest(startTime Time) *RescheduleRequest {
+	this := RescheduleRequest{}
+	this.StartTime = startTime
+	return &this
+}
+
+// NewRescheduleRequestWithDefaults instantiates a new RescheduleRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRescheduleRequestWithDefaults() *RescheduleRequest {
+	this := RescheduleRequest{}
+
+	return &this
+}
+
+// GetStartTime returns the StartTime field value
+func (o *RescheduleRequest) GetStartTime() Time {
+	if o == nil {
+		var ret Time
+		return ret
+	}
+
+	return o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value
+// and a boolean to check if the value has been set.
+func (o *RescheduleRequest) GetStartTimeOk() (*Time, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.StartTime, true
+}
+
+// SetStartTime sets field value
+func (o *RescheduleRequest) SetStartTime(v Time) {
+	o.StartTime = v
+}
+
+func (o RescheduleRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RescheduleRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["startTime"] = o.StartTime
+	return toSerialize, nil
+}
+
+type NullableRescheduleRequest struct {
+	value *RescheduleRequest
+	isSet bool
+}
+
+func (v NullableRescheduleRequest) Get() *RescheduleRequest {
+	return v.value
+}
+
+func (v *NullableRescheduleRequest) Set(val *RescheduleRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRescheduleRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRescheduleRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRescheduleRequest(val *RescheduleRequest) *NullableRescheduleRequest {
+	return &NullableRescheduleRequest{value: val, isSet: true}
+}
+
+func (v NullableRescheduleRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRescheduleRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/retry.go b/pkg/infobip/models/voice/retry.go
new file mode 100644
index 0000000..a6e8085
--- /dev/null
+++ b/pkg/infobip/models/voice/retry.go
@@ -0,0 +1,178 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Retry type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Retry{}
+
+// Retry Used to define if the delivery of the Voice messages should be retried in case the first try doesn't succeed. Additional retries will be made according to the schedule defined by _minPeriod_ and _maxPeriod_ parameters and platform's internal retry logic. If the _minPeriod_ differs _maxPeriod_, delivery will be retried in the following manner: after 1 min, 2 min, 5 min, 10 min, 20 min, 30 min, 1 hour, 2 hours, 4 hours, 8 hours, 16 hours, 24 hours or until maxPeriod is reached.  If the retry attempt for the _maxPeriod_ is reached, the _maxPeriod_ will be used for all subsequent retries. If the _minPeriod_ and the _maxPeriod_ are defined as equal values, the period of time between retries will be equal to this value. Message delivery will be retried until the successful delivery or message validity or _maxCount_ value is reached.
+type Retry struct {
+	// Specify the maximum number of retry attempts. Maximum value of the maxCount is `4`. If the value is higher than `4`, it will be set to `4`.
+	MaxCount int32
+	// Defines the maximum waiting time (in minutes) after the previous failed attempt to try to deliver the message again. Supported values are 1 min, 2 min, 5 min, 10 min, 20 min, 30 min, 1 hour, 2 hours, 4 hours, 8 hours, 16 hours, 24 hours. If entered a value that isn't from the previous list but that's smaller than 24 hours, it is used the next bigger value from the list. If entered value that is bigger than 24 hours than it is used 24 hours.
+	MaxPeriod int32
+	// Defines the minimal waiting time (in minutes) after the previous failed attempt to try to deliver the message again. Supported values are 1 min, 2 min, 5 min, 10 min, 20 min, 30 min, 1 hour, 2 hours, 4 hours, 8 hours, 16 hours, 24 hours. If entered a value that isn't from the previous list but that's smaller than 24 hours, it is used the next bigger value from the list. If entered value that is bigger than 24 hours than it is used 24 hours.
+	MinPeriod int32
+}
+
+type _Retry Retry
+
+// NewRetry instantiates a new Retry object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRetry(maxCount int32, maxPeriod int32, minPeriod int32) *Retry {
+	this := Retry{}
+	this.MaxCount = maxCount
+	this.MaxPeriod = maxPeriod
+	this.MinPeriod = minPeriod
+	return &this
+}
+
+// NewRetryWithDefaults instantiates a new Retry object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRetryWithDefaults() *Retry {
+	this := Retry{}
+
+	return &this
+}
+
+// GetMaxCount returns the MaxCount field value
+func (o *Retry) GetMaxCount() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.MaxCount
+}
+
+// GetMaxCountOk returns a tuple with the MaxCount field value
+// and a boolean to check if the value has been set.
+func (o *Retry) GetMaxCountOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MaxCount, true
+}
+
+// SetMaxCount sets field value
+func (o *Retry) SetMaxCount(v int32) {
+	o.MaxCount = v
+}
+
+// GetMaxPeriod returns the MaxPeriod field value
+func (o *Retry) GetMaxPeriod() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.MaxPeriod
+}
+
+// GetMaxPeriodOk returns a tuple with the MaxPeriod field value
+// and a boolean to check if the value has been set.
+func (o *Retry) GetMaxPeriodOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MaxPeriod, true
+}
+
+// SetMaxPeriod sets field value
+func (o *Retry) SetMaxPeriod(v int32) {
+	o.MaxPeriod = v
+}
+
+// GetMinPeriod returns the MinPeriod field value
+func (o *Retry) GetMinPeriod() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.MinPeriod
+}
+
+// GetMinPeriodOk returns a tuple with the MinPeriod field value
+// and a boolean to check if the value has been set.
+func (o *Retry) GetMinPeriodOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MinPeriod, true
+}
+
+// SetMinPeriod sets field value
+func (o *Retry) SetMinPeriod(v int32) {
+	o.MinPeriod = v
+}
+
+func (o Retry) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Retry) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["maxCount"] = o.MaxCount
+	toSerialize["maxPeriod"] = o.MaxPeriod
+	toSerialize["minPeriod"] = o.MinPeriod
+	return toSerialize, nil
+}
+
+type NullableRetry struct {
+	value *Retry
+	isSet bool
+}
+
+func (v NullableRetry) Get() *Retry {
+	return v.value
+}
+
+func (v *NullableRetry) Set(val *Retry) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRetry) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRetry) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRetry(val *Retry) *NullableRetry {
+	return &NullableRetry{value: val, isSet: true}
+}
+
+func (v NullableRetry) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRetry) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/retry_options.go b/pkg/infobip/models/voice/retry_options.go
new file mode 100644
index 0000000..7abd49f
--- /dev/null
+++ b/pkg/infobip/models/voice/retry_options.go
@@ -0,0 +1,203 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RetryOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RetryOptions{}
+
+// RetryOptions Used to determine whether to retry the delivery of a bulk call if the initial attempt fails. Additional retries will occur based on the schedule defined by the _minWaitPeriod_ and _maxWaitPeriod_ parameters, as well as the platform's internal retry logic. If _minWaitPeriod_ differs from _maxWaitPeriod_, the delivery will be retried according to the following schedule: after 1 minute, 2 minutes, 5 minutes, 10 minutes, 20 minutes, 30 minutes, 1 hour, 2 hours, 4 hours, 8 hours, 16 hours, and 24 hours, or until _maxWaitPeriod_ is reached. Once the retry attempt for _maxWaitPeriod_ is reached, _maxWaitPeriod_ will be used for all subsequent retries. If _minWaitPeriod_ and _maxWaitPeriod_ are defined as equal values, the period between retries will be equal to this value. Bulk call delivery will be retried until successful delivery, call validity expiration, or reaching the _maxAttempts_ value.
+type RetryOptions struct {
+	// Defines the minimum waiting time (in minutes) after the previous failed attempt before trying to establish the call again. Supported values are 1 minute, 2 minutes, 5 minutes, 10 minutes, 20 minutes, 30 minutes, 1 hour, 2 hours, 4 hours, 8 hours, 16 hours, and 24 hours. If entered a value that is not in the list but is smaller than 24 hours, the next bigger value from the list will be used. If a value larger than 24 hours is entered, 24 hours will be used.
+	MinWaitPeriod *int32
+	// Defines the maximum waiting time (in minutes) after the previous failed attempt before trying to establish the call again. Supported values are 1 minute, 2 minutes, 5 minutes, 10 minutes, 20 minutes, 30 minutes, 1 hour, 2 hours, 4 hours, 8 hours, 16 hours, and 24 hours. If entered a value that is not in the list but is smaller than 24 hours, the next bigger value from the list will be used. If a value larger than 24 hours is entered, 24 hours will be used.
+	MaxWaitPeriod *int32
+	// Defines the maximum number of retry attempts. The maximum value is `4`. If a value higher than `4` is entered, it will be set to `4`.
+	MaxAttempts *int32
+}
+
+// NewRetryOptions instantiates a new RetryOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRetryOptions() *RetryOptions {
+	this := RetryOptions{}
+	return &this
+}
+
+// NewRetryOptionsWithDefaults instantiates a new RetryOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRetryOptionsWithDefaults() *RetryOptions {
+	this := RetryOptions{}
+
+	return &this
+}
+
+// GetMinWaitPeriod returns the MinWaitPeriod field value if set, zero value otherwise.
+func (o *RetryOptions) GetMinWaitPeriod() int32 {
+	if o == nil || IsNil(o.MinWaitPeriod) {
+		var ret int32
+		return ret
+	}
+	return *o.MinWaitPeriod
+}
+
+// GetMinWaitPeriodOk returns a tuple with the MinWaitPeriod field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RetryOptions) GetMinWaitPeriodOk() (*int32, bool) {
+	if o == nil || IsNil(o.MinWaitPeriod) {
+		return nil, false
+	}
+	return o.MinWaitPeriod, true
+}
+
+// HasMinWaitPeriod returns a boolean if a field has been set.
+func (o *RetryOptions) HasMinWaitPeriod() bool {
+	if o != nil && !IsNil(o.MinWaitPeriod) {
+		return true
+	}
+
+	return false
+}
+
+// SetMinWaitPeriod gets a reference to the given int32 and assigns it to the MinWaitPeriod field.
+func (o *RetryOptions) SetMinWaitPeriod(v int32) {
+	o.MinWaitPeriod = &v
+}
+
+// GetMaxWaitPeriod returns the MaxWaitPeriod field value if set, zero value otherwise.
+func (o *RetryOptions) GetMaxWaitPeriod() int32 {
+	if o == nil || IsNil(o.MaxWaitPeriod) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxWaitPeriod
+}
+
+// GetMaxWaitPeriodOk returns a tuple with the MaxWaitPeriod field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RetryOptions) GetMaxWaitPeriodOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxWaitPeriod) {
+		return nil, false
+	}
+	return o.MaxWaitPeriod, true
+}
+
+// HasMaxWaitPeriod returns a boolean if a field has been set.
+func (o *RetryOptions) HasMaxWaitPeriod() bool {
+	if o != nil && !IsNil(o.MaxWaitPeriod) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxWaitPeriod gets a reference to the given int32 and assigns it to the MaxWaitPeriod field.
+func (o *RetryOptions) SetMaxWaitPeriod(v int32) {
+	o.MaxWaitPeriod = &v
+}
+
+// GetMaxAttempts returns the MaxAttempts field value if set, zero value otherwise.
+func (o *RetryOptions) GetMaxAttempts() int32 {
+	if o == nil || IsNil(o.MaxAttempts) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxAttempts
+}
+
+// GetMaxAttemptsOk returns a tuple with the MaxAttempts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RetryOptions) GetMaxAttemptsOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxAttempts) {
+		return nil, false
+	}
+	return o.MaxAttempts, true
+}
+
+// HasMaxAttempts returns a boolean if a field has been set.
+func (o *RetryOptions) HasMaxAttempts() bool {
+	if o != nil && !IsNil(o.MaxAttempts) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxAttempts gets a reference to the given int32 and assigns it to the MaxAttempts field.
+func (o *RetryOptions) SetMaxAttempts(v int32) {
+	o.MaxAttempts = &v
+}
+
+func (o RetryOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RetryOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.MinWaitPeriod) {
+		toSerialize["minWaitPeriod"] = o.MinWaitPeriod
+	}
+	if !IsNil(o.MaxWaitPeriod) {
+		toSerialize["maxWaitPeriod"] = o.MaxWaitPeriod
+	}
+	if !IsNil(o.MaxAttempts) {
+		toSerialize["maxAttempts"] = o.MaxAttempts
+	}
+	return toSerialize, nil
+}
+
+type NullableRetryOptions struct {
+	value *RetryOptions
+	isSet bool
+}
+
+func (v NullableRetryOptions) Get() *RetryOptions {
+	return v.value
+}
+
+func (v *NullableRetryOptions) Set(val *RetryOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRetryOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRetryOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRetryOptions(val *RetryOptions) *NullableRetryOptions {
+	return &NullableRetryOptions{value: val, isSet: true}
+}
+
+func (v NullableRetryOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRetryOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/ringback_generation.go b/pkg/infobip/models/voice/ringback_generation.go
new file mode 100644
index 0000000..4610706
--- /dev/null
+++ b/pkg/infobip/models/voice/ringback_generation.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the RingbackGeneration type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &RingbackGeneration{}
+
+// RingbackGeneration Option to generate a consistent local ringback tone, overriding remote ringing tones. If enabled, the ringback will be generated for the existing call, provided it joins the conference before the remote ringback of the new call starts.
+type RingbackGeneration struct {
+	// Flag indicating whether ringback generation is enabled. Cannot be `true` when `connectOnEarlyMedia` is `true`.
+	Enabled *bool
+}
+
+// NewRingbackGeneration instantiates a new RingbackGeneration object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewRingbackGeneration() *RingbackGeneration {
+	this := RingbackGeneration{}
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// NewRingbackGenerationWithDefaults instantiates a new RingbackGeneration object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewRingbackGenerationWithDefaults() *RingbackGeneration {
+	this := RingbackGeneration{}
+
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// GetEnabled returns the Enabled field value if set, zero value otherwise.
+func (o *RingbackGeneration) GetEnabled() bool {
+	if o == nil || IsNil(o.Enabled) {
+		var ret bool
+		return ret
+	}
+	return *o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *RingbackGeneration) GetEnabledOk() (*bool, bool) {
+	if o == nil || IsNil(o.Enabled) {
+		return nil, false
+	}
+	return o.Enabled, true
+}
+
+// HasEnabled returns a boolean if a field has been set.
+func (o *RingbackGeneration) HasEnabled() bool {
+	if o != nil && !IsNil(o.Enabled) {
+		return true
+	}
+
+	return false
+}
+
+// SetEnabled gets a reference to the given bool and assigns it to the Enabled field.
+func (o *RingbackGeneration) SetEnabled(v bool) {
+	o.Enabled = &v
+}
+
+func (o RingbackGeneration) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o RingbackGeneration) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Enabled) {
+		toSerialize["enabled"] = o.Enabled
+	}
+	return toSerialize, nil
+}
+
+type NullableRingbackGeneration struct {
+	value *RingbackGeneration
+	isSet bool
+}
+
+func (v NullableRingbackGeneration) Get() *RingbackGeneration {
+	return v.value
+}
+
+func (v *NullableRingbackGeneration) Set(val *RingbackGeneration) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableRingbackGeneration) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableRingbackGeneration) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableRingbackGeneration(val *RingbackGeneration) *NullableRingbackGeneration {
+	return &NullableRingbackGeneration{value: val, isSet: true}
+}
+
+func (v NullableRingbackGeneration) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableRingbackGeneration) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/say.go b/pkg/infobip/models/voice/say.go
new file mode 100644
index 0000000..9b6145a
--- /dev/null
+++ b/pkg/infobip/models/voice/say.go
@@ -0,0 +1,195 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Say type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Say{}
+
+// Say Say action converts provided text into an audio file which is played during the call based on the provided parameters. Message text can be up to 1400 characters long.
+type Say struct {
+	// Message text. SSML (_Speech Synthesis Markup Language_) is supported and can be used to fully customize pronunciation of the provided text.
+	Say     string
+	Options *SayOptions
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _Say Say
+
+// NewSay instantiates a new Say object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSay(say string) *Say {
+	this := Say{}
+	this.Say = say
+	return &this
+}
+
+// NewSayWithDefaults instantiates a new Say object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSayWithDefaults() *Say {
+	this := Say{}
+
+	return &this
+}
+
+// GetSay returns the Say field value
+func (o *Say) GetSay() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Say
+}
+
+// GetSayOk returns a tuple with the Say field value
+// and a boolean to check if the value has been set.
+func (o *Say) GetSayOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Say, true
+}
+
+// SetSay sets field value
+func (o *Say) SetSay(v string) {
+	o.Say = v
+}
+
+// GetOptions returns the Options field value if set, zero value otherwise.
+func (o *Say) GetOptions() SayOptions {
+	if o == nil || IsNil(o.Options) {
+		var ret SayOptions
+		return ret
+	}
+	return *o.Options
+}
+
+// GetOptionsOk returns a tuple with the Options field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Say) GetOptionsOk() (*SayOptions, bool) {
+	if o == nil || IsNil(o.Options) {
+		return nil, false
+	}
+	return o.Options, true
+}
+
+// HasOptions returns a boolean if a field has been set.
+func (o *Say) HasOptions() bool {
+	if o != nil && !IsNil(o.Options) {
+		return true
+	}
+
+	return false
+}
+
+// SetOptions gets a reference to the given SayOptions and assigns it to the Options field.
+func (o *Say) SetOptions(v SayOptions) {
+	o.Options = &v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *Say) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Say) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *Say) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *Say) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o Say) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Say) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["say"] = o.Say
+	if !IsNil(o.Options) {
+		toSerialize["options"] = o.Options
+	}
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableSay struct {
+	value *Say
+	isSet bool
+}
+
+func (v NullableSay) Get() *Say {
+	return v.value
+}
+
+func (v *NullableSay) Set(val *Say) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSay) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSay) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSay(val *Say) *NullableSay {
+	return &NullableSay{value: val, isSet: true}
+}
+
+func (v NullableSay) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSay) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/say_options.go b/pkg/infobip/models/voice/say_options.go
new file mode 100644
index 0000000..2128f14
--- /dev/null
+++ b/pkg/infobip/models/voice/say_options.go
@@ -0,0 +1,202 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SayOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SayOptions{}
+
+// SayOptions struct for SayOptions
+type SayOptions struct {
+	// Must be defined for correct pronunciation.
+	Language *string
+	Voice    *VoiceOptions
+	// Must be within [0.5 - 2.0] range, default value is 1.
+	SpeechRate *float64
+}
+
+// NewSayOptions instantiates a new SayOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSayOptions() *SayOptions {
+	this := SayOptions{}
+	return &this
+}
+
+// NewSayOptionsWithDefaults instantiates a new SayOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSayOptionsWithDefaults() *SayOptions {
+	this := SayOptions{}
+
+	return &this
+}
+
+// GetLanguage returns the Language field value if set, zero value otherwise.
+func (o *SayOptions) GetLanguage() string {
+	if o == nil || IsNil(o.Language) {
+		var ret string
+		return ret
+	}
+	return *o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SayOptions) GetLanguageOk() (*string, bool) {
+	if o == nil || IsNil(o.Language) {
+		return nil, false
+	}
+	return o.Language, true
+}
+
+// HasLanguage returns a boolean if a field has been set.
+func (o *SayOptions) HasLanguage() bool {
+	if o != nil && !IsNil(o.Language) {
+		return true
+	}
+
+	return false
+}
+
+// SetLanguage gets a reference to the given string and assigns it to the Language field.
+func (o *SayOptions) SetLanguage(v string) {
+	o.Language = &v
+}
+
+// GetVoice returns the Voice field value if set, zero value otherwise.
+func (o *SayOptions) GetVoice() VoiceOptions {
+	if o == nil || IsNil(o.Voice) {
+		var ret VoiceOptions
+		return ret
+	}
+	return *o.Voice
+}
+
+// GetVoiceOk returns a tuple with the Voice field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SayOptions) GetVoiceOk() (*VoiceOptions, bool) {
+	if o == nil || IsNil(o.Voice) {
+		return nil, false
+	}
+	return o.Voice, true
+}
+
+// HasVoice returns a boolean if a field has been set.
+func (o *SayOptions) HasVoice() bool {
+	if o != nil && !IsNil(o.Voice) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoice gets a reference to the given VoiceOptions and assigns it to the Voice field.
+func (o *SayOptions) SetVoice(v VoiceOptions) {
+	o.Voice = &v
+}
+
+// GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
+func (o *SayOptions) GetSpeechRate() float64 {
+	if o == nil || IsNil(o.SpeechRate) {
+		var ret float64
+		return ret
+	}
+	return *o.SpeechRate
+}
+
+// GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SayOptions) GetSpeechRateOk() (*float64, bool) {
+	if o == nil || IsNil(o.SpeechRate) {
+		return nil, false
+	}
+	return o.SpeechRate, true
+}
+
+// HasSpeechRate returns a boolean if a field has been set.
+func (o *SayOptions) HasSpeechRate() bool {
+	if o != nil && !IsNil(o.SpeechRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
+func (o *SayOptions) SetSpeechRate(v float64) {
+	o.SpeechRate = &v
+}
+
+func (o SayOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SayOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Language) {
+		toSerialize["language"] = o.Language
+	}
+	if !IsNil(o.Voice) {
+		toSerialize["voice"] = o.Voice
+	}
+	if !IsNil(o.SpeechRate) {
+		toSerialize["speechRate"] = o.SpeechRate
+	}
+	return toSerialize, nil
+}
+
+type NullableSayOptions struct {
+	value *SayOptions
+	isSet bool
+}
+
+func (v NullableSayOptions) Get() *SayOptions {
+	return v.value
+}
+
+func (v *NullableSayOptions) Set(val *SayOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSayOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSayOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSayOptions(val *SayOptions) *NullableSayOptions {
+	return &NullableSayOptions{value: val, isSet: true}
+}
+
+func (v NullableSayOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSayOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/say_request.go b/pkg/infobip/models/voice/say_request.go
new file mode 100644
index 0000000..5f7e669
--- /dev/null
+++ b/pkg/infobip/models/voice/say_request.go
@@ -0,0 +1,259 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SayRequest{}
+
+// SayRequest struct for SayRequest
+type SayRequest struct {
+	// Text to read.
+	Text     string
+	Language Language
+	// Speech rate. Must be within `[0.5 - 2.0]` range, default value is `1`.
+	SpeechRate *float64
+	// Number of times to read the text.
+	LoopCount   *int32
+	Preferences *VoicePreferences
+}
+
+type _SayRequest SayRequest
+
+// NewSayRequest instantiates a new SayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSayRequest(text string, language Language) *SayRequest {
+	this := SayRequest{}
+	this.Text = text
+	this.Language = language
+	return &this
+}
+
+// NewSayRequestWithDefaults instantiates a new SayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSayRequestWithDefaults() *SayRequest {
+	this := SayRequest{}
+
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *SayRequest) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *SayRequest) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *SayRequest) SetText(v string) {
+	o.Text = v
+}
+
+// GetLanguage returns the Language field value
+func (o *SayRequest) GetLanguage() Language {
+	if o == nil {
+		var ret Language
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *SayRequest) GetLanguageOk() (*Language, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *SayRequest) SetLanguage(v Language) {
+	o.Language = v
+}
+
+// GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
+func (o *SayRequest) GetSpeechRate() float64 {
+	if o == nil || IsNil(o.SpeechRate) {
+		var ret float64
+		return ret
+	}
+	return *o.SpeechRate
+}
+
+// GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SayRequest) GetSpeechRateOk() (*float64, bool) {
+	if o == nil || IsNil(o.SpeechRate) {
+		return nil, false
+	}
+	return o.SpeechRate, true
+}
+
+// HasSpeechRate returns a boolean if a field has been set.
+func (o *SayRequest) HasSpeechRate() bool {
+	if o != nil && !IsNil(o.SpeechRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
+func (o *SayRequest) SetSpeechRate(v float64) {
+	o.SpeechRate = &v
+}
+
+// GetLoopCount returns the LoopCount field value if set, zero value otherwise.
+func (o *SayRequest) GetLoopCount() int32 {
+	if o == nil || IsNil(o.LoopCount) {
+		var ret int32
+		return ret
+	}
+	return *o.LoopCount
+}
+
+// GetLoopCountOk returns a tuple with the LoopCount field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SayRequest) GetLoopCountOk() (*int32, bool) {
+	if o == nil || IsNil(o.LoopCount) {
+		return nil, false
+	}
+	return o.LoopCount, true
+}
+
+// HasLoopCount returns a boolean if a field has been set.
+func (o *SayRequest) HasLoopCount() bool {
+	if o != nil && !IsNil(o.LoopCount) {
+		return true
+	}
+
+	return false
+}
+
+// SetLoopCount gets a reference to the given int32 and assigns it to the LoopCount field.
+func (o *SayRequest) SetLoopCount(v int32) {
+	o.LoopCount = &v
+}
+
+// GetPreferences returns the Preferences field value if set, zero value otherwise.
+func (o *SayRequest) GetPreferences() VoicePreferences {
+	if o == nil || IsNil(o.Preferences) {
+		var ret VoicePreferences
+		return ret
+	}
+	return *o.Preferences
+}
+
+// GetPreferencesOk returns a tuple with the Preferences field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SayRequest) GetPreferencesOk() (*VoicePreferences, bool) {
+	if o == nil || IsNil(o.Preferences) {
+		return nil, false
+	}
+	return o.Preferences, true
+}
+
+// HasPreferences returns a boolean if a field has been set.
+func (o *SayRequest) HasPreferences() bool {
+	if o != nil && !IsNil(o.Preferences) {
+		return true
+	}
+
+	return false
+}
+
+// SetPreferences gets a reference to the given VoicePreferences and assigns it to the Preferences field.
+func (o *SayRequest) SetPreferences(v VoicePreferences) {
+	o.Preferences = &v
+}
+
+func (o SayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["text"] = o.Text
+	toSerialize["language"] = o.Language
+	if !IsNil(o.SpeechRate) {
+		toSerialize["speechRate"] = o.SpeechRate
+	}
+	if !IsNil(o.LoopCount) {
+		toSerialize["loopCount"] = o.LoopCount
+	}
+	if !IsNil(o.Preferences) {
+		toSerialize["preferences"] = o.Preferences
+	}
+	return toSerialize, nil
+}
+
+type NullableSayRequest struct {
+	value *SayRequest
+	isSet bool
+}
+
+func (v NullableSayRequest) Get() *SayRequest {
+	return v.value
+}
+
+func (v *NullableSayRequest) Set(val *SayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSayRequest(val *SayRequest) *NullableSayRequest {
+	return &NullableSayRequest{value: val, isSet: true}
+}
+
+func (v NullableSayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sbc_hosts.go b/pkg/infobip/models/voice/sbc_hosts.go
new file mode 100644
index 0000000..ca78374
--- /dev/null
+++ b/pkg/infobip/models/voice/sbc_hosts.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SbcHosts type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SbcHosts{}
+
+// SbcHosts Infobip SBC (Session Border Controller) hosts.
+type SbcHosts struct {
+	Primary []string
+	Backup  []string
+}
+
+// NewSbcHosts instantiates a new SbcHosts object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSbcHosts() *SbcHosts {
+	this := SbcHosts{}
+	return &this
+}
+
+// NewSbcHostsWithDefaults instantiates a new SbcHosts object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSbcHostsWithDefaults() *SbcHosts {
+	this := SbcHosts{}
+
+	return &this
+}
+
+// GetPrimary returns the Primary field value if set, zero value otherwise.
+func (o *SbcHosts) GetPrimary() []string {
+	if o == nil || IsNil(o.Primary) {
+		var ret []string
+		return ret
+	}
+	return o.Primary
+}
+
+// GetPrimaryOk returns a tuple with the Primary field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SbcHosts) GetPrimaryOk() ([]string, bool) {
+	if o == nil || IsNil(o.Primary) {
+		return nil, false
+	}
+	return o.Primary, true
+}
+
+// HasPrimary returns a boolean if a field has been set.
+func (o *SbcHosts) HasPrimary() bool {
+	if o != nil && !IsNil(o.Primary) {
+		return true
+	}
+
+	return false
+}
+
+// SetPrimary gets a reference to the given []string and assigns it to the Primary field.
+func (o *SbcHosts) SetPrimary(v []string) {
+	o.Primary = v
+}
+
+// GetBackup returns the Backup field value if set, zero value otherwise.
+func (o *SbcHosts) GetBackup() []string {
+	if o == nil || IsNil(o.Backup) {
+		var ret []string
+		return ret
+	}
+	return o.Backup
+}
+
+// GetBackupOk returns a tuple with the Backup field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SbcHosts) GetBackupOk() ([]string, bool) {
+	if o == nil || IsNil(o.Backup) {
+		return nil, false
+	}
+	return o.Backup, true
+}
+
+// HasBackup returns a boolean if a field has been set.
+func (o *SbcHosts) HasBackup() bool {
+	if o != nil && !IsNil(o.Backup) {
+		return true
+	}
+
+	return false
+}
+
+// SetBackup gets a reference to the given []string and assigns it to the Backup field.
+func (o *SbcHosts) SetBackup(v []string) {
+	o.Backup = v
+}
+
+func (o SbcHosts) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SbcHosts) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Primary) {
+		toSerialize["primary"] = o.Primary
+	}
+	if !IsNil(o.Backup) {
+		toSerialize["backup"] = o.Backup
+	}
+	return toSerialize, nil
+}
+
+type NullableSbcHosts struct {
+	value *SbcHosts
+	isSet bool
+}
+
+func (v NullableSbcHosts) Get() *SbcHosts {
+	return v.value
+}
+
+func (v *NullableSbcHosts) Set(val *SbcHosts) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSbcHosts) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSbcHosts) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSbcHosts(val *SbcHosts) *NullableSbcHosts {
+	return &NullableSbcHosts{value: val, isSet: true}
+}
+
+func (v NullableSbcHosts) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSbcHosts) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/scheduling_options.go b/pkg/infobip/models/voice/scheduling_options.go
new file mode 100644
index 0000000..29f0e64
--- /dev/null
+++ b/pkg/infobip/models/voice/scheduling_options.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SchedulingOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SchedulingOptions{}
+
+// SchedulingOptions Scheduling object that allows setting up detailed time windows within which calls can be established. Note that calling time window is set in UTC timezone.
+type SchedulingOptions struct {
+	// Scheduling start date and time.
+	StartTime         *Time
+	CallingTimeWindow *DeliveryTimeWindow
+}
+
+// NewSchedulingOptions instantiates a new SchedulingOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSchedulingOptions() *SchedulingOptions {
+	this := SchedulingOptions{}
+	return &this
+}
+
+// NewSchedulingOptionsWithDefaults instantiates a new SchedulingOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSchedulingOptionsWithDefaults() *SchedulingOptions {
+	this := SchedulingOptions{}
+
+	return &this
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *SchedulingOptions) GetStartTime() Time {
+	if o == nil || IsNil(o.StartTime) {
+		var ret Time
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SchedulingOptions) GetStartTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *SchedulingOptions) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given Time and assigns it to the StartTime field.
+func (o *SchedulingOptions) SetStartTime(v Time) {
+	o.StartTime = &v
+}
+
+// GetCallingTimeWindow returns the CallingTimeWindow field value if set, zero value otherwise.
+func (o *SchedulingOptions) GetCallingTimeWindow() DeliveryTimeWindow {
+	if o == nil || IsNil(o.CallingTimeWindow) {
+		var ret DeliveryTimeWindow
+		return ret
+	}
+	return *o.CallingTimeWindow
+}
+
+// GetCallingTimeWindowOk returns a tuple with the CallingTimeWindow field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SchedulingOptions) GetCallingTimeWindowOk() (*DeliveryTimeWindow, bool) {
+	if o == nil || IsNil(o.CallingTimeWindow) {
+		return nil, false
+	}
+	return o.CallingTimeWindow, true
+}
+
+// HasCallingTimeWindow returns a boolean if a field has been set.
+func (o *SchedulingOptions) HasCallingTimeWindow() bool {
+	if o != nil && !IsNil(o.CallingTimeWindow) {
+		return true
+	}
+
+	return false
+}
+
+// SetCallingTimeWindow gets a reference to the given DeliveryTimeWindow and assigns it to the CallingTimeWindow field.
+func (o *SchedulingOptions) SetCallingTimeWindow(v DeliveryTimeWindow) {
+	o.CallingTimeWindow = &v
+}
+
+func (o SchedulingOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SchedulingOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.CallingTimeWindow) {
+		toSerialize["callingTimeWindow"] = o.CallingTimeWindow
+	}
+	return toSerialize, nil
+}
+
+type NullableSchedulingOptions struct {
+	value *SchedulingOptions
+	isSet bool
+}
+
+func (v NullableSchedulingOptions) Get() *SchedulingOptions {
+	return v.value
+}
+
+func (v *NullableSchedulingOptions) Set(val *SchedulingOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSchedulingOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSchedulingOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSchedulingOptions(val *SchedulingOptions) *NullableSchedulingOptions {
+	return &NullableSchedulingOptions{value: val, isSet: true}
+}
+
+func (v NullableSchedulingOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSchedulingOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/script_inner.go b/pkg/infobip/models/voice/script_inner.go
new file mode 100644
index 0000000..67b5076
--- /dev/null
+++ b/pkg/infobip/models/voice/script_inner.go
@@ -0,0 +1,871 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+
+	"gopkg.in/validator.v2"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// ScriptInner - struct for ScriptInner
+type ScriptInner struct {
+	CallApi             *CallApi
+	Capture             *Capture
+	Collect             *Collect
+	Dial                *Dial
+	DialToConversations *DialToConversations
+	DialToMany          *DialToMany
+	DialToWebRTC        *DialToWebRTC
+	ForEach             *ForEach
+	GoTo                *GoTo
+	Hangup              *Hangup
+	IfThenElse          *IfThenElse
+	MachineDetection    *MachineDetection
+	Pause               *Pause
+	Play                *Play
+	PlayFromRecording   *PlayFromRecording
+	Record              *Record
+	RepeatUntil         *RepeatUntil
+	RepeatWhile         *RepeatWhile
+	Say                 *Say
+	SendSms             *SendSms
+	SetVariable         *SetVariable
+	SwitchCase          *SwitchCase
+	WhileDo             *WhileDo
+}
+
+// CallApiAsScriptInner is a convenience function that returns CallApi wrapped in ScriptInner
+func CallApiAsScriptInner(v *CallApi) ScriptInner {
+	return ScriptInner{
+		CallApi: v,
+	}
+}
+
+// CaptureAsScriptInner is a convenience function that returns Capture wrapped in ScriptInner
+func CaptureAsScriptInner(v *Capture) ScriptInner {
+	return ScriptInner{
+		Capture: v,
+	}
+}
+
+// CollectAsScriptInner is a convenience function that returns Collect wrapped in ScriptInner
+func CollectAsScriptInner(v *Collect) ScriptInner {
+	return ScriptInner{
+		Collect: v,
+	}
+}
+
+// DialAsScriptInner is a convenience function that returns Dial wrapped in ScriptInner
+func DialAsScriptInner(v *Dial) ScriptInner {
+	return ScriptInner{
+		Dial: v,
+	}
+}
+
+// DialToConversationsAsScriptInner is a convenience function that returns DialToConversations wrapped in ScriptInner
+func DialToConversationsAsScriptInner(v *DialToConversations) ScriptInner {
+	return ScriptInner{
+		DialToConversations: v,
+	}
+}
+
+// DialToManyAsScriptInner is a convenience function that returns DialToMany wrapped in ScriptInner
+func DialToManyAsScriptInner(v *DialToMany) ScriptInner {
+	return ScriptInner{
+		DialToMany: v,
+	}
+}
+
+// DialToWebRTCAsScriptInner is a convenience function that returns DialToWebRTC wrapped in ScriptInner
+func DialToWebRTCAsScriptInner(v *DialToWebRTC) ScriptInner {
+	return ScriptInner{
+		DialToWebRTC: v,
+	}
+}
+
+// ForEachAsScriptInner is a convenience function that returns ForEach wrapped in ScriptInner
+func ForEachAsScriptInner(v *ForEach) ScriptInner {
+	return ScriptInner{
+		ForEach: v,
+	}
+}
+
+// GoToAsScriptInner is a convenience function that returns GoTo wrapped in ScriptInner
+func GoToAsScriptInner(v *GoTo) ScriptInner {
+	return ScriptInner{
+		GoTo: v,
+	}
+}
+
+// HangupAsScriptInner is a convenience function that returns Hangup wrapped in ScriptInner
+func HangupAsScriptInner(v *Hangup) ScriptInner {
+	return ScriptInner{
+		Hangup: v,
+	}
+}
+
+// IfThenElseAsScriptInner is a convenience function that returns IfThenElse wrapped in ScriptInner
+func IfThenElseAsScriptInner(v *IfThenElse) ScriptInner {
+	return ScriptInner{
+		IfThenElse: v,
+	}
+}
+
+// MachineDetectionAsScriptInner is a convenience function that returns MachineDetection wrapped in ScriptInner
+func MachineDetectionAsScriptInner(v *MachineDetection) ScriptInner {
+	return ScriptInner{
+		MachineDetection: v,
+	}
+}
+
+// PauseAsScriptInner is a convenience function that returns Pause wrapped in ScriptInner
+func PauseAsScriptInner(v *Pause) ScriptInner {
+	return ScriptInner{
+		Pause: v,
+	}
+}
+
+// PlayAsScriptInner is a convenience function that returns Play wrapped in ScriptInner
+func PlayAsScriptInner(v *Play) ScriptInner {
+	return ScriptInner{
+		Play: v,
+	}
+}
+
+// PlayFromRecordingAsScriptInner is a convenience function that returns PlayFromRecording wrapped in ScriptInner
+func PlayFromRecordingAsScriptInner(v *PlayFromRecording) ScriptInner {
+	return ScriptInner{
+		PlayFromRecording: v,
+	}
+}
+
+// RecordAsScriptInner is a convenience function that returns Record wrapped in ScriptInner
+func RecordAsScriptInner(v *Record) ScriptInner {
+	return ScriptInner{
+		Record: v,
+	}
+}
+
+// RepeatUntilAsScriptInner is a convenience function that returns RepeatUntil wrapped in ScriptInner
+func RepeatUntilAsScriptInner(v *RepeatUntil) ScriptInner {
+	return ScriptInner{
+		RepeatUntil: v,
+	}
+}
+
+// RepeatWhileAsScriptInner is a convenience function that returns RepeatWhile wrapped in ScriptInner
+func RepeatWhileAsScriptInner(v *RepeatWhile) ScriptInner {
+	return ScriptInner{
+		RepeatWhile: v,
+	}
+}
+
+// SayAsScriptInner is a convenience function that returns Say wrapped in ScriptInner
+func SayAsScriptInner(v *Say) ScriptInner {
+	return ScriptInner{
+		Say: v,
+	}
+}
+
+// SendSmsAsScriptInner is a convenience function that returns SendSms wrapped in ScriptInner
+func SendSmsAsScriptInner(v *SendSms) ScriptInner {
+	return ScriptInner{
+		SendSms: v,
+	}
+}
+
+// SetVariableAsScriptInner is a convenience function that returns SetVariable wrapped in ScriptInner
+func SetVariableAsScriptInner(v *SetVariable) ScriptInner {
+	return ScriptInner{
+		SetVariable: v,
+	}
+}
+
+// SwitchCaseAsScriptInner is a convenience function that returns SwitchCase wrapped in ScriptInner
+func SwitchCaseAsScriptInner(v *SwitchCase) ScriptInner {
+	return ScriptInner{
+		SwitchCase: v,
+	}
+}
+
+// WhileDoAsScriptInner is a convenience function that returns WhileDo wrapped in ScriptInner
+func WhileDoAsScriptInner(v *WhileDo) ScriptInner {
+	return ScriptInner{
+		WhileDo: v,
+	}
+}
+
+// Unmarshal JSON data into one of the pointers in the struct
+func (dst *ScriptInner) UnmarshalJSON(data []byte) error {
+	var err error
+	match := 0
+	// try to unmarshal data into CallApi
+	err = NewStrictDecoder(data).Decode(&dst.CallApi)
+	if err == nil {
+		jsonCallApi, _ := json.Marshal(dst.CallApi)
+		if string(jsonCallApi) == "{}" { // empty struct
+			dst.CallApi = nil
+		} else {
+			if err = validator.Validate(dst.CallApi); err != nil {
+				dst.CallApi = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.CallApi = nil
+	}
+
+	// try to unmarshal data into Capture
+	err = NewStrictDecoder(data).Decode(&dst.Capture)
+	if err == nil {
+		jsonCapture, _ := json.Marshal(dst.Capture)
+		if string(jsonCapture) == "{}" { // empty struct
+			dst.Capture = nil
+		} else {
+			if err = validator.Validate(dst.Capture); err != nil {
+				dst.Capture = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Capture = nil
+	}
+
+	// try to unmarshal data into Collect
+	err = NewStrictDecoder(data).Decode(&dst.Collect)
+	if err == nil {
+		jsonCollect, _ := json.Marshal(dst.Collect)
+		if string(jsonCollect) == "{}" { // empty struct
+			dst.Collect = nil
+		} else {
+			if err = validator.Validate(dst.Collect); err != nil {
+				dst.Collect = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Collect = nil
+	}
+
+	// try to unmarshal data into Dial
+	err = NewStrictDecoder(data).Decode(&dst.Dial)
+	if err == nil {
+		jsonDial, _ := json.Marshal(dst.Dial)
+		if string(jsonDial) == "{}" { // empty struct
+			dst.Dial = nil
+		} else {
+			if err = validator.Validate(dst.Dial); err != nil {
+				dst.Dial = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Dial = nil
+	}
+
+	// try to unmarshal data into DialToConversations
+	err = NewStrictDecoder(data).Decode(&dst.DialToConversations)
+	if err == nil {
+		jsonDialToConversations, _ := json.Marshal(dst.DialToConversations)
+		if string(jsonDialToConversations) == "{}" { // empty struct
+			dst.DialToConversations = nil
+		} else {
+			if err = validator.Validate(dst.DialToConversations); err != nil {
+				dst.DialToConversations = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.DialToConversations = nil
+	}
+
+	// try to unmarshal data into DialToMany
+	err = NewStrictDecoder(data).Decode(&dst.DialToMany)
+	if err == nil {
+		jsonDialToMany, _ := json.Marshal(dst.DialToMany)
+		if string(jsonDialToMany) == "{}" { // empty struct
+			dst.DialToMany = nil
+		} else {
+			if err = validator.Validate(dst.DialToMany); err != nil {
+				dst.DialToMany = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.DialToMany = nil
+	}
+
+	// try to unmarshal data into DialToWebRTC
+	err = NewStrictDecoder(data).Decode(&dst.DialToWebRTC)
+	if err == nil {
+		jsonDialToWebRTC, _ := json.Marshal(dst.DialToWebRTC)
+		if string(jsonDialToWebRTC) == "{}" { // empty struct
+			dst.DialToWebRTC = nil
+		} else {
+			if err = validator.Validate(dst.DialToWebRTC); err != nil {
+				dst.DialToWebRTC = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.DialToWebRTC = nil
+	}
+
+	// try to unmarshal data into ForEach
+	err = NewStrictDecoder(data).Decode(&dst.ForEach)
+	if err == nil {
+		jsonForEach, _ := json.Marshal(dst.ForEach)
+		if string(jsonForEach) == "{}" { // empty struct
+			dst.ForEach = nil
+		} else {
+			if err = validator.Validate(dst.ForEach); err != nil {
+				dst.ForEach = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.ForEach = nil
+	}
+
+	// try to unmarshal data into GoTo
+	err = NewStrictDecoder(data).Decode(&dst.GoTo)
+	if err == nil {
+		jsonGoTo, _ := json.Marshal(dst.GoTo)
+		if string(jsonGoTo) == "{}" { // empty struct
+			dst.GoTo = nil
+		} else {
+			if err = validator.Validate(dst.GoTo); err != nil {
+				dst.GoTo = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.GoTo = nil
+	}
+
+	// try to unmarshal data into Hangup
+	err = NewStrictDecoder(data).Decode(&dst.Hangup)
+	if err == nil {
+		jsonHangup, _ := json.Marshal(dst.Hangup)
+		if string(jsonHangup) == "{}" { // empty struct
+			dst.Hangup = nil
+		} else {
+			if err = validator.Validate(dst.Hangup); err != nil {
+				dst.Hangup = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Hangup = nil
+	}
+
+	// try to unmarshal data into IfThenElse
+	err = NewStrictDecoder(data).Decode(&dst.IfThenElse)
+	if err == nil {
+		jsonIfThenElse, _ := json.Marshal(dst.IfThenElse)
+		if string(jsonIfThenElse) == "{}" { // empty struct
+			dst.IfThenElse = nil
+		} else {
+			if err = validator.Validate(dst.IfThenElse); err != nil {
+				dst.IfThenElse = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.IfThenElse = nil
+	}
+
+	// try to unmarshal data into MachineDetection
+	err = NewStrictDecoder(data).Decode(&dst.MachineDetection)
+	if err == nil {
+		jsonMachineDetection, _ := json.Marshal(dst.MachineDetection)
+		if string(jsonMachineDetection) == "{}" { // empty struct
+			dst.MachineDetection = nil
+		} else {
+			if err = validator.Validate(dst.MachineDetection); err != nil {
+				dst.MachineDetection = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.MachineDetection = nil
+	}
+
+	// try to unmarshal data into Pause
+	err = NewStrictDecoder(data).Decode(&dst.Pause)
+	if err == nil {
+		jsonPause, _ := json.Marshal(dst.Pause)
+		if string(jsonPause) == "{}" { // empty struct
+			dst.Pause = nil
+		} else {
+			if err = validator.Validate(dst.Pause); err != nil {
+				dst.Pause = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Pause = nil
+	}
+
+	// try to unmarshal data into Play
+	err = NewStrictDecoder(data).Decode(&dst.Play)
+	if err == nil {
+		jsonPlay, _ := json.Marshal(dst.Play)
+		if string(jsonPlay) == "{}" { // empty struct
+			dst.Play = nil
+		} else {
+			if err = validator.Validate(dst.Play); err != nil {
+				dst.Play = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Play = nil
+	}
+
+	// try to unmarshal data into PlayFromRecording
+	err = NewStrictDecoder(data).Decode(&dst.PlayFromRecording)
+	if err == nil {
+		jsonPlayFromRecording, _ := json.Marshal(dst.PlayFromRecording)
+		if string(jsonPlayFromRecording) == "{}" { // empty struct
+			dst.PlayFromRecording = nil
+		} else {
+			if err = validator.Validate(dst.PlayFromRecording); err != nil {
+				dst.PlayFromRecording = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.PlayFromRecording = nil
+	}
+
+	// try to unmarshal data into Record
+	err = NewStrictDecoder(data).Decode(&dst.Record)
+	if err == nil {
+		jsonRecord, _ := json.Marshal(dst.Record)
+		if string(jsonRecord) == "{}" { // empty struct
+			dst.Record = nil
+		} else {
+			if err = validator.Validate(dst.Record); err != nil {
+				dst.Record = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Record = nil
+	}
+
+	// try to unmarshal data into RepeatUntil
+	err = NewStrictDecoder(data).Decode(&dst.RepeatUntil)
+	if err == nil {
+		jsonRepeatUntil, _ := json.Marshal(dst.RepeatUntil)
+		if string(jsonRepeatUntil) == "{}" { // empty struct
+			dst.RepeatUntil = nil
+		} else {
+			if err = validator.Validate(dst.RepeatUntil); err != nil {
+				dst.RepeatUntil = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.RepeatUntil = nil
+	}
+
+	// try to unmarshal data into RepeatWhile
+	err = NewStrictDecoder(data).Decode(&dst.RepeatWhile)
+	if err == nil {
+		jsonRepeatWhile, _ := json.Marshal(dst.RepeatWhile)
+		if string(jsonRepeatWhile) == "{}" { // empty struct
+			dst.RepeatWhile = nil
+		} else {
+			if err = validator.Validate(dst.RepeatWhile); err != nil {
+				dst.RepeatWhile = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.RepeatWhile = nil
+	}
+
+	// try to unmarshal data into Say
+	err = NewStrictDecoder(data).Decode(&dst.Say)
+	if err == nil {
+		jsonSay, _ := json.Marshal(dst.Say)
+		if string(jsonSay) == "{}" { // empty struct
+			dst.Say = nil
+		} else {
+			if err = validator.Validate(dst.Say); err != nil {
+				dst.Say = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.Say = nil
+	}
+
+	// try to unmarshal data into SendSms
+	err = NewStrictDecoder(data).Decode(&dst.SendSms)
+	if err == nil {
+		jsonSendSms, _ := json.Marshal(dst.SendSms)
+		if string(jsonSendSms) == "{}" { // empty struct
+			dst.SendSms = nil
+		} else {
+			if err = validator.Validate(dst.SendSms); err != nil {
+				dst.SendSms = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.SendSms = nil
+	}
+
+	// try to unmarshal data into SetVariable
+	err = NewStrictDecoder(data).Decode(&dst.SetVariable)
+	if err == nil {
+		jsonSetVariable, _ := json.Marshal(dst.SetVariable)
+		if string(jsonSetVariable) == "{}" { // empty struct
+			dst.SetVariable = nil
+		} else {
+			if err = validator.Validate(dst.SetVariable); err != nil {
+				dst.SetVariable = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.SetVariable = nil
+	}
+
+	// try to unmarshal data into SwitchCase
+	err = NewStrictDecoder(data).Decode(&dst.SwitchCase)
+	if err == nil {
+		jsonSwitchCase, _ := json.Marshal(dst.SwitchCase)
+		if string(jsonSwitchCase) == "{}" { // empty struct
+			dst.SwitchCase = nil
+		} else {
+			if err = validator.Validate(dst.SwitchCase); err != nil {
+				dst.SwitchCase = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.SwitchCase = nil
+	}
+
+	// try to unmarshal data into WhileDo
+	err = NewStrictDecoder(data).Decode(&dst.WhileDo)
+	if err == nil {
+		jsonWhileDo, _ := json.Marshal(dst.WhileDo)
+		if string(jsonWhileDo) == "{}" { // empty struct
+			dst.WhileDo = nil
+		} else {
+			if err = validator.Validate(dst.WhileDo); err != nil {
+				dst.WhileDo = nil
+			} else {
+				match++
+			}
+		}
+	} else {
+		dst.WhileDo = nil
+	}
+
+	if match > 1 { // more than 1 match
+		// reset to nil
+		dst.CallApi = nil
+		dst.Capture = nil
+		dst.Collect = nil
+		dst.Dial = nil
+		dst.DialToConversations = nil
+		dst.DialToMany = nil
+		dst.DialToWebRTC = nil
+		dst.ForEach = nil
+		dst.GoTo = nil
+		dst.Hangup = nil
+		dst.IfThenElse = nil
+		dst.MachineDetection = nil
+		dst.Pause = nil
+		dst.Play = nil
+		dst.PlayFromRecording = nil
+		dst.Record = nil
+		dst.RepeatUntil = nil
+		dst.RepeatWhile = nil
+		dst.Say = nil
+		dst.SendSms = nil
+		dst.SetVariable = nil
+		dst.SwitchCase = nil
+		dst.WhileDo = nil
+
+		return fmt.Errorf("data matches more than one schema in oneOf(ScriptInner)")
+	} else if match == 1 {
+		return nil // exactly one match
+	} else { // no match
+		return fmt.Errorf("data failed to match schemas in oneOf(ScriptInner)")
+	}
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src ScriptInner) MarshalJSON() ([]byte, error) {
+	if src.CallApi != nil {
+		return json.Marshal(&src.CallApi)
+	}
+
+	if src.Capture != nil {
+		return json.Marshal(&src.Capture)
+	}
+
+	if src.Collect != nil {
+		return json.Marshal(&src.Collect)
+	}
+
+	if src.Dial != nil {
+		return json.Marshal(&src.Dial)
+	}
+
+	if src.DialToConversations != nil {
+		return json.Marshal(&src.DialToConversations)
+	}
+
+	if src.DialToMany != nil {
+		return json.Marshal(&src.DialToMany)
+	}
+
+	if src.DialToWebRTC != nil {
+		return json.Marshal(&src.DialToWebRTC)
+	}
+
+	if src.ForEach != nil {
+		return json.Marshal(&src.ForEach)
+	}
+
+	if src.GoTo != nil {
+		return json.Marshal(&src.GoTo)
+	}
+
+	if src.Hangup != nil {
+		return json.Marshal(&src.Hangup)
+	}
+
+	if src.IfThenElse != nil {
+		return json.Marshal(&src.IfThenElse)
+	}
+
+	if src.MachineDetection != nil {
+		return json.Marshal(&src.MachineDetection)
+	}
+
+	if src.Pause != nil {
+		return json.Marshal(&src.Pause)
+	}
+
+	if src.Play != nil {
+		return json.Marshal(&src.Play)
+	}
+
+	if src.PlayFromRecording != nil {
+		return json.Marshal(&src.PlayFromRecording)
+	}
+
+	if src.Record != nil {
+		return json.Marshal(&src.Record)
+	}
+
+	if src.RepeatUntil != nil {
+		return json.Marshal(&src.RepeatUntil)
+	}
+
+	if src.RepeatWhile != nil {
+		return json.Marshal(&src.RepeatWhile)
+	}
+
+	if src.Say != nil {
+		return json.Marshal(&src.Say)
+	}
+
+	if src.SendSms != nil {
+		return json.Marshal(&src.SendSms)
+	}
+
+	if src.SetVariable != nil {
+		return json.Marshal(&src.SetVariable)
+	}
+
+	if src.SwitchCase != nil {
+		return json.Marshal(&src.SwitchCase)
+	}
+
+	if src.WhileDo != nil {
+		return json.Marshal(&src.WhileDo)
+	}
+
+	return nil, nil // no data in oneOf schemas
+}
+
+// Get the actual instance
+func (obj *ScriptInner) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.CallApi != nil {
+		return obj.CallApi
+	}
+
+	if obj.Capture != nil {
+		return obj.Capture
+	}
+
+	if obj.Collect != nil {
+		return obj.Collect
+	}
+
+	if obj.Dial != nil {
+		return obj.Dial
+	}
+
+	if obj.DialToConversations != nil {
+		return obj.DialToConversations
+	}
+
+	if obj.DialToMany != nil {
+		return obj.DialToMany
+	}
+
+	if obj.DialToWebRTC != nil {
+		return obj.DialToWebRTC
+	}
+
+	if obj.ForEach != nil {
+		return obj.ForEach
+	}
+
+	if obj.GoTo != nil {
+		return obj.GoTo
+	}
+
+	if obj.Hangup != nil {
+		return obj.Hangup
+	}
+
+	if obj.IfThenElse != nil {
+		return obj.IfThenElse
+	}
+
+	if obj.MachineDetection != nil {
+		return obj.MachineDetection
+	}
+
+	if obj.Pause != nil {
+		return obj.Pause
+	}
+
+	if obj.Play != nil {
+		return obj.Play
+	}
+
+	if obj.PlayFromRecording != nil {
+		return obj.PlayFromRecording
+	}
+
+	if obj.Record != nil {
+		return obj.Record
+	}
+
+	if obj.RepeatUntil != nil {
+		return obj.RepeatUntil
+	}
+
+	if obj.RepeatWhile != nil {
+		return obj.RepeatWhile
+	}
+
+	if obj.Say != nil {
+		return obj.Say
+	}
+
+	if obj.SendSms != nil {
+		return obj.SendSms
+	}
+
+	if obj.SetVariable != nil {
+		return obj.SetVariable
+	}
+
+	if obj.SwitchCase != nil {
+		return obj.SwitchCase
+	}
+
+	if obj.WhileDo != nil {
+		return obj.WhileDo
+	}
+
+	// all schemas are nil
+	return nil
+}
+
+type NullableScriptInner struct {
+	value *ScriptInner
+	isSet bool
+}
+
+func (v NullableScriptInner) Get() *ScriptInner {
+	return v.value
+}
+
+func (v *NullableScriptInner) Set(val *ScriptInner) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableScriptInner) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableScriptInner) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableScriptInner(val *ScriptInner) *NullableScriptInner {
+	return &NullableScriptInner{value: val, isSet: true}
+}
+
+func (v NullableScriptInner) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableScriptInner) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/search_response.go b/pkg/infobip/models/voice/search_response.go
new file mode 100644
index 0000000..3fa97e7
--- /dev/null
+++ b/pkg/infobip/models/voice/search_response.go
@@ -0,0 +1,351 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SearchResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SearchResponse{}
+
+// SearchResponse struct for SearchResponse
+type SearchResponse struct {
+	// Creation timestamp.
+	CreateTime *Time
+	// Scenario description.
+	Description *string
+	// Scenario key. It is used for launching IVR scenario.
+	Id *string
+	// Scenario name.
+	Name *string
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Script []ScriptInner
+	// Update timestamp
+	UpdateTime *Time
+	// Last usage date. `null` for scenarios that are used last time before `2024-01-01`.
+	LastUsageDate *Time
+}
+
+// NewSearchResponse instantiates a new SearchResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSearchResponse() *SearchResponse {
+	this := SearchResponse{}
+	return &this
+}
+
+// NewSearchResponseWithDefaults instantiates a new SearchResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSearchResponseWithDefaults() *SearchResponse {
+	this := SearchResponse{}
+
+	return &this
+}
+
+// GetCreateTime returns the CreateTime field value if set, zero value otherwise.
+func (o *SearchResponse) GetCreateTime() Time {
+	if o == nil || IsNil(o.CreateTime) {
+		var ret Time
+		return ret
+	}
+	return *o.CreateTime
+}
+
+// GetCreateTimeOk returns a tuple with the CreateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetCreateTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.CreateTime) {
+		return nil, false
+	}
+	return o.CreateTime, true
+}
+
+// HasCreateTime returns a boolean if a field has been set.
+func (o *SearchResponse) HasCreateTime() bool {
+	if o != nil && !IsNil(o.CreateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreateTime gets a reference to the given Time and assigns it to the CreateTime field.
+func (o *SearchResponse) SetCreateTime(v Time) {
+	o.CreateTime = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *SearchResponse) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *SearchResponse) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *SearchResponse) SetDescription(v string) {
+	o.Description = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *SearchResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *SearchResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *SearchResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *SearchResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *SearchResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *SearchResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetScript returns the Script field value if set, zero value otherwise.
+func (o *SearchResponse) GetScript() []ScriptInner {
+	if o == nil || IsNil(o.Script) {
+		var ret []ScriptInner
+		return ret
+	}
+	return o.Script
+}
+
+// GetScriptOk returns a tuple with the Script field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetScriptOk() ([]ScriptInner, bool) {
+	if o == nil || IsNil(o.Script) {
+		return nil, false
+	}
+	return o.Script, true
+}
+
+// HasScript returns a boolean if a field has been set.
+func (o *SearchResponse) HasScript() bool {
+	if o != nil && !IsNil(o.Script) {
+		return true
+	}
+
+	return false
+}
+
+// SetScript gets a reference to the given []ScriptInner and assigns it to the Script field.
+func (o *SearchResponse) SetScript(v []ScriptInner) {
+	o.Script = v
+}
+
+// GetUpdateTime returns the UpdateTime field value if set, zero value otherwise.
+func (o *SearchResponse) GetUpdateTime() Time {
+	if o == nil || IsNil(o.UpdateTime) {
+		var ret Time
+		return ret
+	}
+	return *o.UpdateTime
+}
+
+// GetUpdateTimeOk returns a tuple with the UpdateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetUpdateTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.UpdateTime) {
+		return nil, false
+	}
+	return o.UpdateTime, true
+}
+
+// HasUpdateTime returns a boolean if a field has been set.
+func (o *SearchResponse) HasUpdateTime() bool {
+	if o != nil && !IsNil(o.UpdateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetUpdateTime gets a reference to the given Time and assigns it to the UpdateTime field.
+func (o *SearchResponse) SetUpdateTime(v Time) {
+	o.UpdateTime = &v
+}
+
+// GetLastUsageDate returns the LastUsageDate field value if set, zero value otherwise.
+func (o *SearchResponse) GetLastUsageDate() Time {
+	if o == nil || IsNil(o.LastUsageDate) {
+		var ret Time
+		return ret
+	}
+	return *o.LastUsageDate
+}
+
+// GetLastUsageDateOk returns a tuple with the LastUsageDate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SearchResponse) GetLastUsageDateOk() (*Time, bool) {
+	if o == nil || IsNil(o.LastUsageDate) {
+		return nil, false
+	}
+	return o.LastUsageDate, true
+}
+
+// HasLastUsageDate returns a boolean if a field has been set.
+func (o *SearchResponse) HasLastUsageDate() bool {
+	if o != nil && !IsNil(o.LastUsageDate) {
+		return true
+	}
+
+	return false
+}
+
+// SetLastUsageDate gets a reference to the given Time and assigns it to the LastUsageDate field.
+func (o *SearchResponse) SetLastUsageDate(v Time) {
+	o.LastUsageDate = &v
+}
+
+func (o SearchResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SearchResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CreateTime) {
+		toSerialize["createTime"] = o.CreateTime
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Script) {
+		toSerialize["script"] = o.Script
+	}
+	if !IsNil(o.UpdateTime) {
+		toSerialize["updateTime"] = o.UpdateTime
+	}
+	if !IsNil(o.LastUsageDate) {
+		toSerialize["lastUsageDate"] = o.LastUsageDate
+	}
+	return toSerialize, nil
+}
+
+type NullableSearchResponse struct {
+	value *SearchResponse
+	isSet bool
+}
+
+func (v NullableSearchResponse) Get() *SearchResponse {
+	return v.value
+}
+
+func (v *NullableSearchResponse) Set(val *SearchResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSearchResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSearchResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSearchResponse(val *SearchResponse) *NullableSearchResponse {
+	return &NullableSearchResponse{value: val, isSet: true}
+}
+
+func (v NullableSearchResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSearchResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/security_config.go b/pkg/infobip/models/voice/security_config.go
new file mode 100644
index 0000000..a8ae9db
--- /dev/null
+++ b/pkg/infobip/models/voice/security_config.go
@@ -0,0 +1,140 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SecurityConfig URL endpoint security configuration.
+type SecurityConfig struct {
+	BasicSecurityConfig *BasicSecurityConfig
+	HmacSecurityConfig  *HmacSecurityConfig
+}
+
+// BasicSecurityConfigAsSecurityConfig is a convenience function that returns BasicSecurityConfig wrapped in SecurityConfig
+func BasicSecurityConfigAsSecurityConfig(v *BasicSecurityConfig) SecurityConfig {
+	return SecurityConfig{
+		BasicSecurityConfig: v,
+	}
+}
+
+// HmacSecurityConfigAsSecurityConfig is a convenience function that returns HmacSecurityConfig wrapped in SecurityConfig
+func HmacSecurityConfigAsSecurityConfig(v *HmacSecurityConfig) SecurityConfig {
+	return SecurityConfig{
+		HmacSecurityConfig: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *SecurityConfig) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'BASIC'
+	if jsonDict["type"] == "BASIC" {
+		// try to unmarshal JSON data into BasicSecurityConfig
+		err = json.Unmarshal(data, &dst.BasicSecurityConfig)
+		if err == nil {
+			jsonBasicSecurityConfig, _ := json.Marshal(dst.BasicSecurityConfig)
+			if string(jsonBasicSecurityConfig) == "{}" { // empty struct
+				dst.BasicSecurityConfig = nil
+			} else {
+				return nil // data stored in dst.BasicSecurityConfig, return on the first match
+			}
+		} else {
+			dst.BasicSecurityConfig = nil
+		}
+	}
+	// check if the discriminator value is 'HMAC'
+	if jsonDict["type"] == "HMAC" {
+		// try to unmarshal JSON data into HmacSecurityConfig
+		err = json.Unmarshal(data, &dst.HmacSecurityConfig)
+		if err == nil {
+			jsonHmacSecurityConfig, _ := json.Marshal(dst.HmacSecurityConfig)
+			if string(jsonHmacSecurityConfig) == "{}" { // empty struct
+				dst.HmacSecurityConfig = nil
+			} else {
+				return nil // data stored in dst.HmacSecurityConfig, return on the first match
+			}
+		} else {
+			dst.HmacSecurityConfig = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(SecurityConfig)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src SecurityConfig) MarshalJSON() ([]byte, error) {
+	if src.BasicSecurityConfig != nil {
+		return json.Marshal(&src.BasicSecurityConfig)
+	}
+	if src.HmacSecurityConfig != nil {
+		return json.Marshal(&src.HmacSecurityConfig)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *SecurityConfig) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.BasicSecurityConfig != nil {
+		return obj.BasicSecurityConfig
+	}
+	if obj.HmacSecurityConfig != nil {
+		return obj.HmacSecurityConfig
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableSecurityConfig struct {
+	value *SecurityConfig
+	isSet bool
+}
+
+func (v NullableSecurityConfig) Get() *SecurityConfig {
+	return v.value
+}
+
+func (v *NullableSecurityConfig) Set(val *SecurityConfig) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSecurityConfig) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSecurityConfig) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSecurityConfig(val *SecurityConfig) *NullableSecurityConfig {
+	return &NullableSecurityConfig{value: val, isSet: true}
+}
+
+func (v NullableSecurityConfig) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSecurityConfig) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/selection_strategy.go b/pkg/infobip/models/voice/selection_strategy.go
new file mode 100644
index 0000000..aff17eb
--- /dev/null
+++ b/pkg/infobip/models/voice/selection_strategy.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SelectionStrategy Strategy for SIP trunk host selection.
+type SelectionStrategy string
+
+// List of SelectionStrategy
+const (
+	SELECTIONSTRATEGY_FAILOVER    SelectionStrategy = "FAILOVER"
+	SELECTIONSTRATEGY_ROUND_ROBIN SelectionStrategy = "ROUND_ROBIN"
+)
+
+// All allowed values of SelectionStrategy enum
+var AllowedSelectionStrategyEnumValues = []SelectionStrategy{
+	"FAILOVER",
+	"ROUND_ROBIN",
+}
+
+func (v *SelectionStrategy) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SelectionStrategy(value)
+	for _, existing := range AllowedSelectionStrategyEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SelectionStrategy", value)
+}
+
+// NewSelectionStrategyFromValue returns a pointer to a valid SelectionStrategy
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSelectionStrategyFromValue(v string) (*SelectionStrategy, error) {
+	ev := SelectionStrategy(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SelectionStrategy: valid values are %v", v, AllowedSelectionStrategyEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SelectionStrategy) IsValid() bool {
+	for _, existing := range AllowedSelectionStrategyEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SelectionStrategy value
+func (v SelectionStrategy) Ptr() *SelectionStrategy {
+	return &v
+}
+
+type NullableSelectionStrategy struct {
+	value *SelectionStrategy
+	isSet bool
+}
+
+func (v NullableSelectionStrategy) Get() *SelectionStrategy {
+	return v.value
+}
+
+func (v *NullableSelectionStrategy) Set(val *SelectionStrategy) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSelectionStrategy) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSelectionStrategy) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSelectionStrategy(val *SelectionStrategy) *NullableSelectionStrategy {
+	return &NullableSelectionStrategy{value: val, isSet: true}
+}
+
+func (v NullableSelectionStrategy) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSelectionStrategy) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/send_sms.go b/pkg/infobip/models/voice/send_sms.go
new file mode 100644
index 0000000..bc5a8c9
--- /dev/null
+++ b/pkg/infobip/models/voice/send_sms.go
@@ -0,0 +1,158 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SendSms type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SendSms{}
+
+// SendSms Send SMS action creates and sends a text message from the scenario.
+type SendSms struct {
+	SendSms SendSmsData
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _SendSms SendSms
+
+// NewSendSms instantiates a new SendSms object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSendSms(sendSms SendSmsData) *SendSms {
+	this := SendSms{}
+	this.SendSms = sendSms
+	return &this
+}
+
+// NewSendSmsWithDefaults instantiates a new SendSms object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSendSmsWithDefaults() *SendSms {
+	this := SendSms{}
+
+	return &this
+}
+
+// GetSendSms returns the SendSms field value
+func (o *SendSms) GetSendSms() SendSmsData {
+	if o == nil {
+		var ret SendSmsData
+		return ret
+	}
+
+	return o.SendSms
+}
+
+// GetSendSmsOk returns a tuple with the SendSms field value
+// and a boolean to check if the value has been set.
+func (o *SendSms) GetSendSmsOk() (*SendSmsData, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SendSms, true
+}
+
+// SetSendSms sets field value
+func (o *SendSms) SetSendSms(v SendSmsData) {
+	o.SendSms = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *SendSms) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SendSms) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *SendSms) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *SendSms) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o SendSms) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SendSms) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["sendSms"] = o.SendSms
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableSendSms struct {
+	value *SendSms
+	isSet bool
+}
+
+func (v NullableSendSms) Get() *SendSms {
+	return v.value
+}
+
+func (v *NullableSendSms) Set(val *SendSms) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSendSms) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSendSms) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSendSms(val *SendSms) *NullableSendSms {
+	return &NullableSendSms{value: val, isSet: true}
+}
+
+func (v NullableSendSms) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSendSms) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/send_sms_data.go b/pkg/infobip/models/voice/send_sms_data.go
new file mode 100644
index 0000000..da894b2
--- /dev/null
+++ b/pkg/infobip/models/voice/send_sms_data.go
@@ -0,0 +1,187 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SendSmsData type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SendSmsData{}
+
+// SendSmsData struct for SendSmsData
+type SendSmsData struct {
+	// The text of the message that will be sent.
+	Text string
+	// Represents sender ID and it can be alphanumeric or numeric; alphanumeric sender ID length should be between 3 and 11 characters; numeric sender ID length should be between 3 and 14 characters; the parameter can be constructed using variables
+	From *string
+	// Must be a valid E164 MSISDN; the parameter can be constructed using variables
+	To string
+}
+
+type _SendSmsData SendSmsData
+
+// NewSendSmsData instantiates a new SendSmsData object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSendSmsData(text string, to string) *SendSmsData {
+	this := SendSmsData{}
+	this.Text = text
+	this.To = to
+	return &this
+}
+
+// NewSendSmsDataWithDefaults instantiates a new SendSmsData object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSendSmsDataWithDefaults() *SendSmsData {
+	this := SendSmsData{}
+
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *SendSmsData) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *SendSmsData) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *SendSmsData) SetText(v string) {
+	o.Text = v
+}
+
+// GetFrom returns the From field value if set, zero value otherwise.
+func (o *SendSmsData) GetFrom() string {
+	if o == nil || IsNil(o.From) {
+		var ret string
+		return ret
+	}
+	return *o.From
+}
+
+// GetFromOk returns a tuple with the From field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SendSmsData) GetFromOk() (*string, bool) {
+	if o == nil || IsNil(o.From) {
+		return nil, false
+	}
+	return o.From, true
+}
+
+// HasFrom returns a boolean if a field has been set.
+func (o *SendSmsData) HasFrom() bool {
+	if o != nil && !IsNil(o.From) {
+		return true
+	}
+
+	return false
+}
+
+// SetFrom gets a reference to the given string and assigns it to the From field.
+func (o *SendSmsData) SetFrom(v string) {
+	o.From = &v
+}
+
+// GetTo returns the To field value
+func (o *SendSmsData) GetTo() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.To
+}
+
+// GetToOk returns a tuple with the To field value
+// and a boolean to check if the value has been set.
+func (o *SendSmsData) GetToOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.To, true
+}
+
+// SetTo sets field value
+func (o *SendSmsData) SetTo(v string) {
+	o.To = v
+}
+
+func (o SendSmsData) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SendSmsData) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["text"] = o.Text
+	if !IsNil(o.From) {
+		toSerialize["from"] = o.From
+	}
+	toSerialize["to"] = o.To
+	return toSerialize, nil
+}
+
+type NullableSendSmsData struct {
+	value *SendSmsData
+	isSet bool
+}
+
+func (v NullableSendSmsData) Get() *SendSmsData {
+	return v.value
+}
+
+func (v *NullableSendSmsData) Set(val *SendSmsData) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSendSmsData) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSendSmsData) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSendSmsData(val *SendSmsData) *NullableSendSmsData {
+	return &NullableSendSmsData{value: val, isSet: true}
+}
+
+func (v NullableSendSmsData) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSendSmsData) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/send_to_reports.go b/pkg/infobip/models/voice/send_to_reports.go
new file mode 100644
index 0000000..b1d7d48
--- /dev/null
+++ b/pkg/infobip/models/voice/send_to_reports.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SendToReports Choose if you want to show DTMF inputs in Voice reports and logs. Options are: ALWAYS (always send - default value), MASKED (send masked - xxxx will be shown in reports and logs), NEVER (don't send - DTMF inputs will not be shown in reports and logs).
+type SendToReports string
+
+// List of SendToReports
+const (
+	SENDTOREPORTS_ALWAYS SendToReports = "ALWAYS"
+	SENDTOREPORTS_MASKED SendToReports = "MASKED"
+	SENDTOREPORTS_NEVER  SendToReports = "NEVER"
+)
+
+// All allowed values of SendToReports enum
+var AllowedSendToReportsEnumValues = []SendToReports{
+	"ALWAYS",
+	"MASKED",
+	"NEVER",
+}
+
+func (v *SendToReports) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SendToReports(value)
+	for _, existing := range AllowedSendToReportsEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SendToReports", value)
+}
+
+// NewSendToReportsFromValue returns a pointer to a valid SendToReports
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSendToReportsFromValue(v string) (*SendToReports, error) {
+	ev := SendToReports(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SendToReports: valid values are %v", v, AllowedSendToReportsEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SendToReports) IsValid() bool {
+	for _, existing := range AllowedSendToReportsEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SendToReports value
+func (v SendToReports) Ptr() *SendToReports {
+	return &v
+}
+
+type NullableSendToReports struct {
+	value *SendToReports
+	isSet bool
+}
+
+func (v NullableSendToReports) Get() *SendToReports {
+	return v.value
+}
+
+func (v *NullableSendToReports) Set(val *SendToReports) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSendToReports) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSendToReports) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSendToReports(val *SendToReports) *NullableSendToReports {
+	return &NullableSendToReports{value: val, isSet: true}
+}
+
+func (v NullableSendToReports) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSendToReports) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sending_speed.go b/pkg/infobip/models/voice/sending_speed.go
new file mode 100644
index 0000000..df3a5c4
--- /dev/null
+++ b/pkg/infobip/models/voice/sending_speed.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SendingSpeed type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SendingSpeed{}
+
+// SendingSpeed Sending rate defined in number of messages sent per second, minute, hour or day. First message will be sent immediately (or at _sendAt_ time if scheduling is used) and subsequent messages will be sent respecting defined speed. For example, if _sendingSpeed_ is defined as 10 messages per hour, messages will be sent every 6 minutes. If this parameter is defined, _validityPeriod_ is ignored.
+type SendingSpeed struct {
+	// Defines the number of messages that will be sent per specified time unit.
+	Speed *int32
+	// Defines time unit used for calculating sending speed.  Possible values: `second`, `minute`, `hour` and `day`.
+	TimeUnit *string
+}
+
+// NewSendingSpeed instantiates a new SendingSpeed object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSendingSpeed() *SendingSpeed {
+	this := SendingSpeed{}
+	return &this
+}
+
+// NewSendingSpeedWithDefaults instantiates a new SendingSpeed object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSendingSpeedWithDefaults() *SendingSpeed {
+	this := SendingSpeed{}
+
+	return &this
+}
+
+// GetSpeed returns the Speed field value if set, zero value otherwise.
+func (o *SendingSpeed) GetSpeed() int32 {
+	if o == nil || IsNil(o.Speed) {
+		var ret int32
+		return ret
+	}
+	return *o.Speed
+}
+
+// GetSpeedOk returns a tuple with the Speed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SendingSpeed) GetSpeedOk() (*int32, bool) {
+	if o == nil || IsNil(o.Speed) {
+		return nil, false
+	}
+	return o.Speed, true
+}
+
+// HasSpeed returns a boolean if a field has been set.
+func (o *SendingSpeed) HasSpeed() bool {
+	if o != nil && !IsNil(o.Speed) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeed gets a reference to the given int32 and assigns it to the Speed field.
+func (o *SendingSpeed) SetSpeed(v int32) {
+	o.Speed = &v
+}
+
+// GetTimeUnit returns the TimeUnit field value if set, zero value otherwise.
+func (o *SendingSpeed) GetTimeUnit() string {
+	if o == nil || IsNil(o.TimeUnit) {
+		var ret string
+		return ret
+	}
+	return *o.TimeUnit
+}
+
+// GetTimeUnitOk returns a tuple with the TimeUnit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SendingSpeed) GetTimeUnitOk() (*string, bool) {
+	if o == nil || IsNil(o.TimeUnit) {
+		return nil, false
+	}
+	return o.TimeUnit, true
+}
+
+// HasTimeUnit returns a boolean if a field has been set.
+func (o *SendingSpeed) HasTimeUnit() bool {
+	if o != nil && !IsNil(o.TimeUnit) {
+		return true
+	}
+
+	return false
+}
+
+// SetTimeUnit gets a reference to the given string and assigns it to the TimeUnit field.
+func (o *SendingSpeed) SetTimeUnit(v string) {
+	o.TimeUnit = &v
+}
+
+func (o SendingSpeed) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SendingSpeed) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Speed) {
+		toSerialize["speed"] = o.Speed
+	}
+	if !IsNil(o.TimeUnit) {
+		toSerialize["timeUnit"] = o.TimeUnit
+	}
+	return toSerialize, nil
+}
+
+type NullableSendingSpeed struct {
+	value *SendingSpeed
+	isSet bool
+}
+
+func (v NullableSendingSpeed) Get() *SendingSpeed {
+	return v.value
+}
+
+func (v *NullableSendingSpeed) Set(val *SendingSpeed) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSendingSpeed) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSendingSpeed) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSendingSpeed(val *SendingSpeed) *NullableSendingSpeed {
+	return &NullableSendingSpeed{value: val, isSet: true}
+}
+
+func (v NullableSendingSpeed) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSendingSpeed) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/set_variable.go b/pkg/infobip/models/voice/set_variable.go
new file mode 100644
index 0000000..dc4c655
--- /dev/null
+++ b/pkg/infobip/models/voice/set_variable.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SetVariable type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SetVariable{}
+
+// SetVariable Set variable action makes it possible to set a variable defined inside the IVR scenario to a specified value.
+type SetVariable struct {
+	// Name of a variable.
+	SetVariable string
+	// Value to which the variable should be set.
+	Value string
+}
+
+type _SetVariable SetVariable
+
+// NewSetVariable instantiates a new SetVariable object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSetVariable(setVariable string, value string) *SetVariable {
+	this := SetVariable{}
+	this.SetVariable = setVariable
+	this.Value = value
+	return &this
+}
+
+// NewSetVariableWithDefaults instantiates a new SetVariable object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSetVariableWithDefaults() *SetVariable {
+	this := SetVariable{}
+
+	return &this
+}
+
+// GetSetVariable returns the SetVariable field value
+func (o *SetVariable) GetSetVariable() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.SetVariable
+}
+
+// GetSetVariableOk returns a tuple with the SetVariable field value
+// and a boolean to check if the value has been set.
+func (o *SetVariable) GetSetVariableOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SetVariable, true
+}
+
+// SetSetVariable sets field value
+func (o *SetVariable) SetSetVariable(v string) {
+	o.SetVariable = v
+}
+
+// GetValue returns the Value field value
+func (o *SetVariable) GetValue() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Value
+}
+
+// GetValueOk returns a tuple with the Value field value
+// and a boolean to check if the value has been set.
+func (o *SetVariable) GetValueOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Value, true
+}
+
+// SetValue sets field value
+func (o *SetVariable) SetValue(v string) {
+	o.Value = v
+}
+
+func (o SetVariable) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SetVariable) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["setVariable"] = o.SetVariable
+	toSerialize["value"] = o.Value
+	return toSerialize, nil
+}
+
+type NullableSetVariable struct {
+	value *SetVariable
+	isSet bool
+}
+
+func (v NullableSetVariable) Get() *SetVariable {
+	return v.value
+}
+
+func (v *NullableSetVariable) Set(val *SetVariable) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSetVariable) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSetVariable) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSetVariable(val *SetVariable) *NullableSetVariable {
+	return &NullableSetVariable{value: val, isSet: true}
+}
+
+func (v NullableSetVariable) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSetVariable) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sftp_upload_status.go b/pkg/infobip/models/voice/sftp_upload_status.go
new file mode 100644
index 0000000..054b6f7
--- /dev/null
+++ b/pkg/infobip/models/voice/sftp_upload_status.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SftpUploadStatus Indicates current status of the recording file being uploaded via SFTP.
+type SftpUploadStatus string
+
+// List of SftpUploadStatus
+const (
+	SFTPUPLOADSTATUS_UPLOADING SftpUploadStatus = "UPLOADING"
+	SFTPUPLOADSTATUS_UPLOADED  SftpUploadStatus = "UPLOADED"
+	SFTPUPLOADSTATUS_FAILED    SftpUploadStatus = "FAILED"
+)
+
+// All allowed values of SftpUploadStatus enum
+var AllowedSftpUploadStatusEnumValues = []SftpUploadStatus{
+	"UPLOADING",
+	"UPLOADED",
+	"FAILED",
+}
+
+func (v *SftpUploadStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SftpUploadStatus(value)
+	for _, existing := range AllowedSftpUploadStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SftpUploadStatus", value)
+}
+
+// NewSftpUploadStatusFromValue returns a pointer to a valid SftpUploadStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSftpUploadStatusFromValue(v string) (*SftpUploadStatus, error) {
+	ev := SftpUploadStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SftpUploadStatus: valid values are %v", v, AllowedSftpUploadStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SftpUploadStatus) IsValid() bool {
+	for _, existing := range AllowedSftpUploadStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SftpUploadStatus value
+func (v SftpUploadStatus) Ptr() *SftpUploadStatus {
+	return &v
+}
+
+type NullableSftpUploadStatus struct {
+	value *SftpUploadStatus
+	isSet bool
+}
+
+func (v NullableSftpUploadStatus) Get() *SftpUploadStatus {
+	return v.value
+}
+
+func (v *NullableSftpUploadStatus) Set(val *SftpUploadStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSftpUploadStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSftpUploadStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSftpUploadStatus(val *SftpUploadStatus) *NullableSftpUploadStatus {
+	return &NullableSftpUploadStatus{value: val, isSet: true}
+}
+
+func (v NullableSftpUploadStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSftpUploadStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/single_message_status.go b/pkg/infobip/models/voice/single_message_status.go
new file mode 100644
index 0000000..9ebc060
--- /dev/null
+++ b/pkg/infobip/models/voice/single_message_status.go
@@ -0,0 +1,277 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SingleMessageStatus type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SingleMessageStatus{}
+
+// SingleMessageStatus Indicates whether the message is successfully sent, not sent, delivered, not delivered, waiting for delivery or any other possible status.
+type SingleMessageStatus struct {
+	// Status group ID.
+	GroupId *int32
+	// Status group name that describes which category the status code belongs to, e.g. PENDING, UNDELIVERABLE, DELIVERED, EXPIRED, REJECTED.
+	GroupName *string
+	// Status ID.
+	Id *int32
+	// Status name.
+	Name *string
+	// Human-readable description of the status.
+	Description *string
+}
+
+// NewSingleMessageStatus instantiates a new SingleMessageStatus object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSingleMessageStatus() *SingleMessageStatus {
+	this := SingleMessageStatus{}
+	return &this
+}
+
+// NewSingleMessageStatusWithDefaults instantiates a new SingleMessageStatus object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSingleMessageStatusWithDefaults() *SingleMessageStatus {
+	this := SingleMessageStatus{}
+
+	return &this
+}
+
+// GetGroupId returns the GroupId field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetGroupId() int32 {
+	if o == nil || IsNil(o.GroupId) {
+		var ret int32
+		return ret
+	}
+	return *o.GroupId
+}
+
+// GetGroupIdOk returns a tuple with the GroupId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetGroupIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.GroupId) {
+		return nil, false
+	}
+	return o.GroupId, true
+}
+
+// HasGroupId returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasGroupId() bool {
+	if o != nil && !IsNil(o.GroupId) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupId gets a reference to the given int32 and assigns it to the GroupId field.
+func (o *SingleMessageStatus) SetGroupId(v int32) {
+	o.GroupId = &v
+}
+
+// GetGroupName returns the GroupName field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetGroupName() string {
+	if o == nil || IsNil(o.GroupName) {
+		var ret string
+		return ret
+	}
+	return *o.GroupName
+}
+
+// GetGroupNameOk returns a tuple with the GroupName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetGroupNameOk() (*string, bool) {
+	if o == nil || IsNil(o.GroupName) {
+		return nil, false
+	}
+	return o.GroupName, true
+}
+
+// HasGroupName returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasGroupName() bool {
+	if o != nil && !IsNil(o.GroupName) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupName gets a reference to the given string and assigns it to the GroupName field.
+func (o *SingleMessageStatus) SetGroupName(v string) {
+	o.GroupName = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetId() int32 {
+	if o == nil || IsNil(o.Id) {
+		var ret int32
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given int32 and assigns it to the Id field.
+func (o *SingleMessageStatus) SetId(v int32) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *SingleMessageStatus) SetName(v string) {
+	o.Name = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *SingleMessageStatus) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleMessageStatus) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *SingleMessageStatus) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *SingleMessageStatus) SetDescription(v string) {
+	o.Description = &v
+}
+
+func (o SingleMessageStatus) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SingleMessageStatus) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.GroupId) {
+		toSerialize["groupId"] = o.GroupId
+	}
+	if !IsNil(o.GroupName) {
+		toSerialize["groupName"] = o.GroupName
+	}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	return toSerialize, nil
+}
+
+type NullableSingleMessageStatus struct {
+	value *SingleMessageStatus
+	isSet bool
+}
+
+func (v NullableSingleMessageStatus) Get() *SingleMessageStatus {
+	return v.value
+}
+
+func (v *NullableSingleMessageStatus) Set(val *SingleMessageStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSingleMessageStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSingleMessageStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSingleMessageStatus(val *SingleMessageStatus) *NullableSingleMessageStatus {
+	return &NullableSingleMessageStatus{value: val, isSet: true}
+}
+
+func (v NullableSingleMessageStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSingleMessageStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/single_request.go b/pkg/infobip/models/voice/single_request.go
new file mode 100644
index 0000000..5b28ca4
--- /dev/null
+++ b/pkg/infobip/models/voice/single_request.go
@@ -0,0 +1,297 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SingleRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SingleRequest{}
+
+// SingleRequest struct for SingleRequest
+type SingleRequest struct {
+	// An audio file can be delivered as a voice message to the recipients. An audio file must be uploaded online, so that the existing URL can be available for file download. Size of the audio file must be below 4 MB. Supported formats of the provided file are mp3 and wav. Our platform needs to have permission to make GET and HEAD HTTP requests on the provided URL. Standard http ports (like 80, 8080, etc.) are advised.
+	AudioFileUrl *string
+	// Numeric sender ID in E.164 standard format (Example: 41793026727). This is caller ID that will be presented to the end user where applicable.
+	From string
+	// If the message is in text format, the language in which the message is written must be defined for correct pronunciation. More about Text-to-speech functionality and supported TTS languages can be found [here](https://www.infobip.com/docs/voice-and-video/outbound-calls#text-to-speech-voice-over-broadcast). If not set, default language is `English [en]`. If voice is not set, then default voice for that specific language is used. In the case of English language, the voice is `[Joanna]`.
+	Language *string
+	// Message to be converted to speech and played to subscribers. Message text can be up to 1400 characters long and cannot contain only punctuation. SSML (_Speech Synthesis Markup Language_) is supported and can be used to fully customize pronunciation of the provided text.
+	Text *string
+	// Phone number of the recipient. Phone number must be written in E.164 standard format (Example: 41793026727).
+	To    string
+	Voice *Voice
+}
+
+type _SingleRequest SingleRequest
+
+// NewSingleRequest instantiates a new SingleRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSingleRequest(from string, to string) *SingleRequest {
+	this := SingleRequest{}
+	this.From = from
+	this.To = to
+	return &this
+}
+
+// NewSingleRequestWithDefaults instantiates a new SingleRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSingleRequestWithDefaults() *SingleRequest {
+	this := SingleRequest{}
+
+	return &this
+}
+
+// GetAudioFileUrl returns the AudioFileUrl field value if set, zero value otherwise.
+func (o *SingleRequest) GetAudioFileUrl() string {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		var ret string
+		return ret
+	}
+	return *o.AudioFileUrl
+}
+
+// GetAudioFileUrlOk returns a tuple with the AudioFileUrl field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleRequest) GetAudioFileUrlOk() (*string, bool) {
+	if o == nil || IsNil(o.AudioFileUrl) {
+		return nil, false
+	}
+	return o.AudioFileUrl, true
+}
+
+// HasAudioFileUrl returns a boolean if a field has been set.
+func (o *SingleRequest) HasAudioFileUrl() bool {
+	if o != nil && !IsNil(o.AudioFileUrl) {
+		return true
+	}
+
+	return false
+}
+
+// SetAudioFileUrl gets a reference to the given string and assigns it to the AudioFileUrl field.
+func (o *SingleRequest) SetAudioFileUrl(v string) {
+	o.AudioFileUrl = &v
+}
+
+// GetFrom returns the From field value
+func (o *SingleRequest) GetFrom() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.From
+}
+
+// GetFromOk returns a tuple with the From field value
+// and a boolean to check if the value has been set.
+func (o *SingleRequest) GetFromOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.From, true
+}
+
+// SetFrom sets field value
+func (o *SingleRequest) SetFrom(v string) {
+	o.From = v
+}
+
+// GetLanguage returns the Language field value if set, zero value otherwise.
+func (o *SingleRequest) GetLanguage() string {
+	if o == nil || IsNil(o.Language) {
+		var ret string
+		return ret
+	}
+	return *o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleRequest) GetLanguageOk() (*string, bool) {
+	if o == nil || IsNil(o.Language) {
+		return nil, false
+	}
+	return o.Language, true
+}
+
+// HasLanguage returns a boolean if a field has been set.
+func (o *SingleRequest) HasLanguage() bool {
+	if o != nil && !IsNil(o.Language) {
+		return true
+	}
+
+	return false
+}
+
+// SetLanguage gets a reference to the given string and assigns it to the Language field.
+func (o *SingleRequest) SetLanguage(v string) {
+	o.Language = &v
+}
+
+// GetText returns the Text field value if set, zero value otherwise.
+func (o *SingleRequest) GetText() string {
+	if o == nil || IsNil(o.Text) {
+		var ret string
+		return ret
+	}
+	return *o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleRequest) GetTextOk() (*string, bool) {
+	if o == nil || IsNil(o.Text) {
+		return nil, false
+	}
+	return o.Text, true
+}
+
+// HasText returns a boolean if a field has been set.
+func (o *SingleRequest) HasText() bool {
+	if o != nil && !IsNil(o.Text) {
+		return true
+	}
+
+	return false
+}
+
+// SetText gets a reference to the given string and assigns it to the Text field.
+func (o *SingleRequest) SetText(v string) {
+	o.Text = &v
+}
+
+// GetTo returns the To field value
+func (o *SingleRequest) GetTo() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.To
+}
+
+// GetToOk returns a tuple with the To field value
+// and a boolean to check if the value has been set.
+func (o *SingleRequest) GetToOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.To, true
+}
+
+// SetTo sets field value
+func (o *SingleRequest) SetTo(v string) {
+	o.To = v
+}
+
+// GetVoice returns the Voice field value if set, zero value otherwise.
+func (o *SingleRequest) GetVoice() Voice {
+	if o == nil || IsNil(o.Voice) {
+		var ret Voice
+		return ret
+	}
+	return *o.Voice
+}
+
+// GetVoiceOk returns a tuple with the Voice field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SingleRequest) GetVoiceOk() (*Voice, bool) {
+	if o == nil || IsNil(o.Voice) {
+		return nil, false
+	}
+	return o.Voice, true
+}
+
+// HasVoice returns a boolean if a field has been set.
+func (o *SingleRequest) HasVoice() bool {
+	if o != nil && !IsNil(o.Voice) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoice gets a reference to the given Voice and assigns it to the Voice field.
+func (o *SingleRequest) SetVoice(v Voice) {
+	o.Voice = &v
+}
+
+func (o SingleRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SingleRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.AudioFileUrl) {
+		toSerialize["audioFileUrl"] = o.AudioFileUrl
+	}
+	toSerialize["from"] = o.From
+	if !IsNil(o.Language) {
+		toSerialize["language"] = o.Language
+	}
+	if !IsNil(o.Text) {
+		toSerialize["text"] = o.Text
+	}
+	toSerialize["to"] = o.To
+	if !IsNil(o.Voice) {
+		toSerialize["voice"] = o.Voice
+	}
+	return toSerialize, nil
+}
+
+type NullableSingleRequest struct {
+	value *SingleRequest
+	isSet bool
+}
+
+func (v NullableSingleRequest) Get() *SingleRequest {
+	return v.value
+}
+
+func (v *NullableSingleRequest) Set(val *SingleRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSingleRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSingleRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSingleRequest(val *SingleRequest) *NullableSingleRequest {
+	return &NullableSingleRequest{value: val, isSet: true}
+}
+
+func (v NullableSingleRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSingleRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_endpoint.go b/pkg/infobip/models/voice/sip_endpoint.go
new file mode 100644
index 0000000..9fea0e8
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_endpoint.go
@@ -0,0 +1,191 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipEndpoint{}
+
+// SipEndpoint struct for SipEndpoint
+type SipEndpoint struct {
+	Type CallEndpointType
+	// SIP endpoint username.
+	Username string
+	// SIP trunk ID.
+	SipTrunkId string
+	// Custom headers. Only headers starting with `X-Client-` prefix will be propagated.
+	CustomHeaders *map[string]string
+}
+
+type _SipEndpoint SipEndpoint
+
+// NewSipEndpoint instantiates a new SipEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewSipEndpoint(username string, sipTrunkId string) *SipEndpoint {
+	this := SipEndpoint{}
+	this.Type = "SIP"
+	this.Username = username
+	this.SipTrunkId = sipTrunkId
+	return &this
+}
+
+// NewSipEndpointWithDefaults instantiates a new SipEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipEndpointWithDefaults() *SipEndpoint {
+	this := SipEndpoint{}
+	this.Type = "SIP"
+	return &this
+}
+
+// GetUsername returns the Username field value
+func (o *SipEndpoint) GetUsername() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value
+// and a boolean to check if the value has been set.
+func (o *SipEndpoint) GetUsernameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Username, true
+}
+
+// SetUsername sets field value
+func (o *SipEndpoint) SetUsername(v string) {
+	o.Username = v
+}
+
+// GetSipTrunkId returns the SipTrunkId field value
+func (o *SipEndpoint) GetSipTrunkId() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.SipTrunkId
+}
+
+// GetSipTrunkIdOk returns a tuple with the SipTrunkId field value
+// and a boolean to check if the value has been set.
+func (o *SipEndpoint) GetSipTrunkIdOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.SipTrunkId, true
+}
+
+// SetSipTrunkId sets field value
+func (o *SipEndpoint) SetSipTrunkId(v string) {
+	o.SipTrunkId = v
+}
+
+// GetCustomHeaders returns the CustomHeaders field value if set, zero value otherwise.
+func (o *SipEndpoint) GetCustomHeaders() map[string]string {
+	if o == nil || IsNil(o.CustomHeaders) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomHeaders
+}
+
+// GetCustomHeadersOk returns a tuple with the CustomHeaders field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipEndpoint) GetCustomHeadersOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomHeaders) {
+		return nil, false
+	}
+	return o.CustomHeaders, true
+}
+
+// HasCustomHeaders returns a boolean if a field has been set.
+func (o *SipEndpoint) HasCustomHeaders() bool {
+	if o != nil && !IsNil(o.CustomHeaders) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomHeaders gets a reference to the given map[string]string and assigns it to the CustomHeaders field.
+func (o *SipEndpoint) SetCustomHeaders(v map[string]string) {
+	o.CustomHeaders = &v
+}
+
+func (o SipEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["username"] = o.Username
+	toSerialize["sipTrunkId"] = o.SipTrunkId
+	if !IsNil(o.CustomHeaders) {
+		toSerialize["customHeaders"] = o.CustomHeaders
+	}
+	return toSerialize, nil
+}
+
+type NullableSipEndpoint struct {
+	value *SipEndpoint
+	isSet bool
+}
+
+func (v NullableSipEndpoint) Get() *SipEndpoint {
+	return v.value
+}
+
+func (v *NullableSipEndpoint) Set(val *SipEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipEndpoint(val *SipEndpoint) *NullableSipEndpoint {
+	return &NullableSipEndpoint{value: val, isSet: true}
+}
+
+func (v NullableSipEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_options.go b/pkg/infobip/models/voice/sip_options.go
new file mode 100644
index 0000000..4d859d6
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_options.go
@@ -0,0 +1,133 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipOptions{}
+
+// SipOptions SIP Options.
+type SipOptions struct {
+	// Indicates whether Infobip Session Border Controller should send SIP Options.
+	Enabled *bool
+}
+
+// NewSipOptions instantiates a new SipOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipOptions() *SipOptions {
+	this := SipOptions{}
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// NewSipOptionsWithDefaults instantiates a new SipOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipOptionsWithDefaults() *SipOptions {
+	this := SipOptions{}
+
+	var enabled bool = false
+	this.Enabled = &enabled
+	return &this
+}
+
+// GetEnabled returns the Enabled field value if set, zero value otherwise.
+func (o *SipOptions) GetEnabled() bool {
+	if o == nil || IsNil(o.Enabled) {
+		var ret bool
+		return ret
+	}
+	return *o.Enabled
+}
+
+// GetEnabledOk returns a tuple with the Enabled field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipOptions) GetEnabledOk() (*bool, bool) {
+	if o == nil || IsNil(o.Enabled) {
+		return nil, false
+	}
+	return o.Enabled, true
+}
+
+// HasEnabled returns a boolean if a field has been set.
+func (o *SipOptions) HasEnabled() bool {
+	if o != nil && !IsNil(o.Enabled) {
+		return true
+	}
+
+	return false
+}
+
+// SetEnabled gets a reference to the given bool and assigns it to the Enabled field.
+func (o *SipOptions) SetEnabled(v bool) {
+	o.Enabled = &v
+}
+
+func (o SipOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Enabled) {
+		toSerialize["enabled"] = o.Enabled
+	}
+	return toSerialize, nil
+}
+
+type NullableSipOptions struct {
+	value *SipOptions
+	isSet bool
+}
+
+func (v NullableSipOptions) Get() *SipOptions {
+	return v.value
+}
+
+func (v *NullableSipOptions) Set(val *SipOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipOptions(val *SipOptions) *NullableSipOptions {
+	return &NullableSipOptions{value: val, isSet: true}
+}
+
+func (v NullableSipOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_action_status.go b/pkg/infobip/models/voice/sip_trunk_action_status.go
new file mode 100644
index 0000000..f70fc9a
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_action_status.go
@@ -0,0 +1,118 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkActionStatus Status of the last action performed on the SIP trunk configuration.
+type SipTrunkActionStatus string
+
+// List of SipTrunkActionStatus
+const (
+	SIPTRUNKACTIONSTATUS_CREATING SipTrunkActionStatus = "CREATING"
+	SIPTRUNKACTIONSTATUS_UPDATING SipTrunkActionStatus = "UPDATING"
+	SIPTRUNKACTIONSTATUS_DELETING SipTrunkActionStatus = "DELETING"
+	SIPTRUNKACTIONSTATUS_FAILED   SipTrunkActionStatus = "FAILED"
+	SIPTRUNKACTIONSTATUS_RESET    SipTrunkActionStatus = "RESET"
+	SIPTRUNKACTIONSTATUS_SUCCESS  SipTrunkActionStatus = "SUCCESS"
+)
+
+// All allowed values of SipTrunkActionStatus enum
+var AllowedSipTrunkActionStatusEnumValues = []SipTrunkActionStatus{
+	"CREATING",
+	"UPDATING",
+	"DELETING",
+	"FAILED",
+	"RESET",
+	"SUCCESS",
+}
+
+func (v *SipTrunkActionStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SipTrunkActionStatus(value)
+	for _, existing := range AllowedSipTrunkActionStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SipTrunkActionStatus", value)
+}
+
+// NewSipTrunkActionStatusFromValue returns a pointer to a valid SipTrunkActionStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSipTrunkActionStatusFromValue(v string) (*SipTrunkActionStatus, error) {
+	ev := SipTrunkActionStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SipTrunkActionStatus: valid values are %v", v, AllowedSipTrunkActionStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SipTrunkActionStatus) IsValid() bool {
+	for _, existing := range AllowedSipTrunkActionStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SipTrunkActionStatus value
+func (v SipTrunkActionStatus) Ptr() *SipTrunkActionStatus {
+	return &v
+}
+
+type NullableSipTrunkActionStatus struct {
+	value *SipTrunkActionStatus
+	isSet bool
+}
+
+func (v NullableSipTrunkActionStatus) Get() *SipTrunkActionStatus {
+	return v.value
+}
+
+func (v *NullableSipTrunkActionStatus) Set(val *SipTrunkActionStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkActionStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkActionStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkActionStatus(val *SipTrunkActionStatus) *NullableSipTrunkActionStatus {
+	return &NullableSipTrunkActionStatus{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkActionStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkActionStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_action_status_response.go b/pkg/infobip/models/voice/sip_trunk_action_status_response.go
new file mode 100644
index 0000000..bb6c743
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_action_status_response.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkActionStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkActionStatusResponse{}
+
+// SipTrunkActionStatusResponse SIP trunk action status.
+type SipTrunkActionStatusResponse struct {
+	Status *SipTrunkActionStatus
+	// Description of the `FAILED` or `RESET` action.
+	Reason *string
+}
+
+// NewSipTrunkActionStatusResponse instantiates a new SipTrunkActionStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkActionStatusResponse() *SipTrunkActionStatusResponse {
+	this := SipTrunkActionStatusResponse{}
+	return &this
+}
+
+// NewSipTrunkActionStatusResponseWithDefaults instantiates a new SipTrunkActionStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkActionStatusResponseWithDefaults() *SipTrunkActionStatusResponse {
+	this := SipTrunkActionStatusResponse{}
+
+	return &this
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *SipTrunkActionStatusResponse) GetStatus() SipTrunkActionStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret SipTrunkActionStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkActionStatusResponse) GetStatusOk() (*SipTrunkActionStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *SipTrunkActionStatusResponse) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given SipTrunkActionStatus and assigns it to the Status field.
+func (o *SipTrunkActionStatusResponse) SetStatus(v SipTrunkActionStatus) {
+	o.Status = &v
+}
+
+// GetReason returns the Reason field value if set, zero value otherwise.
+func (o *SipTrunkActionStatusResponse) GetReason() string {
+	if o == nil || IsNil(o.Reason) {
+		var ret string
+		return ret
+	}
+	return *o.Reason
+}
+
+// GetReasonOk returns a tuple with the Reason field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkActionStatusResponse) GetReasonOk() (*string, bool) {
+	if o == nil || IsNil(o.Reason) {
+		return nil, false
+	}
+	return o.Reason, true
+}
+
+// HasReason returns a boolean if a field has been set.
+func (o *SipTrunkActionStatusResponse) HasReason() bool {
+	if o != nil && !IsNil(o.Reason) {
+		return true
+	}
+
+	return false
+}
+
+// SetReason gets a reference to the given string and assigns it to the Reason field.
+func (o *SipTrunkActionStatusResponse) SetReason(v string) {
+	o.Reason = &v
+}
+
+func (o SipTrunkActionStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkActionStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.Reason) {
+		toSerialize["reason"] = o.Reason
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkActionStatusResponse struct {
+	value *SipTrunkActionStatusResponse
+	isSet bool
+}
+
+func (v NullableSipTrunkActionStatusResponse) Get() *SipTrunkActionStatusResponse {
+	return v.value
+}
+
+func (v *NullableSipTrunkActionStatusResponse) Set(val *SipTrunkActionStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkActionStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkActionStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkActionStatusResponse(val *SipTrunkActionStatusResponse) *NullableSipTrunkActionStatusResponse {
+	return &NullableSipTrunkActionStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkActionStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkActionStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_admin_status.go b/pkg/infobip/models/voice/sip_trunk_admin_status.go
new file mode 100644
index 0000000..e1f86b1
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_admin_status.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkAdminStatus SIP trunk admin status.
+type SipTrunkAdminStatus string
+
+// List of SipTrunkAdminStatus
+const (
+	SIPTRUNKADMINSTATUS_ENABLED         SipTrunkAdminStatus = "ENABLED"
+	SIPTRUNKADMINSTATUS_DISABLED        SipTrunkAdminStatus = "DISABLED"
+	SIPTRUNKADMINSTATUS_SYSTEM_DISABLED SipTrunkAdminStatus = "SYSTEM_DISABLED"
+)
+
+// All allowed values of SipTrunkAdminStatus enum
+var AllowedSipTrunkAdminStatusEnumValues = []SipTrunkAdminStatus{
+	"ENABLED",
+	"DISABLED",
+	"SYSTEM_DISABLED",
+}
+
+func (v *SipTrunkAdminStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SipTrunkAdminStatus(value)
+	for _, existing := range AllowedSipTrunkAdminStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SipTrunkAdminStatus", value)
+}
+
+// NewSipTrunkAdminStatusFromValue returns a pointer to a valid SipTrunkAdminStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSipTrunkAdminStatusFromValue(v string) (*SipTrunkAdminStatus, error) {
+	ev := SipTrunkAdminStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SipTrunkAdminStatus: valid values are %v", v, AllowedSipTrunkAdminStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SipTrunkAdminStatus) IsValid() bool {
+	for _, existing := range AllowedSipTrunkAdminStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SipTrunkAdminStatus value
+func (v SipTrunkAdminStatus) Ptr() *SipTrunkAdminStatus {
+	return &v
+}
+
+type NullableSipTrunkAdminStatus struct {
+	value *SipTrunkAdminStatus
+	isSet bool
+}
+
+func (v NullableSipTrunkAdminStatus) Get() *SipTrunkAdminStatus {
+	return v.value
+}
+
+func (v *NullableSipTrunkAdminStatus) Set(val *SipTrunkAdminStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkAdminStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkAdminStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkAdminStatus(val *SipTrunkAdminStatus) *NullableSipTrunkAdminStatus {
+	return &NullableSipTrunkAdminStatus{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkAdminStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkAdminStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_location.go b/pkg/infobip/models/voice/sip_trunk_location.go
new file mode 100644
index 0000000..fe886c6
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_location.go
@@ -0,0 +1,126 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkLocation SIP trunk location.
+type SipTrunkLocation string
+
+// List of SipTrunkLocation
+const (
+	SIPTRUNKLOCATION_SAO_PAULO    SipTrunkLocation = "SAO_PAULO"
+	SIPTRUNKLOCATION_BOGOTA       SipTrunkLocation = "BOGOTA"
+	SIPTRUNKLOCATION_FRANKFURT    SipTrunkLocation = "FRANKFURT"
+	SIPTRUNKLOCATION_JOHANNESBURG SipTrunkLocation = "JOHANNESBURG"
+	SIPTRUNKLOCATION_NEW_YORK     SipTrunkLocation = "NEW_YORK"
+	SIPTRUNKLOCATION_PORTLAND     SipTrunkLocation = "PORTLAND"
+	SIPTRUNKLOCATION_MOSCOW       SipTrunkLocation = "MOSCOW"
+	SIPTRUNKLOCATION_SINGAPORE    SipTrunkLocation = "SINGAPORE"
+	SIPTRUNKLOCATION_ISTANBUL     SipTrunkLocation = "ISTANBUL"
+	SIPTRUNKLOCATION_KUALA_LUMPUR SipTrunkLocation = "KUALA_LUMPUR"
+)
+
+// All allowed values of SipTrunkLocation enum
+var AllowedSipTrunkLocationEnumValues = []SipTrunkLocation{
+	"SAO_PAULO",
+	"BOGOTA",
+	"FRANKFURT",
+	"JOHANNESBURG",
+	"NEW_YORK",
+	"PORTLAND",
+	"MOSCOW",
+	"SINGAPORE",
+	"ISTANBUL",
+	"KUALA_LUMPUR",
+}
+
+func (v *SipTrunkLocation) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SipTrunkLocation(value)
+	for _, existing := range AllowedSipTrunkLocationEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SipTrunkLocation", value)
+}
+
+// NewSipTrunkLocationFromValue returns a pointer to a valid SipTrunkLocation
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSipTrunkLocationFromValue(v string) (*SipTrunkLocation, error) {
+	ev := SipTrunkLocation(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SipTrunkLocation: valid values are %v", v, AllowedSipTrunkLocationEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SipTrunkLocation) IsValid() bool {
+	for _, existing := range AllowedSipTrunkLocationEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SipTrunkLocation value
+func (v SipTrunkLocation) Ptr() *SipTrunkLocation {
+	return &v
+}
+
+type NullableSipTrunkLocation struct {
+	value *SipTrunkLocation
+	isSet bool
+}
+
+func (v NullableSipTrunkLocation) Get() *SipTrunkLocation {
+	return v.value
+}
+
+func (v *NullableSipTrunkLocation) Set(val *SipTrunkLocation) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkLocation) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkLocation) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkLocation(val *SipTrunkLocation) *NullableSipTrunkLocation {
+	return &NullableSipTrunkLocation{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkLocation) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkLocation) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_page.go b/pkg/infobip/models/voice/sip_trunk_page.go
new file mode 100644
index 0000000..d8b6906
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkPage{}
+
+// SipTrunkPage struct for SipTrunkPage
+type SipTrunkPage struct {
+	// The list of the results for this page.
+	Results []SipTrunkResponse
+	Paging  *PageInfo
+}
+
+// NewSipTrunkPage instantiates a new SipTrunkPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkPage() *SipTrunkPage {
+	this := SipTrunkPage{}
+	return &this
+}
+
+// NewSipTrunkPageWithDefaults instantiates a new SipTrunkPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkPageWithDefaults() *SipTrunkPage {
+	this := SipTrunkPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *SipTrunkPage) GetResults() []SipTrunkResponse {
+	if o == nil || IsNil(o.Results) {
+		var ret []SipTrunkResponse
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkPage) GetResultsOk() ([]SipTrunkResponse, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *SipTrunkPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []SipTrunkResponse and assigns it to the Results field.
+func (o *SipTrunkPage) SetResults(v []SipTrunkResponse) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *SipTrunkPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *SipTrunkPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *SipTrunkPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o SipTrunkPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkPage struct {
+	value *SipTrunkPage
+	isSet bool
+}
+
+func (v NullableSipTrunkPage) Get() *SipTrunkPage {
+	return v.value
+}
+
+func (v *NullableSipTrunkPage) Set(val *SipTrunkPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkPage(val *SipTrunkPage) *NullableSipTrunkPage {
+	return &NullableSipTrunkPage{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_registration_credentials.go b/pkg/infobip/models/voice/sip_trunk_registration_credentials.go
new file mode 100644
index 0000000..78767d3
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_registration_credentials.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkRegistrationCredentials type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkRegistrationCredentials{}
+
+// SipTrunkRegistrationCredentials struct for SipTrunkRegistrationCredentials
+type SipTrunkRegistrationCredentials struct {
+	// Registration username.
+	Username *string
+	// New registration password.
+	Password *string
+}
+
+// NewSipTrunkRegistrationCredentials instantiates a new SipTrunkRegistrationCredentials object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkRegistrationCredentials() *SipTrunkRegistrationCredentials {
+	this := SipTrunkRegistrationCredentials{}
+	return &this
+}
+
+// NewSipTrunkRegistrationCredentialsWithDefaults instantiates a new SipTrunkRegistrationCredentials object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkRegistrationCredentialsWithDefaults() *SipTrunkRegistrationCredentials {
+	this := SipTrunkRegistrationCredentials{}
+
+	return &this
+}
+
+// GetUsername returns the Username field value if set, zero value otherwise.
+func (o *SipTrunkRegistrationCredentials) GetUsername() string {
+	if o == nil || IsNil(o.Username) {
+		var ret string
+		return ret
+	}
+	return *o.Username
+}
+
+// GetUsernameOk returns a tuple with the Username field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkRegistrationCredentials) GetUsernameOk() (*string, bool) {
+	if o == nil || IsNil(o.Username) {
+		return nil, false
+	}
+	return o.Username, true
+}
+
+// HasUsername returns a boolean if a field has been set.
+func (o *SipTrunkRegistrationCredentials) HasUsername() bool {
+	if o != nil && !IsNil(o.Username) {
+		return true
+	}
+
+	return false
+}
+
+// SetUsername gets a reference to the given string and assigns it to the Username field.
+func (o *SipTrunkRegistrationCredentials) SetUsername(v string) {
+	o.Username = &v
+}
+
+// GetPassword returns the Password field value if set, zero value otherwise.
+func (o *SipTrunkRegistrationCredentials) GetPassword() string {
+	if o == nil || IsNil(o.Password) {
+		var ret string
+		return ret
+	}
+	return *o.Password
+}
+
+// GetPasswordOk returns a tuple with the Password field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkRegistrationCredentials) GetPasswordOk() (*string, bool) {
+	if o == nil || IsNil(o.Password) {
+		return nil, false
+	}
+	return o.Password, true
+}
+
+// HasPassword returns a boolean if a field has been set.
+func (o *SipTrunkRegistrationCredentials) HasPassword() bool {
+	if o != nil && !IsNil(o.Password) {
+		return true
+	}
+
+	return false
+}
+
+// SetPassword gets a reference to the given string and assigns it to the Password field.
+func (o *SipTrunkRegistrationCredentials) SetPassword(v string) {
+	o.Password = &v
+}
+
+func (o SipTrunkRegistrationCredentials) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkRegistrationCredentials) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Username) {
+		toSerialize["username"] = o.Username
+	}
+	if !IsNil(o.Password) {
+		toSerialize["password"] = o.Password
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkRegistrationCredentials struct {
+	value *SipTrunkRegistrationCredentials
+	isSet bool
+}
+
+func (v NullableSipTrunkRegistrationCredentials) Get() *SipTrunkRegistrationCredentials {
+	return v.value
+}
+
+func (v *NullableSipTrunkRegistrationCredentials) Set(val *SipTrunkRegistrationCredentials) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkRegistrationCredentials) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkRegistrationCredentials) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkRegistrationCredentials(val *SipTrunkRegistrationCredentials) *NullableSipTrunkRegistrationCredentials {
+	return &NullableSipTrunkRegistrationCredentials{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkRegistrationCredentials) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkRegistrationCredentials) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_registration_status.go b/pkg/infobip/models/voice/sip_trunk_registration_status.go
new file mode 100644
index 0000000..5ff8a43
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_registration_status.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkRegistrationStatus SIP trunk registration status.
+type SipTrunkRegistrationStatus string
+
+// List of SipTrunkRegistrationStatus
+const (
+	SIPTRUNKREGISTRATIONSTATUS_REGISTERED   SipTrunkRegistrationStatus = "REGISTERED"
+	SIPTRUNKREGISTRATIONSTATUS_UNREGISTERED SipTrunkRegistrationStatus = "UNREGISTERED"
+)
+
+// All allowed values of SipTrunkRegistrationStatus enum
+var AllowedSipTrunkRegistrationStatusEnumValues = []SipTrunkRegistrationStatus{
+	"REGISTERED",
+	"UNREGISTERED",
+}
+
+func (v *SipTrunkRegistrationStatus) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SipTrunkRegistrationStatus(value)
+	for _, existing := range AllowedSipTrunkRegistrationStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SipTrunkRegistrationStatus", value)
+}
+
+// NewSipTrunkRegistrationStatusFromValue returns a pointer to a valid SipTrunkRegistrationStatus
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSipTrunkRegistrationStatusFromValue(v string) (*SipTrunkRegistrationStatus, error) {
+	ev := SipTrunkRegistrationStatus(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SipTrunkRegistrationStatus: valid values are %v", v, AllowedSipTrunkRegistrationStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SipTrunkRegistrationStatus) IsValid() bool {
+	for _, existing := range AllowedSipTrunkRegistrationStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SipTrunkRegistrationStatus value
+func (v SipTrunkRegistrationStatus) Ptr() *SipTrunkRegistrationStatus {
+	return &v
+}
+
+type NullableSipTrunkRegistrationStatus struct {
+	value *SipTrunkRegistrationStatus
+	isSet bool
+}
+
+func (v NullableSipTrunkRegistrationStatus) Get() *SipTrunkRegistrationStatus {
+	return v.value
+}
+
+func (v *NullableSipTrunkRegistrationStatus) Set(val *SipTrunkRegistrationStatus) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkRegistrationStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkRegistrationStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkRegistrationStatus(val *SipTrunkRegistrationStatus) *NullableSipTrunkRegistrationStatus {
+	return &NullableSipTrunkRegistrationStatus{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkRegistrationStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkRegistrationStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_request.go b/pkg/infobip/models/voice/sip_trunk_request.go
new file mode 100644
index 0000000..f1cd6c1
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_request.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkRequest struct for SipTrunkRequest
+type SipTrunkRequest struct {
+	ProviderSipTrunkRequest   *ProviderSipTrunkRequest
+	RegisteredSipTrunkRequest *RegisteredSipTrunkRequest
+	StaticSipTrunkRequest     *StaticSipTrunkRequest
+}
+
+// ProviderSipTrunkRequestAsSipTrunkRequest is a convenience function that returns ProviderSipTrunkRequest wrapped in SipTrunkRequest
+func ProviderSipTrunkRequestAsSipTrunkRequest(v *ProviderSipTrunkRequest) SipTrunkRequest {
+	return SipTrunkRequest{
+		ProviderSipTrunkRequest: v,
+	}
+}
+
+// RegisteredSipTrunkRequestAsSipTrunkRequest is a convenience function that returns RegisteredSipTrunkRequest wrapped in SipTrunkRequest
+func RegisteredSipTrunkRequestAsSipTrunkRequest(v *RegisteredSipTrunkRequest) SipTrunkRequest {
+	return SipTrunkRequest{
+		RegisteredSipTrunkRequest: v,
+	}
+}
+
+// StaticSipTrunkRequestAsSipTrunkRequest is a convenience function that returns StaticSipTrunkRequest wrapped in SipTrunkRequest
+func StaticSipTrunkRequestAsSipTrunkRequest(v *StaticSipTrunkRequest) SipTrunkRequest {
+	return SipTrunkRequest{
+		StaticSipTrunkRequest: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *SipTrunkRequest) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PROVIDER'
+	if jsonDict["type"] == "PROVIDER" {
+		// try to unmarshal JSON data into ProviderSipTrunkRequest
+		err = json.Unmarshal(data, &dst.ProviderSipTrunkRequest)
+		if err == nil {
+			jsonProviderSipTrunkRequest, _ := json.Marshal(dst.ProviderSipTrunkRequest)
+			if string(jsonProviderSipTrunkRequest) == "{}" { // empty struct
+				dst.ProviderSipTrunkRequest = nil
+			} else {
+				return nil // data stored in dst.ProviderSipTrunkRequest, return on the first match
+			}
+		} else {
+			dst.ProviderSipTrunkRequest = nil
+		}
+	}
+	// check if the discriminator value is 'REGISTERED'
+	if jsonDict["type"] == "REGISTERED" {
+		// try to unmarshal JSON data into RegisteredSipTrunkRequest
+		err = json.Unmarshal(data, &dst.RegisteredSipTrunkRequest)
+		if err == nil {
+			jsonRegisteredSipTrunkRequest, _ := json.Marshal(dst.RegisteredSipTrunkRequest)
+			if string(jsonRegisteredSipTrunkRequest) == "{}" { // empty struct
+				dst.RegisteredSipTrunkRequest = nil
+			} else {
+				return nil // data stored in dst.RegisteredSipTrunkRequest, return on the first match
+			}
+		} else {
+			dst.RegisteredSipTrunkRequest = nil
+		}
+	}
+	// check if the discriminator value is 'STATIC'
+	if jsonDict["type"] == "STATIC" {
+		// try to unmarshal JSON data into StaticSipTrunkRequest
+		err = json.Unmarshal(data, &dst.StaticSipTrunkRequest)
+		if err == nil {
+			jsonStaticSipTrunkRequest, _ := json.Marshal(dst.StaticSipTrunkRequest)
+			if string(jsonStaticSipTrunkRequest) == "{}" { // empty struct
+				dst.StaticSipTrunkRequest = nil
+			} else {
+				return nil // data stored in dst.StaticSipTrunkRequest, return on the first match
+			}
+		} else {
+			dst.StaticSipTrunkRequest = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(SipTrunkRequest)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src SipTrunkRequest) MarshalJSON() ([]byte, error) {
+	if src.ProviderSipTrunkRequest != nil {
+		return json.Marshal(&src.ProviderSipTrunkRequest)
+	}
+	if src.RegisteredSipTrunkRequest != nil {
+		return json.Marshal(&src.RegisteredSipTrunkRequest)
+	}
+	if src.StaticSipTrunkRequest != nil {
+		return json.Marshal(&src.StaticSipTrunkRequest)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *SipTrunkRequest) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.ProviderSipTrunkRequest != nil {
+		return obj.ProviderSipTrunkRequest
+	}
+	if obj.RegisteredSipTrunkRequest != nil {
+		return obj.RegisteredSipTrunkRequest
+	}
+	if obj.StaticSipTrunkRequest != nil {
+		return obj.StaticSipTrunkRequest
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableSipTrunkRequest struct {
+	value *SipTrunkRequest
+	isSet bool
+}
+
+func (v NullableSipTrunkRequest) Get() *SipTrunkRequest {
+	return v.value
+}
+
+func (v *NullableSipTrunkRequest) Set(val *SipTrunkRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkRequest(val *SipTrunkRequest) *NullableSipTrunkRequest {
+	return &NullableSipTrunkRequest{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_response.go b/pkg/infobip/models/voice/sip_trunk_response.go
new file mode 100644
index 0000000..6eb00b6
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_response.go
@@ -0,0 +1,169 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkResponse struct for SipTrunkResponse
+type SipTrunkResponse struct {
+	ProviderSipTrunkResponse   *ProviderSipTrunkResponse
+	RegisteredSipTrunkResponse *RegisteredSipTrunkResponse
+	StaticSipTrunkResponse     *StaticSipTrunkResponse
+}
+
+// ProviderSipTrunkResponseAsSipTrunkResponse is a convenience function that returns ProviderSipTrunkResponse wrapped in SipTrunkResponse
+func ProviderSipTrunkResponseAsSipTrunkResponse(v *ProviderSipTrunkResponse) SipTrunkResponse {
+	return SipTrunkResponse{
+		ProviderSipTrunkResponse: v,
+	}
+}
+
+// RegisteredSipTrunkResponseAsSipTrunkResponse is a convenience function that returns RegisteredSipTrunkResponse wrapped in SipTrunkResponse
+func RegisteredSipTrunkResponseAsSipTrunkResponse(v *RegisteredSipTrunkResponse) SipTrunkResponse {
+	return SipTrunkResponse{
+		RegisteredSipTrunkResponse: v,
+	}
+}
+
+// StaticSipTrunkResponseAsSipTrunkResponse is a convenience function that returns StaticSipTrunkResponse wrapped in SipTrunkResponse
+func StaticSipTrunkResponseAsSipTrunkResponse(v *StaticSipTrunkResponse) SipTrunkResponse {
+	return SipTrunkResponse{
+		StaticSipTrunkResponse: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *SipTrunkResponse) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'PROVIDER'
+	if jsonDict["type"] == "PROVIDER" {
+		// try to unmarshal JSON data into ProviderSipTrunkResponse
+		err = json.Unmarshal(data, &dst.ProviderSipTrunkResponse)
+		if err == nil {
+			jsonProviderSipTrunkResponse, _ := json.Marshal(dst.ProviderSipTrunkResponse)
+			if string(jsonProviderSipTrunkResponse) == "{}" { // empty struct
+				dst.ProviderSipTrunkResponse = nil
+			} else {
+				return nil // data stored in dst.ProviderSipTrunkResponse, return on the first match
+			}
+		} else {
+			dst.ProviderSipTrunkResponse = nil
+		}
+	}
+	// check if the discriminator value is 'REGISTERED'
+	if jsonDict["type"] == "REGISTERED" {
+		// try to unmarshal JSON data into RegisteredSipTrunkResponse
+		err = json.Unmarshal(data, &dst.RegisteredSipTrunkResponse)
+		if err == nil {
+			jsonRegisteredSipTrunkResponse, _ := json.Marshal(dst.RegisteredSipTrunkResponse)
+			if string(jsonRegisteredSipTrunkResponse) == "{}" { // empty struct
+				dst.RegisteredSipTrunkResponse = nil
+			} else {
+				return nil // data stored in dst.RegisteredSipTrunkResponse, return on the first match
+			}
+		} else {
+			dst.RegisteredSipTrunkResponse = nil
+		}
+	}
+	// check if the discriminator value is 'STATIC'
+	if jsonDict["type"] == "STATIC" {
+		// try to unmarshal JSON data into StaticSipTrunkResponse
+		err = json.Unmarshal(data, &dst.StaticSipTrunkResponse)
+		if err == nil {
+			jsonStaticSipTrunkResponse, _ := json.Marshal(dst.StaticSipTrunkResponse)
+			if string(jsonStaticSipTrunkResponse) == "{}" { // empty struct
+				dst.StaticSipTrunkResponse = nil
+			} else {
+				return nil // data stored in dst.StaticSipTrunkResponse, return on the first match
+			}
+		} else {
+			dst.StaticSipTrunkResponse = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(SipTrunkResponse)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src SipTrunkResponse) MarshalJSON() ([]byte, error) {
+	if src.ProviderSipTrunkResponse != nil {
+		return json.Marshal(&src.ProviderSipTrunkResponse)
+	}
+	if src.RegisteredSipTrunkResponse != nil {
+		return json.Marshal(&src.RegisteredSipTrunkResponse)
+	}
+	if src.StaticSipTrunkResponse != nil {
+		return json.Marshal(&src.StaticSipTrunkResponse)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *SipTrunkResponse) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.ProviderSipTrunkResponse != nil {
+		return obj.ProviderSipTrunkResponse
+	}
+	if obj.RegisteredSipTrunkResponse != nil {
+		return obj.RegisteredSipTrunkResponse
+	}
+	if obj.StaticSipTrunkResponse != nil {
+		return obj.StaticSipTrunkResponse
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableSipTrunkResponse struct {
+	value *SipTrunkResponse
+	isSet bool
+}
+
+func (v NullableSipTrunkResponse) Get() *SipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableSipTrunkResponse) Set(val *SipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkResponse(val *SipTrunkResponse) *NullableSipTrunkResponse {
+	return &NullableSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_service_address.go b/pkg/infobip/models/voice/sip_trunk_service_address.go
new file mode 100644
index 0000000..0b7c295
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_service_address.go
@@ -0,0 +1,386 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkServiceAddress type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkServiceAddress{}
+
+// SipTrunkServiceAddress struct for SipTrunkServiceAddress
+type SipTrunkServiceAddress struct {
+	// SIP trunk service address ID.
+	Id *string
+	// SIP trunk service address name.
+	Name *string
+	// SIP trunk service address street.
+	Street *string
+	// SIP trunk service address city.
+	City *string
+	// SIP trunk service address post code.
+	PostCode *string
+	// SIP trunk service address suite.
+	Suite   *string
+	Country *Country
+	Region  *Region
+}
+
+// NewSipTrunkServiceAddress instantiates a new SipTrunkServiceAddress object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkServiceAddress() *SipTrunkServiceAddress {
+	this := SipTrunkServiceAddress{}
+	return &this
+}
+
+// NewSipTrunkServiceAddressWithDefaults instantiates a new SipTrunkServiceAddress object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkServiceAddressWithDefaults() *SipTrunkServiceAddress {
+	this := SipTrunkServiceAddress{}
+
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *SipTrunkServiceAddress) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *SipTrunkServiceAddress) SetName(v string) {
+	o.Name = &v
+}
+
+// GetStreet returns the Street field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetStreet() string {
+	if o == nil || IsNil(o.Street) {
+		var ret string
+		return ret
+	}
+	return *o.Street
+}
+
+// GetStreetOk returns a tuple with the Street field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetStreetOk() (*string, bool) {
+	if o == nil || IsNil(o.Street) {
+		return nil, false
+	}
+	return o.Street, true
+}
+
+// HasStreet returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasStreet() bool {
+	if o != nil && !IsNil(o.Street) {
+		return true
+	}
+
+	return false
+}
+
+// SetStreet gets a reference to the given string and assigns it to the Street field.
+func (o *SipTrunkServiceAddress) SetStreet(v string) {
+	o.Street = &v
+}
+
+// GetCity returns the City field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetCity() string {
+	if o == nil || IsNil(o.City) {
+		var ret string
+		return ret
+	}
+	return *o.City
+}
+
+// GetCityOk returns a tuple with the City field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetCityOk() (*string, bool) {
+	if o == nil || IsNil(o.City) {
+		return nil, false
+	}
+	return o.City, true
+}
+
+// HasCity returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasCity() bool {
+	if o != nil && !IsNil(o.City) {
+		return true
+	}
+
+	return false
+}
+
+// SetCity gets a reference to the given string and assigns it to the City field.
+func (o *SipTrunkServiceAddress) SetCity(v string) {
+	o.City = &v
+}
+
+// GetPostCode returns the PostCode field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetPostCode() string {
+	if o == nil || IsNil(o.PostCode) {
+		var ret string
+		return ret
+	}
+	return *o.PostCode
+}
+
+// GetPostCodeOk returns a tuple with the PostCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetPostCodeOk() (*string, bool) {
+	if o == nil || IsNil(o.PostCode) {
+		return nil, false
+	}
+	return o.PostCode, true
+}
+
+// HasPostCode returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasPostCode() bool {
+	if o != nil && !IsNil(o.PostCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetPostCode gets a reference to the given string and assigns it to the PostCode field.
+func (o *SipTrunkServiceAddress) SetPostCode(v string) {
+	o.PostCode = &v
+}
+
+// GetSuite returns the Suite field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetSuite() string {
+	if o == nil || IsNil(o.Suite) {
+		var ret string
+		return ret
+	}
+	return *o.Suite
+}
+
+// GetSuiteOk returns a tuple with the Suite field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetSuiteOk() (*string, bool) {
+	if o == nil || IsNil(o.Suite) {
+		return nil, false
+	}
+	return o.Suite, true
+}
+
+// HasSuite returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasSuite() bool {
+	if o != nil && !IsNil(o.Suite) {
+		return true
+	}
+
+	return false
+}
+
+// SetSuite gets a reference to the given string and assigns it to the Suite field.
+func (o *SipTrunkServiceAddress) SetSuite(v string) {
+	o.Suite = &v
+}
+
+// GetCountry returns the Country field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetCountry() Country {
+	if o == nil || IsNil(o.Country) {
+		var ret Country
+		return ret
+	}
+	return *o.Country
+}
+
+// GetCountryOk returns a tuple with the Country field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetCountryOk() (*Country, bool) {
+	if o == nil || IsNil(o.Country) {
+		return nil, false
+	}
+	return o.Country, true
+}
+
+// HasCountry returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasCountry() bool {
+	if o != nil && !IsNil(o.Country) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountry gets a reference to the given Country and assigns it to the Country field.
+func (o *SipTrunkServiceAddress) SetCountry(v Country) {
+	o.Country = &v
+}
+
+// GetRegion returns the Region field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddress) GetRegion() Region {
+	if o == nil || IsNil(o.Region) {
+		var ret Region
+		return ret
+	}
+	return *o.Region
+}
+
+// GetRegionOk returns a tuple with the Region field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddress) GetRegionOk() (*Region, bool) {
+	if o == nil || IsNil(o.Region) {
+		return nil, false
+	}
+	return o.Region, true
+}
+
+// HasRegion returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddress) HasRegion() bool {
+	if o != nil && !IsNil(o.Region) {
+		return true
+	}
+
+	return false
+}
+
+// SetRegion gets a reference to the given Region and assigns it to the Region field.
+func (o *SipTrunkServiceAddress) SetRegion(v Region) {
+	o.Region = &v
+}
+
+func (o SipTrunkServiceAddress) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkServiceAddress) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Street) {
+		toSerialize["street"] = o.Street
+	}
+	if !IsNil(o.City) {
+		toSerialize["city"] = o.City
+	}
+	if !IsNil(o.PostCode) {
+		toSerialize["postCode"] = o.PostCode
+	}
+	if !IsNil(o.Suite) {
+		toSerialize["suite"] = o.Suite
+	}
+	if !IsNil(o.Country) {
+		toSerialize["country"] = o.Country
+	}
+	if !IsNil(o.Region) {
+		toSerialize["region"] = o.Region
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkServiceAddress struct {
+	value *SipTrunkServiceAddress
+	isSet bool
+}
+
+func (v NullableSipTrunkServiceAddress) Get() *SipTrunkServiceAddress {
+	return v.value
+}
+
+func (v *NullableSipTrunkServiceAddress) Set(val *SipTrunkServiceAddress) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkServiceAddress) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkServiceAddress) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkServiceAddress(val *SipTrunkServiceAddress) *NullableSipTrunkServiceAddress {
+	return &NullableSipTrunkServiceAddress{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkServiceAddress) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkServiceAddress) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_service_address_page.go b/pkg/infobip/models/voice/sip_trunk_service_address_page.go
new file mode 100644
index 0000000..0b320b7
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_service_address_page.go
@@ -0,0 +1,165 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkServiceAddressPage type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkServiceAddressPage{}
+
+// SipTrunkServiceAddressPage struct for SipTrunkServiceAddressPage
+type SipTrunkServiceAddressPage struct {
+	// The list of the results for this page.
+	Results []SipTrunkServiceAddress
+	Paging  *PageInfo
+}
+
+// NewSipTrunkServiceAddressPage instantiates a new SipTrunkServiceAddressPage object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkServiceAddressPage() *SipTrunkServiceAddressPage {
+	this := SipTrunkServiceAddressPage{}
+	return &this
+}
+
+// NewSipTrunkServiceAddressPageWithDefaults instantiates a new SipTrunkServiceAddressPage object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkServiceAddressPageWithDefaults() *SipTrunkServiceAddressPage {
+	this := SipTrunkServiceAddressPage{}
+
+	return &this
+}
+
+// GetResults returns the Results field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddressPage) GetResults() []SipTrunkServiceAddress {
+	if o == nil || IsNil(o.Results) {
+		var ret []SipTrunkServiceAddress
+		return ret
+	}
+	return o.Results
+}
+
+// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressPage) GetResultsOk() ([]SipTrunkServiceAddress, bool) {
+	if o == nil || IsNil(o.Results) {
+		return nil, false
+	}
+	return o.Results, true
+}
+
+// HasResults returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddressPage) HasResults() bool {
+	if o != nil && !IsNil(o.Results) {
+		return true
+	}
+
+	return false
+}
+
+// SetResults gets a reference to the given []SipTrunkServiceAddress and assigns it to the Results field.
+func (o *SipTrunkServiceAddressPage) SetResults(v []SipTrunkServiceAddress) {
+	o.Results = v
+}
+
+// GetPaging returns the Paging field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddressPage) GetPaging() PageInfo {
+	if o == nil || IsNil(o.Paging) {
+		var ret PageInfo
+		return ret
+	}
+	return *o.Paging
+}
+
+// GetPagingOk returns a tuple with the Paging field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressPage) GetPagingOk() (*PageInfo, bool) {
+	if o == nil || IsNil(o.Paging) {
+		return nil, false
+	}
+	return o.Paging, true
+}
+
+// HasPaging returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddressPage) HasPaging() bool {
+	if o != nil && !IsNil(o.Paging) {
+		return true
+	}
+
+	return false
+}
+
+// SetPaging gets a reference to the given PageInfo and assigns it to the Paging field.
+func (o *SipTrunkServiceAddressPage) SetPaging(v PageInfo) {
+	o.Paging = &v
+}
+
+func (o SipTrunkServiceAddressPage) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkServiceAddressPage) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Results) {
+		toSerialize["results"] = o.Results
+	}
+	if !IsNil(o.Paging) {
+		toSerialize["paging"] = o.Paging
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkServiceAddressPage struct {
+	value *SipTrunkServiceAddressPage
+	isSet bool
+}
+
+func (v NullableSipTrunkServiceAddressPage) Get() *SipTrunkServiceAddressPage {
+	return v.value
+}
+
+func (v *NullableSipTrunkServiceAddressPage) Set(val *SipTrunkServiceAddressPage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkServiceAddressPage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkServiceAddressPage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkServiceAddressPage(val *SipTrunkServiceAddressPage) *NullableSipTrunkServiceAddressPage {
+	return &NullableSipTrunkServiceAddressPage{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkServiceAddressPage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkServiceAddressPage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_service_address_request.go b/pkg/infobip/models/voice/sip_trunk_service_address_request.go
new file mode 100644
index 0000000..0add799
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_service_address_request.go
@@ -0,0 +1,308 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkServiceAddressRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkServiceAddressRequest{}
+
+// SipTrunkServiceAddressRequest SIP trunk service address request.
+type SipTrunkServiceAddressRequest struct {
+	// SIP trunk service address name.
+	Name string
+	// SIP trunk service address street.
+	Street string
+	// SIP trunk service address city.
+	City string
+	// SIP trunk service address post code.
+	PostCode string
+	// SIP trunk service address suite.
+	Suite *string
+	// SIP trunk service address [country code](#get-countries).
+	CountryCode string
+	// SIP trunk service address [country region code](#get-regions). Mandatory for countries that have defined regions.
+	CountryRegionCode *string
+}
+
+type _SipTrunkServiceAddressRequest SipTrunkServiceAddressRequest
+
+// NewSipTrunkServiceAddressRequest instantiates a new SipTrunkServiceAddressRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkServiceAddressRequest(name string, street string, city string, postCode string, countryCode string) *SipTrunkServiceAddressRequest {
+	this := SipTrunkServiceAddressRequest{}
+	this.Name = name
+	this.Street = street
+	this.City = city
+	this.PostCode = postCode
+	this.CountryCode = countryCode
+	return &this
+}
+
+// NewSipTrunkServiceAddressRequestWithDefaults instantiates a new SipTrunkServiceAddressRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkServiceAddressRequestWithDefaults() *SipTrunkServiceAddressRequest {
+	this := SipTrunkServiceAddressRequest{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *SipTrunkServiceAddressRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *SipTrunkServiceAddressRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetStreet returns the Street field value
+func (o *SipTrunkServiceAddressRequest) GetStreet() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Street
+}
+
+// GetStreetOk returns a tuple with the Street field value
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetStreetOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Street, true
+}
+
+// SetStreet sets field value
+func (o *SipTrunkServiceAddressRequest) SetStreet(v string) {
+	o.Street = v
+}
+
+// GetCity returns the City field value
+func (o *SipTrunkServiceAddressRequest) GetCity() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.City
+}
+
+// GetCityOk returns a tuple with the City field value
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetCityOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.City, true
+}
+
+// SetCity sets field value
+func (o *SipTrunkServiceAddressRequest) SetCity(v string) {
+	o.City = v
+}
+
+// GetPostCode returns the PostCode field value
+func (o *SipTrunkServiceAddressRequest) GetPostCode() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PostCode
+}
+
+// GetPostCodeOk returns a tuple with the PostCode field value
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetPostCodeOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PostCode, true
+}
+
+// SetPostCode sets field value
+func (o *SipTrunkServiceAddressRequest) SetPostCode(v string) {
+	o.PostCode = v
+}
+
+// GetSuite returns the Suite field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddressRequest) GetSuite() string {
+	if o == nil || IsNil(o.Suite) {
+		var ret string
+		return ret
+	}
+	return *o.Suite
+}
+
+// GetSuiteOk returns a tuple with the Suite field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetSuiteOk() (*string, bool) {
+	if o == nil || IsNil(o.Suite) {
+		return nil, false
+	}
+	return o.Suite, true
+}
+
+// HasSuite returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddressRequest) HasSuite() bool {
+	if o != nil && !IsNil(o.Suite) {
+		return true
+	}
+
+	return false
+}
+
+// SetSuite gets a reference to the given string and assigns it to the Suite field.
+func (o *SipTrunkServiceAddressRequest) SetSuite(v string) {
+	o.Suite = &v
+}
+
+// GetCountryCode returns the CountryCode field value
+func (o *SipTrunkServiceAddressRequest) GetCountryCode() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.CountryCode
+}
+
+// GetCountryCodeOk returns a tuple with the CountryCode field value
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetCountryCodeOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.CountryCode, true
+}
+
+// SetCountryCode sets field value
+func (o *SipTrunkServiceAddressRequest) SetCountryCode(v string) {
+	o.CountryCode = v
+}
+
+// GetCountryRegionCode returns the CountryRegionCode field value if set, zero value otherwise.
+func (o *SipTrunkServiceAddressRequest) GetCountryRegionCode() string {
+	if o == nil || IsNil(o.CountryRegionCode) {
+		var ret string
+		return ret
+	}
+	return *o.CountryRegionCode
+}
+
+// GetCountryRegionCodeOk returns a tuple with the CountryRegionCode field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkServiceAddressRequest) GetCountryRegionCodeOk() (*string, bool) {
+	if o == nil || IsNil(o.CountryRegionCode) {
+		return nil, false
+	}
+	return o.CountryRegionCode, true
+}
+
+// HasCountryRegionCode returns a boolean if a field has been set.
+func (o *SipTrunkServiceAddressRequest) HasCountryRegionCode() bool {
+	if o != nil && !IsNil(o.CountryRegionCode) {
+		return true
+	}
+
+	return false
+}
+
+// SetCountryRegionCode gets a reference to the given string and assigns it to the CountryRegionCode field.
+func (o *SipTrunkServiceAddressRequest) SetCountryRegionCode(v string) {
+	o.CountryRegionCode = &v
+}
+
+func (o SipTrunkServiceAddressRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkServiceAddressRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	toSerialize["street"] = o.Street
+	toSerialize["city"] = o.City
+	toSerialize["postCode"] = o.PostCode
+	if !IsNil(o.Suite) {
+		toSerialize["suite"] = o.Suite
+	}
+	toSerialize["countryCode"] = o.CountryCode
+	if !IsNil(o.CountryRegionCode) {
+		toSerialize["countryRegionCode"] = o.CountryRegionCode
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkServiceAddressRequest struct {
+	value *SipTrunkServiceAddressRequest
+	isSet bool
+}
+
+func (v NullableSipTrunkServiceAddressRequest) Get() *SipTrunkServiceAddressRequest {
+	return v.value
+}
+
+func (v *NullableSipTrunkServiceAddressRequest) Set(val *SipTrunkServiceAddressRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkServiceAddressRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkServiceAddressRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkServiceAddressRequest(val *SipTrunkServiceAddressRequest) *NullableSipTrunkServiceAddressRequest {
+	return &NullableSipTrunkServiceAddressRequest{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkServiceAddressRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkServiceAddressRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_status_request.go b/pkg/infobip/models/voice/sip_trunk_status_request.go
new file mode 100644
index 0000000..da7e6dc
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_status_request.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkStatusRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkStatusRequest{}
+
+// SipTrunkStatusRequest SIP trunk status request.
+type SipTrunkStatusRequest struct {
+	AdminStatus SipTrunkAdminStatus
+}
+
+type _SipTrunkStatusRequest SipTrunkStatusRequest
+
+// NewSipTrunkStatusRequest instantiates a new SipTrunkStatusRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkStatusRequest(adminStatus SipTrunkAdminStatus) *SipTrunkStatusRequest {
+	this := SipTrunkStatusRequest{}
+	this.AdminStatus = adminStatus
+	return &this
+}
+
+// NewSipTrunkStatusRequestWithDefaults instantiates a new SipTrunkStatusRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkStatusRequestWithDefaults() *SipTrunkStatusRequest {
+	this := SipTrunkStatusRequest{}
+
+	return &this
+}
+
+// GetAdminStatus returns the AdminStatus field value
+func (o *SipTrunkStatusRequest) GetAdminStatus() SipTrunkAdminStatus {
+	if o == nil {
+		var ret SipTrunkAdminStatus
+		return ret
+	}
+
+	return o.AdminStatus
+}
+
+// GetAdminStatusOk returns a tuple with the AdminStatus field value
+// and a boolean to check if the value has been set.
+func (o *SipTrunkStatusRequest) GetAdminStatusOk() (*SipTrunkAdminStatus, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.AdminStatus, true
+}
+
+// SetAdminStatus sets field value
+func (o *SipTrunkStatusRequest) SetAdminStatus(v SipTrunkAdminStatus) {
+	o.AdminStatus = v
+}
+
+func (o SipTrunkStatusRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkStatusRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["adminStatus"] = o.AdminStatus
+	return toSerialize, nil
+}
+
+type NullableSipTrunkStatusRequest struct {
+	value *SipTrunkStatusRequest
+	isSet bool
+}
+
+func (v NullableSipTrunkStatusRequest) Get() *SipTrunkStatusRequest {
+	return v.value
+}
+
+func (v *NullableSipTrunkStatusRequest) Set(val *SipTrunkStatusRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkStatusRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkStatusRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkStatusRequest(val *SipTrunkStatusRequest) *NullableSipTrunkStatusRequest {
+	return &NullableSipTrunkStatusRequest{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkStatusRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkStatusRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_status_response.go b/pkg/infobip/models/voice/sip_trunk_status_response.go
new file mode 100644
index 0000000..72bbd70
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_status_response.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SipTrunkStatusResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SipTrunkStatusResponse{}
+
+// SipTrunkStatusResponse struct for SipTrunkStatusResponse
+type SipTrunkStatusResponse struct {
+	AdminStatus *SipTrunkAdminStatus
+}
+
+// NewSipTrunkStatusResponse instantiates a new SipTrunkStatusResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSipTrunkStatusResponse() *SipTrunkStatusResponse {
+	this := SipTrunkStatusResponse{}
+	return &this
+}
+
+// NewSipTrunkStatusResponseWithDefaults instantiates a new SipTrunkStatusResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSipTrunkStatusResponseWithDefaults() *SipTrunkStatusResponse {
+	this := SipTrunkStatusResponse{}
+
+	return &this
+}
+
+// GetAdminStatus returns the AdminStatus field value if set, zero value otherwise.
+func (o *SipTrunkStatusResponse) GetAdminStatus() SipTrunkAdminStatus {
+	if o == nil || IsNil(o.AdminStatus) {
+		var ret SipTrunkAdminStatus
+		return ret
+	}
+	return *o.AdminStatus
+}
+
+// GetAdminStatusOk returns a tuple with the AdminStatus field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SipTrunkStatusResponse) GetAdminStatusOk() (*SipTrunkAdminStatus, bool) {
+	if o == nil || IsNil(o.AdminStatus) {
+		return nil, false
+	}
+	return o.AdminStatus, true
+}
+
+// HasAdminStatus returns a boolean if a field has been set.
+func (o *SipTrunkStatusResponse) HasAdminStatus() bool {
+	if o != nil && !IsNil(o.AdminStatus) {
+		return true
+	}
+
+	return false
+}
+
+// SetAdminStatus gets a reference to the given SipTrunkAdminStatus and assigns it to the AdminStatus field.
+func (o *SipTrunkStatusResponse) SetAdminStatus(v SipTrunkAdminStatus) {
+	o.AdminStatus = &v
+}
+
+func (o SipTrunkStatusResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SipTrunkStatusResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.AdminStatus) {
+		toSerialize["adminStatus"] = o.AdminStatus
+	}
+	return toSerialize, nil
+}
+
+type NullableSipTrunkStatusResponse struct {
+	value *SipTrunkStatusResponse
+	isSet bool
+}
+
+func (v NullableSipTrunkStatusResponse) Get() *SipTrunkStatusResponse {
+	return v.value
+}
+
+func (v *NullableSipTrunkStatusResponse) Set(val *SipTrunkStatusResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkStatusResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkStatusResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkStatusResponse(val *SipTrunkStatusResponse) *NullableSipTrunkStatusResponse {
+	return &NullableSipTrunkStatusResponse{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkStatusResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkStatusResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/sip_trunk_type.go b/pkg/infobip/models/voice/sip_trunk_type.go
new file mode 100644
index 0000000..6a0b0c9
--- /dev/null
+++ b/pkg/infobip/models/voice/sip_trunk_type.go
@@ -0,0 +1,112 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// SipTrunkType SIP trunk type.
+type SipTrunkType string
+
+// List of SipTrunkType
+const (
+	SIPTRUNKTYPE_STATIC     SipTrunkType = "STATIC"
+	SIPTRUNKTYPE_REGISTERED SipTrunkType = "REGISTERED"
+	SIPTRUNKTYPE_PROVIDER   SipTrunkType = "PROVIDER"
+)
+
+// All allowed values of SipTrunkType enum
+var AllowedSipTrunkTypeEnumValues = []SipTrunkType{
+	"STATIC",
+	"REGISTERED",
+	"PROVIDER",
+}
+
+func (v *SipTrunkType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := SipTrunkType(value)
+	for _, existing := range AllowedSipTrunkTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid SipTrunkType", value)
+}
+
+// NewSipTrunkTypeFromValue returns a pointer to a valid SipTrunkType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewSipTrunkTypeFromValue(v string) (*SipTrunkType, error) {
+	ev := SipTrunkType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for SipTrunkType: valid values are %v", v, AllowedSipTrunkTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v SipTrunkType) IsValid() bool {
+	for _, existing := range AllowedSipTrunkTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to SipTrunkType value
+func (v SipTrunkType) Ptr() *SipTrunkType {
+	return &v
+}
+
+type NullableSipTrunkType struct {
+	value *SipTrunkType
+	isSet bool
+}
+
+func (v NullableSipTrunkType) Get() *SipTrunkType {
+	return v.value
+}
+
+func (v *NullableSipTrunkType) Set(val *SipTrunkType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSipTrunkType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSipTrunkType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSipTrunkType(val *SipTrunkType) *NullableSipTrunkType {
+	return &NullableSipTrunkType{value: val, isSet: true}
+}
+
+func (v NullableSipTrunkType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSipTrunkType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/speech_capture_request.go b/pkg/infobip/models/voice/speech_capture_request.go
new file mode 100644
index 0000000..311a1ba
--- /dev/null
+++ b/pkg/infobip/models/voice/speech_capture_request.go
@@ -0,0 +1,214 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SpeechCaptureRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SpeechCaptureRequest{}
+
+// SpeechCaptureRequest struct for SpeechCaptureRequest
+type SpeechCaptureRequest struct {
+	Language TranscriptionLanguage
+	// The maximum duration of speech capture.
+	Timeout int32
+	// The silence duration before terminating the speech capture after speech has been detected.
+	MaxSilence *int32
+	// Array of key-phrases used for matching capturing speech.
+	KeyPhrases []string
+}
+
+type _SpeechCaptureRequest SpeechCaptureRequest
+
+// NewSpeechCaptureRequest instantiates a new SpeechCaptureRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSpeechCaptureRequest(language TranscriptionLanguage, timeout int32, keyPhrases []string) *SpeechCaptureRequest {
+	this := SpeechCaptureRequest{}
+	this.Language = language
+	this.Timeout = timeout
+	this.KeyPhrases = keyPhrases
+	return &this
+}
+
+// NewSpeechCaptureRequestWithDefaults instantiates a new SpeechCaptureRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSpeechCaptureRequestWithDefaults() *SpeechCaptureRequest {
+	this := SpeechCaptureRequest{}
+
+	return &this
+}
+
+// GetLanguage returns the Language field value
+func (o *SpeechCaptureRequest) GetLanguage() TranscriptionLanguage {
+	if o == nil {
+		var ret TranscriptionLanguage
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *SpeechCaptureRequest) GetLanguageOk() (*TranscriptionLanguage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *SpeechCaptureRequest) SetLanguage(v TranscriptionLanguage) {
+	o.Language = v
+}
+
+// GetTimeout returns the Timeout field value
+func (o *SpeechCaptureRequest) GetTimeout() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.Timeout
+}
+
+// GetTimeoutOk returns a tuple with the Timeout field value
+// and a boolean to check if the value has been set.
+func (o *SpeechCaptureRequest) GetTimeoutOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Timeout, true
+}
+
+// SetTimeout sets field value
+func (o *SpeechCaptureRequest) SetTimeout(v int32) {
+	o.Timeout = v
+}
+
+// GetMaxSilence returns the MaxSilence field value if set, zero value otherwise.
+func (o *SpeechCaptureRequest) GetMaxSilence() int32 {
+	if o == nil || IsNil(o.MaxSilence) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxSilence
+}
+
+// GetMaxSilenceOk returns a tuple with the MaxSilence field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SpeechCaptureRequest) GetMaxSilenceOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxSilence) {
+		return nil, false
+	}
+	return o.MaxSilence, true
+}
+
+// HasMaxSilence returns a boolean if a field has been set.
+func (o *SpeechCaptureRequest) HasMaxSilence() bool {
+	if o != nil && !IsNil(o.MaxSilence) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxSilence gets a reference to the given int32 and assigns it to the MaxSilence field.
+func (o *SpeechCaptureRequest) SetMaxSilence(v int32) {
+	o.MaxSilence = &v
+}
+
+// GetKeyPhrases returns the KeyPhrases field value
+func (o *SpeechCaptureRequest) GetKeyPhrases() []string {
+	if o == nil {
+		var ret []string
+		return ret
+	}
+
+	return o.KeyPhrases
+}
+
+// GetKeyPhrasesOk returns a tuple with the KeyPhrases field value
+// and a boolean to check if the value has been set.
+func (o *SpeechCaptureRequest) GetKeyPhrasesOk() ([]string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.KeyPhrases, true
+}
+
+// SetKeyPhrases sets field value
+func (o *SpeechCaptureRequest) SetKeyPhrases(v []string) {
+	o.KeyPhrases = v
+}
+
+func (o SpeechCaptureRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SpeechCaptureRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["language"] = o.Language
+	toSerialize["timeout"] = o.Timeout
+	if !IsNil(o.MaxSilence) {
+		toSerialize["maxSilence"] = o.MaxSilence
+	}
+	toSerialize["keyPhrases"] = o.KeyPhrases
+	return toSerialize, nil
+}
+
+type NullableSpeechCaptureRequest struct {
+	value *SpeechCaptureRequest
+	isSet bool
+}
+
+func (v NullableSpeechCaptureRequest) Get() *SpeechCaptureRequest {
+	return v.value
+}
+
+func (v *NullableSpeechCaptureRequest) Set(val *SpeechCaptureRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSpeechCaptureRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSpeechCaptureRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSpeechCaptureRequest(val *SpeechCaptureRequest) *NullableSpeechCaptureRequest {
+	return &NullableSpeechCaptureRequest{value: val, isSet: true}
+}
+
+func (v NullableSpeechCaptureRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSpeechCaptureRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/speech_options.go b/pkg/infobip/models/voice/speech_options.go
new file mode 100644
index 0000000..7341add
--- /dev/null
+++ b/pkg/infobip/models/voice/speech_options.go
@@ -0,0 +1,196 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SpeechOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SpeechOptions{}
+
+// SpeechOptions struct for SpeechOptions
+type SpeechOptions struct {
+	// Language used in speech that needs to be captured. For full list of supported languages see [LINK](https://www.infobip.com/docs/voice-and-video/interactive-voice-response-ivr#speech-recognition-supported-languages-ivr-over-api).
+	Language string
+	// Array of keyphrases used for matching capturing speech. If full captured text contains one of the specified phrases, that phrase will be set in variable specified in capture parameter. If keyphrases are not set or no matching is done, variable will be set to empty string. Every keyphrase can contain up to 5 words and number of keyphrases is not limited.
+	KeyPhrases []string
+	// If used, this parameter defines the number of seconds of silence that will stop capturing. For example value of 3 defines that capturing stops as soon as 3 seconds of silence is detected or when timeout expires, whichever happens first. Minimum value is 1 and maximum value is 5.
+	MaxSilence *int32
+}
+
+type _SpeechOptions SpeechOptions
+
+// NewSpeechOptions instantiates a new SpeechOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSpeechOptions(language string) *SpeechOptions {
+	this := SpeechOptions{}
+	this.Language = language
+	return &this
+}
+
+// NewSpeechOptionsWithDefaults instantiates a new SpeechOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSpeechOptionsWithDefaults() *SpeechOptions {
+	this := SpeechOptions{}
+
+	return &this
+}
+
+// GetLanguage returns the Language field value
+func (o *SpeechOptions) GetLanguage() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *SpeechOptions) GetLanguageOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *SpeechOptions) SetLanguage(v string) {
+	o.Language = v
+}
+
+// GetKeyPhrases returns the KeyPhrases field value if set, zero value otherwise.
+func (o *SpeechOptions) GetKeyPhrases() []string {
+	if o == nil || IsNil(o.KeyPhrases) {
+		var ret []string
+		return ret
+	}
+	return o.KeyPhrases
+}
+
+// GetKeyPhrasesOk returns a tuple with the KeyPhrases field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SpeechOptions) GetKeyPhrasesOk() ([]string, bool) {
+	if o == nil || IsNil(o.KeyPhrases) {
+		return nil, false
+	}
+	return o.KeyPhrases, true
+}
+
+// HasKeyPhrases returns a boolean if a field has been set.
+func (o *SpeechOptions) HasKeyPhrases() bool {
+	if o != nil && !IsNil(o.KeyPhrases) {
+		return true
+	}
+
+	return false
+}
+
+// SetKeyPhrases gets a reference to the given []string and assigns it to the KeyPhrases field.
+func (o *SpeechOptions) SetKeyPhrases(v []string) {
+	o.KeyPhrases = v
+}
+
+// GetMaxSilence returns the MaxSilence field value if set, zero value otherwise.
+func (o *SpeechOptions) GetMaxSilence() int32 {
+	if o == nil || IsNil(o.MaxSilence) {
+		var ret int32
+		return ret
+	}
+	return *o.MaxSilence
+}
+
+// GetMaxSilenceOk returns a tuple with the MaxSilence field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SpeechOptions) GetMaxSilenceOk() (*int32, bool) {
+	if o == nil || IsNil(o.MaxSilence) {
+		return nil, false
+	}
+	return o.MaxSilence, true
+}
+
+// HasMaxSilence returns a boolean if a field has been set.
+func (o *SpeechOptions) HasMaxSilence() bool {
+	if o != nil && !IsNil(o.MaxSilence) {
+		return true
+	}
+
+	return false
+}
+
+// SetMaxSilence gets a reference to the given int32 and assigns it to the MaxSilence field.
+func (o *SpeechOptions) SetMaxSilence(v int32) {
+	o.MaxSilence = &v
+}
+
+func (o SpeechOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SpeechOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["language"] = o.Language
+	if !IsNil(o.KeyPhrases) {
+		toSerialize["keyPhrases"] = o.KeyPhrases
+	}
+	if !IsNil(o.MaxSilence) {
+		toSerialize["maxSilence"] = o.MaxSilence
+	}
+	return toSerialize, nil
+}
+
+type NullableSpeechOptions struct {
+	value *SpeechOptions
+	isSet bool
+}
+
+func (v NullableSpeechOptions) Get() *SpeechOptions {
+	return v.value
+}
+
+func (v *NullableSpeechOptions) Set(val *SpeechOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSpeechOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSpeechOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSpeechOptions(val *SpeechOptions) *NullableSpeechOptions {
+	return &NullableSpeechOptions{value: val, isSet: true}
+}
+
+func (v NullableSpeechOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSpeechOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/standard_voice_response.go b/pkg/infobip/models/voice/standard_voice_response.go
new file mode 100644
index 0000000..2a8ab95
--- /dev/null
+++ b/pkg/infobip/models/voice/standard_voice_response.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StandardVoiceResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StandardVoiceResponse{}
+
+// StandardVoiceResponse struct for StandardVoiceResponse
+type StandardVoiceResponse struct {
+	// The ID that uniquely identifies the request. Bulk ID will be received only when you send a message to more than one destination address.
+	BulkId *string
+	// Array of sent messages, one object per every message.
+	Messages []VoiceResponseDetails
+}
+
+// NewStandardVoiceResponse instantiates a new StandardVoiceResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewStandardVoiceResponse() *StandardVoiceResponse {
+	this := StandardVoiceResponse{}
+	return &this
+}
+
+// NewStandardVoiceResponseWithDefaults instantiates a new StandardVoiceResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStandardVoiceResponseWithDefaults() *StandardVoiceResponse {
+	this := StandardVoiceResponse{}
+
+	return &this
+}
+
+// GetBulkId returns the BulkId field value if set, zero value otherwise.
+func (o *StandardVoiceResponse) GetBulkId() string {
+	if o == nil || IsNil(o.BulkId) {
+		var ret string
+		return ret
+	}
+	return *o.BulkId
+}
+
+// GetBulkIdOk returns a tuple with the BulkId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StandardVoiceResponse) GetBulkIdOk() (*string, bool) {
+	if o == nil || IsNil(o.BulkId) {
+		return nil, false
+	}
+	return o.BulkId, true
+}
+
+// HasBulkId returns a boolean if a field has been set.
+func (o *StandardVoiceResponse) HasBulkId() bool {
+	if o != nil && !IsNil(o.BulkId) {
+		return true
+	}
+
+	return false
+}
+
+// SetBulkId gets a reference to the given string and assigns it to the BulkId field.
+func (o *StandardVoiceResponse) SetBulkId(v string) {
+	o.BulkId = &v
+}
+
+// GetMessages returns the Messages field value if set, zero value otherwise.
+func (o *StandardVoiceResponse) GetMessages() []VoiceResponseDetails {
+	if o == nil || IsNil(o.Messages) {
+		var ret []VoiceResponseDetails
+		return ret
+	}
+	return o.Messages
+}
+
+// GetMessagesOk returns a tuple with the Messages field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StandardVoiceResponse) GetMessagesOk() ([]VoiceResponseDetails, bool) {
+	if o == nil || IsNil(o.Messages) {
+		return nil, false
+	}
+	return o.Messages, true
+}
+
+// HasMessages returns a boolean if a field has been set.
+func (o *StandardVoiceResponse) HasMessages() bool {
+	if o != nil && !IsNil(o.Messages) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessages gets a reference to the given []VoiceResponseDetails and assigns it to the Messages field.
+func (o *StandardVoiceResponse) SetMessages(v []VoiceResponseDetails) {
+	o.Messages = v
+}
+
+func (o StandardVoiceResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StandardVoiceResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.BulkId) {
+		toSerialize["bulkId"] = o.BulkId
+	}
+	if !IsNil(o.Messages) {
+		toSerialize["messages"] = o.Messages
+	}
+	return toSerialize, nil
+}
+
+type NullableStandardVoiceResponse struct {
+	value *StandardVoiceResponse
+	isSet bool
+}
+
+func (v NullableStandardVoiceResponse) Get() *StandardVoiceResponse {
+	return v.value
+}
+
+func (v *NullableStandardVoiceResponse) Set(val *StandardVoiceResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStandardVoiceResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStandardVoiceResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStandardVoiceResponse(val *StandardVoiceResponse) *NullableStandardVoiceResponse {
+	return &NullableStandardVoiceResponse{value: val, isSet: true}
+}
+
+func (v NullableStandardVoiceResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStandardVoiceResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/start_media_stream_request.go b/pkg/infobip/models/voice/start_media_stream_request.go
new file mode 100644
index 0000000..3b08caf
--- /dev/null
+++ b/pkg/infobip/models/voice/start_media_stream_request.go
@@ -0,0 +1,121 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StartMediaStreamRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StartMediaStreamRequest{}
+
+// StartMediaStreamRequest struct for StartMediaStreamRequest
+type StartMediaStreamRequest struct {
+	MediaStream MediaStream
+}
+
+type _StartMediaStreamRequest StartMediaStreamRequest
+
+// NewStartMediaStreamRequest instantiates a new StartMediaStreamRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewStartMediaStreamRequest(mediaStream MediaStream) *StartMediaStreamRequest {
+	this := StartMediaStreamRequest{}
+	this.MediaStream = mediaStream
+	return &this
+}
+
+// NewStartMediaStreamRequestWithDefaults instantiates a new StartMediaStreamRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStartMediaStreamRequestWithDefaults() *StartMediaStreamRequest {
+	this := StartMediaStreamRequest{}
+
+	return &this
+}
+
+// GetMediaStream returns the MediaStream field value
+func (o *StartMediaStreamRequest) GetMediaStream() MediaStream {
+	if o == nil {
+		var ret MediaStream
+		return ret
+	}
+
+	return o.MediaStream
+}
+
+// GetMediaStreamOk returns a tuple with the MediaStream field value
+// and a boolean to check if the value has been set.
+func (o *StartMediaStreamRequest) GetMediaStreamOk() (*MediaStream, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.MediaStream, true
+}
+
+// SetMediaStream sets field value
+func (o *StartMediaStreamRequest) SetMediaStream(v MediaStream) {
+	o.MediaStream = v
+}
+
+func (o StartMediaStreamRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StartMediaStreamRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["mediaStream"] = o.MediaStream
+	return toSerialize, nil
+}
+
+type NullableStartMediaStreamRequest struct {
+	value *StartMediaStreamRequest
+	isSet bool
+}
+
+func (v NullableStartMediaStreamRequest) Get() *StartMediaStreamRequest {
+	return v.value
+}
+
+func (v *NullableStartMediaStreamRequest) Set(val *StartMediaStreamRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStartMediaStreamRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStartMediaStreamRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStartMediaStreamRequest(val *StartMediaStreamRequest) *NullableStartMediaStreamRequest {
+	return &NullableStartMediaStreamRequest{value: val, isSet: true}
+}
+
+func (v NullableStartMediaStreamRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStartMediaStreamRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/start_transcription_request.go b/pkg/infobip/models/voice/start_transcription_request.go
new file mode 100644
index 0000000..f69bb3c
--- /dev/null
+++ b/pkg/infobip/models/voice/start_transcription_request.go
@@ -0,0 +1,128 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StartTranscriptionRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StartTranscriptionRequest{}
+
+// StartTranscriptionRequest struct for StartTranscriptionRequest
+type StartTranscriptionRequest struct {
+	Transcription *Transcription
+}
+
+// NewStartTranscriptionRequest instantiates a new StartTranscriptionRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewStartTranscriptionRequest() *StartTranscriptionRequest {
+	this := StartTranscriptionRequest{}
+	return &this
+}
+
+// NewStartTranscriptionRequestWithDefaults instantiates a new StartTranscriptionRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStartTranscriptionRequestWithDefaults() *StartTranscriptionRequest {
+	this := StartTranscriptionRequest{}
+
+	return &this
+}
+
+// GetTranscription returns the Transcription field value if set, zero value otherwise.
+func (o *StartTranscriptionRequest) GetTranscription() Transcription {
+	if o == nil || IsNil(o.Transcription) {
+		var ret Transcription
+		return ret
+	}
+	return *o.Transcription
+}
+
+// GetTranscriptionOk returns a tuple with the Transcription field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StartTranscriptionRequest) GetTranscriptionOk() (*Transcription, bool) {
+	if o == nil || IsNil(o.Transcription) {
+		return nil, false
+	}
+	return o.Transcription, true
+}
+
+// HasTranscription returns a boolean if a field has been set.
+func (o *StartTranscriptionRequest) HasTranscription() bool {
+	if o != nil && !IsNil(o.Transcription) {
+		return true
+	}
+
+	return false
+}
+
+// SetTranscription gets a reference to the given Transcription and assigns it to the Transcription field.
+func (o *StartTranscriptionRequest) SetTranscription(v Transcription) {
+	o.Transcription = &v
+}
+
+func (o StartTranscriptionRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StartTranscriptionRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Transcription) {
+		toSerialize["transcription"] = o.Transcription
+	}
+	return toSerialize, nil
+}
+
+type NullableStartTranscriptionRequest struct {
+	value *StartTranscriptionRequest
+	isSet bool
+}
+
+func (v NullableStartTranscriptionRequest) Get() *StartTranscriptionRequest {
+	return v.value
+}
+
+func (v *NullableStartTranscriptionRequest) Set(val *StartTranscriptionRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStartTranscriptionRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStartTranscriptionRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStartTranscriptionRequest(val *StartTranscriptionRequest) *NullableStartTranscriptionRequest {
+	return &NullableStartTranscriptionRequest{value: val, isSet: true}
+}
+
+func (v NullableStartTranscriptionRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStartTranscriptionRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/static_sip_trunk_request.go b/pkg/infobip/models/voice/static_sip_trunk_request.go
new file mode 100644
index 0000000..da32315
--- /dev/null
+++ b/pkg/infobip/models/voice/static_sip_trunk_request.go
@@ -0,0 +1,627 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StaticSipTrunkRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StaticSipTrunkRequest{}
+
+// StaticSipTrunkRequest struct for StaticSipTrunkRequest
+type StaticSipTrunkRequest struct {
+	Type                      SipTrunkType
+	Name                      string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	InternationalCallsAllowed *bool
+	ChannelLimit              int32
+	BillingPackage            BillingPackage
+	// List of audio codecs supported by a SIP trunk.
+	Codecs        []AudioCodec
+	Dtmf          *DtmfType
+	Fax           *FaxType
+	NumberFormat  *NumberPresentationFormat
+	Anonymization *AnonymizationType
+	// List of SIP trunk source hosts. If empty, destination host list must not be empty. Source hosts can be sent in 2 formats: IP address without port or domain without port.
+	SourceHosts []string
+	// List of SIP trunk destination hosts. If empty, source host list must not be empty. Destination hosts can be sent in 3 formats: IP address with port, domain name with port or domain name without port. The port must fall in the range 1025-65535 or be 0 for SRV lookup.
+	DestinationHosts []string
+	Strategy         *SelectionStrategy
+	SipOptions       *SipOptions
+}
+
+type _StaticSipTrunkRequest StaticSipTrunkRequest
+
+// NewStaticSipTrunkRequest instantiates a new StaticSipTrunkRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewStaticSipTrunkRequest() *StaticSipTrunkRequest {
+	this := StaticSipTrunkRequest{}
+	this.Type = "STATIC"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	return &this
+}
+
+// NewStaticSipTrunkRequestWithDefaults instantiates a new StaticSipTrunkRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStaticSipTrunkRequestWithDefaults() *StaticSipTrunkRequest {
+	this := StaticSipTrunkRequest{}
+	this.Type = "STATIC"
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *StaticSipTrunkRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *StaticSipTrunkRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *StaticSipTrunkRequest) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *StaticSipTrunkRequest) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *StaticSipTrunkRequest) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value
+func (o *StaticSipTrunkRequest) GetChannelLimit() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetChannelLimitOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ChannelLimit, true
+}
+
+// SetChannelLimit sets field value
+func (o *StaticSipTrunkRequest) SetChannelLimit(v int32) {
+	o.ChannelLimit = v
+}
+
+// GetBillingPackage returns the BillingPackage field value
+func (o *StaticSipTrunkRequest) GetBillingPackage() BillingPackage {
+	if o == nil {
+		var ret BillingPackage
+		return ret
+	}
+
+	return o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.BillingPackage, true
+}
+
+// SetBillingPackage sets field value
+func (o *StaticSipTrunkRequest) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *StaticSipTrunkRequest) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *StaticSipTrunkRequest) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *StaticSipTrunkRequest) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *StaticSipTrunkRequest) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *StaticSipTrunkRequest) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetSourceHosts returns the SourceHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetSourceHosts() []string {
+	if o == nil || IsNil(o.SourceHosts) {
+		var ret []string
+		return ret
+	}
+	return o.SourceHosts
+}
+
+// GetSourceHostsOk returns a tuple with the SourceHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetSourceHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.SourceHosts) {
+		return nil, false
+	}
+	return o.SourceHosts, true
+}
+
+// HasSourceHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasSourceHosts() bool {
+	if o != nil && !IsNil(o.SourceHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSourceHosts gets a reference to the given []string and assigns it to the SourceHosts field.
+func (o *StaticSipTrunkRequest) SetSourceHosts(v []string) {
+	o.SourceHosts = v
+}
+
+// GetDestinationHosts returns the DestinationHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetDestinationHosts() []string {
+	if o == nil || IsNil(o.DestinationHosts) {
+		var ret []string
+		return ret
+	}
+	return o.DestinationHosts
+}
+
+// GetDestinationHostsOk returns a tuple with the DestinationHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetDestinationHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.DestinationHosts) {
+		return nil, false
+	}
+	return o.DestinationHosts, true
+}
+
+// HasDestinationHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasDestinationHosts() bool {
+	if o != nil && !IsNil(o.DestinationHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetDestinationHosts gets a reference to the given []string and assigns it to the DestinationHosts field.
+func (o *StaticSipTrunkRequest) SetDestinationHosts(v []string) {
+	o.DestinationHosts = v
+}
+
+// GetStrategy returns the Strategy field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetStrategy() SelectionStrategy {
+	if o == nil || IsNil(o.Strategy) {
+		var ret SelectionStrategy
+		return ret
+	}
+	return *o.Strategy
+}
+
+// GetStrategyOk returns a tuple with the Strategy field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetStrategyOk() (*SelectionStrategy, bool) {
+	if o == nil || IsNil(o.Strategy) {
+		return nil, false
+	}
+	return o.Strategy, true
+}
+
+// HasStrategy returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasStrategy() bool {
+	if o != nil && !IsNil(o.Strategy) {
+		return true
+	}
+
+	return false
+}
+
+// SetStrategy gets a reference to the given SelectionStrategy and assigns it to the Strategy field.
+func (o *StaticSipTrunkRequest) SetStrategy(v SelectionStrategy) {
+	o.Strategy = &v
+}
+
+// GetSipOptions returns the SipOptions field value if set, zero value otherwise.
+func (o *StaticSipTrunkRequest) GetSipOptions() SipOptions {
+	if o == nil || IsNil(o.SipOptions) {
+		var ret SipOptions
+		return ret
+	}
+	return *o.SipOptions
+}
+
+// GetSipOptionsOk returns a tuple with the SipOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkRequest) GetSipOptionsOk() (*SipOptions, bool) {
+	if o == nil || IsNil(o.SipOptions) {
+		return nil, false
+	}
+	return o.SipOptions, true
+}
+
+// HasSipOptions returns a boolean if a field has been set.
+func (o *StaticSipTrunkRequest) HasSipOptions() bool {
+	if o != nil && !IsNil(o.SipOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipOptions gets a reference to the given SipOptions and assigns it to the SipOptions field.
+func (o *StaticSipTrunkRequest) SetSipOptions(v SipOptions) {
+	o.SipOptions = &v
+}
+
+func (o StaticSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StaticSipTrunkRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	toSerialize["channelLimit"] = o.ChannelLimit
+	toSerialize["billingPackage"] = o.BillingPackage
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.SourceHosts) {
+		toSerialize["sourceHosts"] = o.SourceHosts
+	}
+	if !IsNil(o.DestinationHosts) {
+		toSerialize["destinationHosts"] = o.DestinationHosts
+	}
+	if !IsNil(o.Strategy) {
+		toSerialize["strategy"] = o.Strategy
+	}
+	if !IsNil(o.SipOptions) {
+		toSerialize["sipOptions"] = o.SipOptions
+	}
+	return toSerialize, nil
+}
+
+type NullableStaticSipTrunkRequest struct {
+	value *StaticSipTrunkRequest
+	isSet bool
+}
+
+func (v NullableStaticSipTrunkRequest) Get() *StaticSipTrunkRequest {
+	return v.value
+}
+
+func (v *NullableStaticSipTrunkRequest) Set(val *StaticSipTrunkRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStaticSipTrunkRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStaticSipTrunkRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStaticSipTrunkRequest(val *StaticSipTrunkRequest) *NullableStaticSipTrunkRequest {
+	return &NullableStaticSipTrunkRequest{value: val, isSet: true}
+}
+
+func (v NullableStaticSipTrunkRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStaticSipTrunkRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/static_sip_trunk_response.go b/pkg/infobip/models/voice/static_sip_trunk_response.go
new file mode 100644
index 0000000..e03f8a1
--- /dev/null
+++ b/pkg/infobip/models/voice/static_sip_trunk_response.go
@@ -0,0 +1,714 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StaticSipTrunkResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StaticSipTrunkResponse{}
+
+// StaticSipTrunkResponse struct for StaticSipTrunkResponse
+type StaticSipTrunkResponse struct {
+	Id                        *string
+	Type                      SipTrunkType
+	Name                      *string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	Codecs                    []AudioCodec
+	Dtmf                      *DtmfType
+	Fax                       *FaxType
+	NumberFormat              *NumberPresentationFormat
+	InternationalCallsAllowed *bool
+	ChannelLimit              *int32
+	Anonymization             *AnonymizationType
+	BillingPackage            *BillingPackage
+	SbcHosts                  *SbcHosts
+	SipOptions                *SipOptions
+	// List of source hosts.
+	SourceHosts []string
+	// List of destination hosts.
+	DestinationHosts []string
+	Strategy         *SelectionStrategy
+}
+
+// NewStaticSipTrunkResponse instantiates a new StaticSipTrunkResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewStaticSipTrunkResponse() *StaticSipTrunkResponse {
+	this := StaticSipTrunkResponse{}
+	this.Type = "STATIC"
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	return &this
+}
+
+// NewStaticSipTrunkResponseWithDefaults instantiates a new StaticSipTrunkResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStaticSipTrunkResponseWithDefaults() *StaticSipTrunkResponse {
+	this := StaticSipTrunkResponse{}
+	this.Type = "STATIC"
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	return &this
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *StaticSipTrunkResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *StaticSipTrunkResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *StaticSipTrunkResponse) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *StaticSipTrunkResponse) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *StaticSipTrunkResponse) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *StaticSipTrunkResponse) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *StaticSipTrunkResponse) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *StaticSipTrunkResponse) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *StaticSipTrunkResponse) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetChannelLimit() int32 {
+	if o == nil || IsNil(o.ChannelLimit) {
+		var ret int32
+		return ret
+	}
+	return *o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetChannelLimitOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChannelLimit) {
+		return nil, false
+	}
+	return o.ChannelLimit, true
+}
+
+// HasChannelLimit returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasChannelLimit() bool {
+	if o != nil && !IsNil(o.ChannelLimit) {
+		return true
+	}
+
+	return false
+}
+
+// SetChannelLimit gets a reference to the given int32 and assigns it to the ChannelLimit field.
+func (o *StaticSipTrunkResponse) SetChannelLimit(v int32) {
+	o.ChannelLimit = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *StaticSipTrunkResponse) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetBillingPackage returns the BillingPackage field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetBillingPackage() BillingPackage {
+	if o == nil || IsNil(o.BillingPackage) {
+		var ret BillingPackage
+		return ret
+	}
+	return *o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil || IsNil(o.BillingPackage) {
+		return nil, false
+	}
+	return o.BillingPackage, true
+}
+
+// HasBillingPackage returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasBillingPackage() bool {
+	if o != nil && !IsNil(o.BillingPackage) {
+		return true
+	}
+
+	return false
+}
+
+// SetBillingPackage gets a reference to the given BillingPackage and assigns it to the BillingPackage field.
+func (o *StaticSipTrunkResponse) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = &v
+}
+
+// GetSbcHosts returns the SbcHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetSbcHosts() SbcHosts {
+	if o == nil || IsNil(o.SbcHosts) {
+		var ret SbcHosts
+		return ret
+	}
+	return *o.SbcHosts
+}
+
+// GetSbcHostsOk returns a tuple with the SbcHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetSbcHostsOk() (*SbcHosts, bool) {
+	if o == nil || IsNil(o.SbcHosts) {
+		return nil, false
+	}
+	return o.SbcHosts, true
+}
+
+// HasSbcHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasSbcHosts() bool {
+	if o != nil && !IsNil(o.SbcHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSbcHosts gets a reference to the given SbcHosts and assigns it to the SbcHosts field.
+func (o *StaticSipTrunkResponse) SetSbcHosts(v SbcHosts) {
+	o.SbcHosts = &v
+}
+
+// GetSipOptions returns the SipOptions field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetSipOptions() SipOptions {
+	if o == nil || IsNil(o.SipOptions) {
+		var ret SipOptions
+		return ret
+	}
+	return *o.SipOptions
+}
+
+// GetSipOptionsOk returns a tuple with the SipOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetSipOptionsOk() (*SipOptions, bool) {
+	if o == nil || IsNil(o.SipOptions) {
+		return nil, false
+	}
+	return o.SipOptions, true
+}
+
+// HasSipOptions returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasSipOptions() bool {
+	if o != nil && !IsNil(o.SipOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipOptions gets a reference to the given SipOptions and assigns it to the SipOptions field.
+func (o *StaticSipTrunkResponse) SetSipOptions(v SipOptions) {
+	o.SipOptions = &v
+}
+
+// GetSourceHosts returns the SourceHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetSourceHosts() []string {
+	if o == nil || IsNil(o.SourceHosts) {
+		var ret []string
+		return ret
+	}
+	return o.SourceHosts
+}
+
+// GetSourceHostsOk returns a tuple with the SourceHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetSourceHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.SourceHosts) {
+		return nil, false
+	}
+	return o.SourceHosts, true
+}
+
+// HasSourceHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasSourceHosts() bool {
+	if o != nil && !IsNil(o.SourceHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSourceHosts gets a reference to the given []string and assigns it to the SourceHosts field.
+func (o *StaticSipTrunkResponse) SetSourceHosts(v []string) {
+	o.SourceHosts = v
+}
+
+// GetDestinationHosts returns the DestinationHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetDestinationHosts() []string {
+	if o == nil || IsNil(o.DestinationHosts) {
+		var ret []string
+		return ret
+	}
+	return o.DestinationHosts
+}
+
+// GetDestinationHostsOk returns a tuple with the DestinationHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetDestinationHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.DestinationHosts) {
+		return nil, false
+	}
+	return o.DestinationHosts, true
+}
+
+// HasDestinationHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasDestinationHosts() bool {
+	if o != nil && !IsNil(o.DestinationHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetDestinationHosts gets a reference to the given []string and assigns it to the DestinationHosts field.
+func (o *StaticSipTrunkResponse) SetDestinationHosts(v []string) {
+	o.DestinationHosts = v
+}
+
+// GetStrategy returns the Strategy field value if set, zero value otherwise.
+func (o *StaticSipTrunkResponse) GetStrategy() SelectionStrategy {
+	if o == nil || IsNil(o.Strategy) {
+		var ret SelectionStrategy
+		return ret
+	}
+	return *o.Strategy
+}
+
+// GetStrategyOk returns a tuple with the Strategy field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkResponse) GetStrategyOk() (*SelectionStrategy, bool) {
+	if o == nil || IsNil(o.Strategy) {
+		return nil, false
+	}
+	return o.Strategy, true
+}
+
+// HasStrategy returns a boolean if a field has been set.
+func (o *StaticSipTrunkResponse) HasStrategy() bool {
+	if o != nil && !IsNil(o.Strategy) {
+		return true
+	}
+
+	return false
+}
+
+// SetStrategy gets a reference to the given SelectionStrategy and assigns it to the Strategy field.
+func (o *StaticSipTrunkResponse) SetStrategy(v SelectionStrategy) {
+	o.Strategy = &v
+}
+
+func (o StaticSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StaticSipTrunkResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	if !IsNil(o.ChannelLimit) {
+		toSerialize["channelLimit"] = o.ChannelLimit
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.BillingPackage) {
+		toSerialize["billingPackage"] = o.BillingPackage
+	}
+	if !IsNil(o.SbcHosts) {
+		toSerialize["sbcHosts"] = o.SbcHosts
+	}
+	if !IsNil(o.SipOptions) {
+		toSerialize["sipOptions"] = o.SipOptions
+	}
+	if !IsNil(o.SourceHosts) {
+		toSerialize["sourceHosts"] = o.SourceHosts
+	}
+	if !IsNil(o.DestinationHosts) {
+		toSerialize["destinationHosts"] = o.DestinationHosts
+	}
+	if !IsNil(o.Strategy) {
+		toSerialize["strategy"] = o.Strategy
+	}
+	return toSerialize, nil
+}
+
+type NullableStaticSipTrunkResponse struct {
+	value *StaticSipTrunkResponse
+	isSet bool
+}
+
+func (v NullableStaticSipTrunkResponse) Get() *StaticSipTrunkResponse {
+	return v.value
+}
+
+func (v *NullableStaticSipTrunkResponse) Set(val *StaticSipTrunkResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStaticSipTrunkResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStaticSipTrunkResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStaticSipTrunkResponse(val *StaticSipTrunkResponse) *NullableStaticSipTrunkResponse {
+	return &NullableStaticSipTrunkResponse{value: val, isSet: true}
+}
+
+func (v NullableStaticSipTrunkResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStaticSipTrunkResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/static_sip_trunk_update_request.go b/pkg/infobip/models/voice/static_sip_trunk_update_request.go
new file mode 100644
index 0000000..2d1eedb
--- /dev/null
+++ b/pkg/infobip/models/voice/static_sip_trunk_update_request.go
@@ -0,0 +1,627 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StaticSipTrunkUpdateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StaticSipTrunkUpdateRequest{}
+
+// StaticSipTrunkUpdateRequest struct for StaticSipTrunkUpdateRequest
+type StaticSipTrunkUpdateRequest struct {
+	Type                      SipTrunkType
+	Name                      string
+	Location                  *SipTrunkLocation
+	Tls                       *bool
+	InternationalCallsAllowed *bool
+	ChannelLimit              int32
+	BillingPackage            BillingPackage
+	// List of SIP trunk source hosts. If empty, destination host list must not be empty. Source hosts can be sent in 2 formats: IP address without port or domain without port.
+	SourceHosts []string
+	// List of SIP trunk destination hosts. If empty, source host list must not be empty. Destination hosts can be sent in 3 formats: IP address with port, domain name with port or domain name without port. The port must fall in the range 1025-65535 or be 0 for SRV lookup.
+	DestinationHosts []string
+	Strategy         *SelectionStrategy
+	// List of audio codecs supported by a SIP trunk.
+	Codecs        []AudioCodec
+	Dtmf          *DtmfType
+	Fax           *FaxType
+	Anonymization *AnonymizationType
+	NumberFormat  *NumberPresentationFormat
+	SipOptions    *SipOptions
+}
+
+type _StaticSipTrunkUpdateRequest StaticSipTrunkUpdateRequest
+
+// NewStaticSipTrunkUpdateRequest instantiates a new StaticSipTrunkUpdateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewStaticSipTrunkUpdateRequest() *StaticSipTrunkUpdateRequest {
+	this := StaticSipTrunkUpdateRequest{}
+	this.Type = "STATIC"
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	return &this
+}
+
+// NewStaticSipTrunkUpdateRequestWithDefaults instantiates a new StaticSipTrunkUpdateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStaticSipTrunkUpdateRequestWithDefaults() *StaticSipTrunkUpdateRequest {
+	this := StaticSipTrunkUpdateRequest{}
+	this.Type = "STATIC"
+	var strategy SelectionStrategy = SELECTIONSTRATEGY_FAILOVER
+	this.Strategy = &strategy
+	var dtmf DtmfType = DTMFTYPE_RFC2833
+	this.Dtmf = &dtmf
+	var fax FaxType = FAXTYPE_NONE
+	this.Fax = &fax
+	var anonymization AnonymizationType = ANONYMIZATIONTYPE_NONE
+	this.Anonymization = &anonymization
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *StaticSipTrunkUpdateRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *StaticSipTrunkUpdateRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetLocation returns the Location field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetLocation() SipTrunkLocation {
+	if o == nil || IsNil(o.Location) {
+		var ret SipTrunkLocation
+		return ret
+	}
+	return *o.Location
+}
+
+// GetLocationOk returns a tuple with the Location field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetLocationOk() (*SipTrunkLocation, bool) {
+	if o == nil || IsNil(o.Location) {
+		return nil, false
+	}
+	return o.Location, true
+}
+
+// HasLocation returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasLocation() bool {
+	if o != nil && !IsNil(o.Location) {
+		return true
+	}
+
+	return false
+}
+
+// SetLocation gets a reference to the given SipTrunkLocation and assigns it to the Location field.
+func (o *StaticSipTrunkUpdateRequest) SetLocation(v SipTrunkLocation) {
+	o.Location = &v
+}
+
+// GetTls returns the Tls field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetTls() bool {
+	if o == nil || IsNil(o.Tls) {
+		var ret bool
+		return ret
+	}
+	return *o.Tls
+}
+
+// GetTlsOk returns a tuple with the Tls field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetTlsOk() (*bool, bool) {
+	if o == nil || IsNil(o.Tls) {
+		return nil, false
+	}
+	return o.Tls, true
+}
+
+// HasTls returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasTls() bool {
+	if o != nil && !IsNil(o.Tls) {
+		return true
+	}
+
+	return false
+}
+
+// SetTls gets a reference to the given bool and assigns it to the Tls field.
+func (o *StaticSipTrunkUpdateRequest) SetTls(v bool) {
+	o.Tls = &v
+}
+
+// GetInternationalCallsAllowed returns the InternationalCallsAllowed field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetInternationalCallsAllowed() bool {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		var ret bool
+		return ret
+	}
+	return *o.InternationalCallsAllowed
+}
+
+// GetInternationalCallsAllowedOk returns a tuple with the InternationalCallsAllowed field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetInternationalCallsAllowedOk() (*bool, bool) {
+	if o == nil || IsNil(o.InternationalCallsAllowed) {
+		return nil, false
+	}
+	return o.InternationalCallsAllowed, true
+}
+
+// HasInternationalCallsAllowed returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasInternationalCallsAllowed() bool {
+	if o != nil && !IsNil(o.InternationalCallsAllowed) {
+		return true
+	}
+
+	return false
+}
+
+// SetInternationalCallsAllowed gets a reference to the given bool and assigns it to the InternationalCallsAllowed field.
+func (o *StaticSipTrunkUpdateRequest) SetInternationalCallsAllowed(v bool) {
+	o.InternationalCallsAllowed = &v
+}
+
+// GetChannelLimit returns the ChannelLimit field value
+func (o *StaticSipTrunkUpdateRequest) GetChannelLimit() int32 {
+	if o == nil {
+		var ret int32
+		return ret
+	}
+
+	return o.ChannelLimit
+}
+
+// GetChannelLimitOk returns a tuple with the ChannelLimit field value
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetChannelLimitOk() (*int32, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.ChannelLimit, true
+}
+
+// SetChannelLimit sets field value
+func (o *StaticSipTrunkUpdateRequest) SetChannelLimit(v int32) {
+	o.ChannelLimit = v
+}
+
+// GetBillingPackage returns the BillingPackage field value
+func (o *StaticSipTrunkUpdateRequest) GetBillingPackage() BillingPackage {
+	if o == nil {
+		var ret BillingPackage
+		return ret
+	}
+
+	return o.BillingPackage
+}
+
+// GetBillingPackageOk returns a tuple with the BillingPackage field value
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetBillingPackageOk() (*BillingPackage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.BillingPackage, true
+}
+
+// SetBillingPackage sets field value
+func (o *StaticSipTrunkUpdateRequest) SetBillingPackage(v BillingPackage) {
+	o.BillingPackage = v
+}
+
+// GetSourceHosts returns the SourceHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetSourceHosts() []string {
+	if o == nil || IsNil(o.SourceHosts) {
+		var ret []string
+		return ret
+	}
+	return o.SourceHosts
+}
+
+// GetSourceHostsOk returns a tuple with the SourceHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetSourceHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.SourceHosts) {
+		return nil, false
+	}
+	return o.SourceHosts, true
+}
+
+// HasSourceHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasSourceHosts() bool {
+	if o != nil && !IsNil(o.SourceHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetSourceHosts gets a reference to the given []string and assigns it to the SourceHosts field.
+func (o *StaticSipTrunkUpdateRequest) SetSourceHosts(v []string) {
+	o.SourceHosts = v
+}
+
+// GetDestinationHosts returns the DestinationHosts field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetDestinationHosts() []string {
+	if o == nil || IsNil(o.DestinationHosts) {
+		var ret []string
+		return ret
+	}
+	return o.DestinationHosts
+}
+
+// GetDestinationHostsOk returns a tuple with the DestinationHosts field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetDestinationHostsOk() ([]string, bool) {
+	if o == nil || IsNil(o.DestinationHosts) {
+		return nil, false
+	}
+	return o.DestinationHosts, true
+}
+
+// HasDestinationHosts returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasDestinationHosts() bool {
+	if o != nil && !IsNil(o.DestinationHosts) {
+		return true
+	}
+
+	return false
+}
+
+// SetDestinationHosts gets a reference to the given []string and assigns it to the DestinationHosts field.
+func (o *StaticSipTrunkUpdateRequest) SetDestinationHosts(v []string) {
+	o.DestinationHosts = v
+}
+
+// GetStrategy returns the Strategy field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetStrategy() SelectionStrategy {
+	if o == nil || IsNil(o.Strategy) {
+		var ret SelectionStrategy
+		return ret
+	}
+	return *o.Strategy
+}
+
+// GetStrategyOk returns a tuple with the Strategy field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetStrategyOk() (*SelectionStrategy, bool) {
+	if o == nil || IsNil(o.Strategy) {
+		return nil, false
+	}
+	return o.Strategy, true
+}
+
+// HasStrategy returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasStrategy() bool {
+	if o != nil && !IsNil(o.Strategy) {
+		return true
+	}
+
+	return false
+}
+
+// SetStrategy gets a reference to the given SelectionStrategy and assigns it to the Strategy field.
+func (o *StaticSipTrunkUpdateRequest) SetStrategy(v SelectionStrategy) {
+	o.Strategy = &v
+}
+
+// GetCodecs returns the Codecs field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetCodecs() []AudioCodec {
+	if o == nil || IsNil(o.Codecs) {
+		var ret []AudioCodec
+		return ret
+	}
+	return o.Codecs
+}
+
+// GetCodecsOk returns a tuple with the Codecs field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetCodecsOk() ([]AudioCodec, bool) {
+	if o == nil || IsNil(o.Codecs) {
+		return nil, false
+	}
+	return o.Codecs, true
+}
+
+// HasCodecs returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasCodecs() bool {
+	if o != nil && !IsNil(o.Codecs) {
+		return true
+	}
+
+	return false
+}
+
+// SetCodecs gets a reference to the given []AudioCodec and assigns it to the Codecs field.
+func (o *StaticSipTrunkUpdateRequest) SetCodecs(v []AudioCodec) {
+	o.Codecs = v
+}
+
+// GetDtmf returns the Dtmf field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetDtmf() DtmfType {
+	if o == nil || IsNil(o.Dtmf) {
+		var ret DtmfType
+		return ret
+	}
+	return *o.Dtmf
+}
+
+// GetDtmfOk returns a tuple with the Dtmf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetDtmfOk() (*DtmfType, bool) {
+	if o == nil || IsNil(o.Dtmf) {
+		return nil, false
+	}
+	return o.Dtmf, true
+}
+
+// HasDtmf returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasDtmf() bool {
+	if o != nil && !IsNil(o.Dtmf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmf gets a reference to the given DtmfType and assigns it to the Dtmf field.
+func (o *StaticSipTrunkUpdateRequest) SetDtmf(v DtmfType) {
+	o.Dtmf = &v
+}
+
+// GetFax returns the Fax field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetFax() FaxType {
+	if o == nil || IsNil(o.Fax) {
+		var ret FaxType
+		return ret
+	}
+	return *o.Fax
+}
+
+// GetFaxOk returns a tuple with the Fax field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetFaxOk() (*FaxType, bool) {
+	if o == nil || IsNil(o.Fax) {
+		return nil, false
+	}
+	return o.Fax, true
+}
+
+// HasFax returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasFax() bool {
+	if o != nil && !IsNil(o.Fax) {
+		return true
+	}
+
+	return false
+}
+
+// SetFax gets a reference to the given FaxType and assigns it to the Fax field.
+func (o *StaticSipTrunkUpdateRequest) SetFax(v FaxType) {
+	o.Fax = &v
+}
+
+// GetAnonymization returns the Anonymization field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetAnonymization() AnonymizationType {
+	if o == nil || IsNil(o.Anonymization) {
+		var ret AnonymizationType
+		return ret
+	}
+	return *o.Anonymization
+}
+
+// GetAnonymizationOk returns a tuple with the Anonymization field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetAnonymizationOk() (*AnonymizationType, bool) {
+	if o == nil || IsNil(o.Anonymization) {
+		return nil, false
+	}
+	return o.Anonymization, true
+}
+
+// HasAnonymization returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasAnonymization() bool {
+	if o != nil && !IsNil(o.Anonymization) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnonymization gets a reference to the given AnonymizationType and assigns it to the Anonymization field.
+func (o *StaticSipTrunkUpdateRequest) SetAnonymization(v AnonymizationType) {
+	o.Anonymization = &v
+}
+
+// GetNumberFormat returns the NumberFormat field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetNumberFormat() NumberPresentationFormat {
+	if o == nil || IsNil(o.NumberFormat) {
+		var ret NumberPresentationFormat
+		return ret
+	}
+	return *o.NumberFormat
+}
+
+// GetNumberFormatOk returns a tuple with the NumberFormat field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetNumberFormatOk() (*NumberPresentationFormat, bool) {
+	if o == nil || IsNil(o.NumberFormat) {
+		return nil, false
+	}
+	return o.NumberFormat, true
+}
+
+// HasNumberFormat returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasNumberFormat() bool {
+	if o != nil && !IsNil(o.NumberFormat) {
+		return true
+	}
+
+	return false
+}
+
+// SetNumberFormat gets a reference to the given NumberPresentationFormat and assigns it to the NumberFormat field.
+func (o *StaticSipTrunkUpdateRequest) SetNumberFormat(v NumberPresentationFormat) {
+	o.NumberFormat = &v
+}
+
+// GetSipOptions returns the SipOptions field value if set, zero value otherwise.
+func (o *StaticSipTrunkUpdateRequest) GetSipOptions() SipOptions {
+	if o == nil || IsNil(o.SipOptions) {
+		var ret SipOptions
+		return ret
+	}
+	return *o.SipOptions
+}
+
+// GetSipOptionsOk returns a tuple with the SipOptions field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StaticSipTrunkUpdateRequest) GetSipOptionsOk() (*SipOptions, bool) {
+	if o == nil || IsNil(o.SipOptions) {
+		return nil, false
+	}
+	return o.SipOptions, true
+}
+
+// HasSipOptions returns a boolean if a field has been set.
+func (o *StaticSipTrunkUpdateRequest) HasSipOptions() bool {
+	if o != nil && !IsNil(o.SipOptions) {
+		return true
+	}
+
+	return false
+}
+
+// SetSipOptions gets a reference to the given SipOptions and assigns it to the SipOptions field.
+func (o *StaticSipTrunkUpdateRequest) SetSipOptions(v SipOptions) {
+	o.SipOptions = &v
+}
+
+func (o StaticSipTrunkUpdateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StaticSipTrunkUpdateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Location) {
+		toSerialize["location"] = o.Location
+	}
+	if !IsNil(o.Tls) {
+		toSerialize["tls"] = o.Tls
+	}
+	if !IsNil(o.InternationalCallsAllowed) {
+		toSerialize["internationalCallsAllowed"] = o.InternationalCallsAllowed
+	}
+	toSerialize["channelLimit"] = o.ChannelLimit
+	toSerialize["billingPackage"] = o.BillingPackage
+	if !IsNil(o.SourceHosts) {
+		toSerialize["sourceHosts"] = o.SourceHosts
+	}
+	if !IsNil(o.DestinationHosts) {
+		toSerialize["destinationHosts"] = o.DestinationHosts
+	}
+	if !IsNil(o.Strategy) {
+		toSerialize["strategy"] = o.Strategy
+	}
+	if !IsNil(o.Codecs) {
+		toSerialize["codecs"] = o.Codecs
+	}
+	if !IsNil(o.Dtmf) {
+		toSerialize["dtmf"] = o.Dtmf
+	}
+	if !IsNil(o.Fax) {
+		toSerialize["fax"] = o.Fax
+	}
+	if !IsNil(o.Anonymization) {
+		toSerialize["anonymization"] = o.Anonymization
+	}
+	if !IsNil(o.NumberFormat) {
+		toSerialize["numberFormat"] = o.NumberFormat
+	}
+	if !IsNil(o.SipOptions) {
+		toSerialize["sipOptions"] = o.SipOptions
+	}
+	return toSerialize, nil
+}
+
+type NullableStaticSipTrunkUpdateRequest struct {
+	value *StaticSipTrunkUpdateRequest
+	isSet bool
+}
+
+func (v NullableStaticSipTrunkUpdateRequest) Get() *StaticSipTrunkUpdateRequest {
+	return v.value
+}
+
+func (v *NullableStaticSipTrunkUpdateRequest) Set(val *StaticSipTrunkUpdateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStaticSipTrunkUpdateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStaticSipTrunkUpdateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStaticSipTrunkUpdateRequest(val *StaticSipTrunkUpdateRequest) *NullableStaticSipTrunkUpdateRequest {
+	return &NullableStaticSipTrunkUpdateRequest{value: val, isSet: true}
+}
+
+func (v NullableStaticSipTrunkUpdateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStaticSipTrunkUpdateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/status.go b/pkg/infobip/models/voice/status.go
new file mode 100644
index 0000000..68c563d
--- /dev/null
+++ b/pkg/infobip/models/voice/status.go
@@ -0,0 +1,118 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// Status Current bulk status.
+type Status string
+
+// List of Status
+const (
+	STATUS_PENDING    Status = "PENDING"
+	STATUS_PAUSED     Status = "PAUSED"
+	STATUS_PROCESSING Status = "PROCESSING"
+	STATUS_CANCELED   Status = "CANCELED"
+	STATUS_FINISHED   Status = "FINISHED"
+	STATUS_FAILED     Status = "FAILED"
+)
+
+// All allowed values of Status enum
+var AllowedStatusEnumValues = []Status{
+	"PENDING",
+	"PAUSED",
+	"PROCESSING",
+	"CANCELED",
+	"FINISHED",
+	"FAILED",
+}
+
+func (v *Status) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := Status(value)
+	for _, existing := range AllowedStatusEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid Status", value)
+}
+
+// NewStatusFromValue returns a pointer to a valid Status
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewStatusFromValue(v string) (*Status, error) {
+	ev := Status(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for Status: valid values are %v", v, AllowedStatusEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v Status) IsValid() bool {
+	for _, existing := range AllowedStatusEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to Status value
+func (v Status) Ptr() *Status {
+	return &v
+}
+
+type NullableStatus struct {
+	value *Status
+	isSet bool
+}
+
+func (v NullableStatus) Get() *Status {
+	return v.value
+}
+
+func (v *NullableStatus) Set(val *Status) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStatus) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStatus) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStatus(val *Status) *NullableStatus {
+	return &NullableStatus{value: val, isSet: true}
+}
+
+func (v NullableStatus) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStatus) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/stop_play_request.go b/pkg/infobip/models/voice/stop_play_request.go
new file mode 100644
index 0000000..d529d8c
--- /dev/null
+++ b/pkg/infobip/models/voice/stop_play_request.go
@@ -0,0 +1,129 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the StopPlayRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &StopPlayRequest{}
+
+// StopPlayRequest struct for StopPlayRequest
+type StopPlayRequest struct {
+	// Optional parameter to update a call's custom data.
+	CustomData *map[string]string
+}
+
+// NewStopPlayRequest instantiates a new StopPlayRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewStopPlayRequest() *StopPlayRequest {
+	this := StopPlayRequest{}
+	return &this
+}
+
+// NewStopPlayRequestWithDefaults instantiates a new StopPlayRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewStopPlayRequestWithDefaults() *StopPlayRequest {
+	this := StopPlayRequest{}
+
+	return &this
+}
+
+// GetCustomData returns the CustomData field value if set, zero value otherwise.
+func (o *StopPlayRequest) GetCustomData() map[string]string {
+	if o == nil || IsNil(o.CustomData) {
+		var ret map[string]string
+		return ret
+	}
+	return *o.CustomData
+}
+
+// GetCustomDataOk returns a tuple with the CustomData field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *StopPlayRequest) GetCustomDataOk() (*map[string]string, bool) {
+	if o == nil || IsNil(o.CustomData) {
+		return nil, false
+	}
+	return o.CustomData, true
+}
+
+// HasCustomData returns a boolean if a field has been set.
+func (o *StopPlayRequest) HasCustomData() bool {
+	if o != nil && !IsNil(o.CustomData) {
+		return true
+	}
+
+	return false
+}
+
+// SetCustomData gets a reference to the given map[string]string and assigns it to the CustomData field.
+func (o *StopPlayRequest) SetCustomData(v map[string]string) {
+	o.CustomData = &v
+}
+
+func (o StopPlayRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o StopPlayRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CustomData) {
+		toSerialize["customData"] = o.CustomData
+	}
+	return toSerialize, nil
+}
+
+type NullableStopPlayRequest struct {
+	value *StopPlayRequest
+	isSet bool
+}
+
+func (v NullableStopPlayRequest) Get() *StopPlayRequest {
+	return v.value
+}
+
+func (v *NullableStopPlayRequest) Set(val *StopPlayRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableStopPlayRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableStopPlayRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableStopPlayRequest(val *StopPlayRequest) *NullableStopPlayRequest {
+	return &NullableStopPlayRequest{value: val, isSet: true}
+}
+
+func (v NullableStopPlayRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableStopPlayRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/switch_case.go b/pkg/infobip/models/voice/switch_case.go
new file mode 100644
index 0000000..86e7f8d
--- /dev/null
+++ b/pkg/infobip/models/voice/switch_case.go
@@ -0,0 +1,186 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SwitchCase type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SwitchCase{}
+
+// SwitchCase Switch-Case action takes a saved variable (obtained via either a Collect, Call API action or scenario parameters) and performs flow control based on it. It works similarly to the switch case block, using case-sensitive comparison.
+type SwitchCase struct {
+	// Name of the variable whose value to inspect.
+	Switch string
+	Case   CaseObject
+	// User-defined ID of an action that can be used with go-to action.
+	ActionId *int32
+}
+
+type _SwitchCase SwitchCase
+
+// NewSwitchCase instantiates a new SwitchCase object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSwitchCase(switch_ string, case_ CaseObject) *SwitchCase {
+	this := SwitchCase{}
+	this.Switch = switch_
+	this.Case = case_
+	return &this
+}
+
+// NewSwitchCaseWithDefaults instantiates a new SwitchCase object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSwitchCaseWithDefaults() *SwitchCase {
+	this := SwitchCase{}
+
+	return &this
+}
+
+// GetSwitch returns the Switch field value
+func (o *SwitchCase) GetSwitch() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Switch
+}
+
+// GetSwitchOk returns a tuple with the Switch field value
+// and a boolean to check if the value has been set.
+func (o *SwitchCase) GetSwitchOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Switch, true
+}
+
+// SetSwitch sets field value
+func (o *SwitchCase) SetSwitch(v string) {
+	o.Switch = v
+}
+
+// GetCase returns the Case field value
+func (o *SwitchCase) GetCase() CaseObject {
+	if o == nil {
+		var ret CaseObject
+		return ret
+	}
+
+	return o.Case
+}
+
+// GetCaseOk returns a tuple with the Case field value
+// and a boolean to check if the value has been set.
+func (o *SwitchCase) GetCaseOk() (*CaseObject, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Case, true
+}
+
+// SetCase sets field value
+func (o *SwitchCase) SetCase(v CaseObject) {
+	o.Case = v
+}
+
+// GetActionId returns the ActionId field value if set, zero value otherwise.
+func (o *SwitchCase) GetActionId() int32 {
+	if o == nil || IsNil(o.ActionId) {
+		var ret int32
+		return ret
+	}
+	return *o.ActionId
+}
+
+// GetActionIdOk returns a tuple with the ActionId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SwitchCase) GetActionIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.ActionId) {
+		return nil, false
+	}
+	return o.ActionId, true
+}
+
+// HasActionId returns a boolean if a field has been set.
+func (o *SwitchCase) HasActionId() bool {
+	if o != nil && !IsNil(o.ActionId) {
+		return true
+	}
+
+	return false
+}
+
+// SetActionId gets a reference to the given int32 and assigns it to the ActionId field.
+func (o *SwitchCase) SetActionId(v int32) {
+	o.ActionId = &v
+}
+
+func (o SwitchCase) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SwitchCase) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["switch"] = o.Switch
+	toSerialize["case"] = o.Case
+	if !IsNil(o.ActionId) {
+		toSerialize["actionId"] = o.ActionId
+	}
+	return toSerialize, nil
+}
+
+type NullableSwitchCase struct {
+	value *SwitchCase
+	isSet bool
+}
+
+func (v NullableSwitchCase) Get() *SwitchCase {
+	return v.value
+}
+
+func (v *NullableSwitchCase) Set(val *SwitchCase) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSwitchCase) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSwitchCase) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSwitchCase(val *SwitchCase) *NullableSwitchCase {
+	return &NullableSwitchCase{value: val, isSet: true}
+}
+
+func (v NullableSwitchCase) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSwitchCase) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/synthesis_voice_response.go b/pkg/infobip/models/voice/synthesis_voice_response.go
new file mode 100644
index 0000000..5deb424
--- /dev/null
+++ b/pkg/infobip/models/voice/synthesis_voice_response.go
@@ -0,0 +1,314 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the SynthesisVoiceResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &SynthesisVoiceResponse{}
+
+// SynthesisVoiceResponse Array of voices belonging to the specified language.
+type SynthesisVoiceResponse struct {
+	// Name of the voice. Example: `Joanna`
+	Name *string
+	// Gender of the voice. Can be `male` or `female`.
+	Gender *string
+	// Name of the supplier for text to speech synthesis.
+	Supplier *string
+	// Indicates if SSML is supported.
+	SsmlSupported *bool
+	// Indicates whether voice is default voice for a given language. If voice is not chosen for the language, then default voice will be used.
+	IsDefault *bool
+	// Indicates whether voice is neural. Using neural voice will generate additional cost.
+	IsNeural *bool
+}
+
+// NewSynthesisVoiceResponse instantiates a new SynthesisVoiceResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewSynthesisVoiceResponse() *SynthesisVoiceResponse {
+	this := SynthesisVoiceResponse{}
+	return &this
+}
+
+// NewSynthesisVoiceResponseWithDefaults instantiates a new SynthesisVoiceResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewSynthesisVoiceResponseWithDefaults() *SynthesisVoiceResponse {
+	this := SynthesisVoiceResponse{}
+
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *SynthesisVoiceResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SynthesisVoiceResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *SynthesisVoiceResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *SynthesisVoiceResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetGender returns the Gender field value if set, zero value otherwise.
+func (o *SynthesisVoiceResponse) GetGender() string {
+	if o == nil || IsNil(o.Gender) {
+		var ret string
+		return ret
+	}
+	return *o.Gender
+}
+
+// GetGenderOk returns a tuple with the Gender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SynthesisVoiceResponse) GetGenderOk() (*string, bool) {
+	if o == nil || IsNil(o.Gender) {
+		return nil, false
+	}
+	return o.Gender, true
+}
+
+// HasGender returns a boolean if a field has been set.
+func (o *SynthesisVoiceResponse) HasGender() bool {
+	if o != nil && !IsNil(o.Gender) {
+		return true
+	}
+
+	return false
+}
+
+// SetGender gets a reference to the given string and assigns it to the Gender field.
+func (o *SynthesisVoiceResponse) SetGender(v string) {
+	o.Gender = &v
+}
+
+// GetSupplier returns the Supplier field value if set, zero value otherwise.
+func (o *SynthesisVoiceResponse) GetSupplier() string {
+	if o == nil || IsNil(o.Supplier) {
+		var ret string
+		return ret
+	}
+	return *o.Supplier
+}
+
+// GetSupplierOk returns a tuple with the Supplier field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SynthesisVoiceResponse) GetSupplierOk() (*string, bool) {
+	if o == nil || IsNil(o.Supplier) {
+		return nil, false
+	}
+	return o.Supplier, true
+}
+
+// HasSupplier returns a boolean if a field has been set.
+func (o *SynthesisVoiceResponse) HasSupplier() bool {
+	if o != nil && !IsNil(o.Supplier) {
+		return true
+	}
+
+	return false
+}
+
+// SetSupplier gets a reference to the given string and assigns it to the Supplier field.
+func (o *SynthesisVoiceResponse) SetSupplier(v string) {
+	o.Supplier = &v
+}
+
+// GetSsmlSupported returns the SsmlSupported field value if set, zero value otherwise.
+func (o *SynthesisVoiceResponse) GetSsmlSupported() bool {
+	if o == nil || IsNil(o.SsmlSupported) {
+		var ret bool
+		return ret
+	}
+	return *o.SsmlSupported
+}
+
+// GetSsmlSupportedOk returns a tuple with the SsmlSupported field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SynthesisVoiceResponse) GetSsmlSupportedOk() (*bool, bool) {
+	if o == nil || IsNil(o.SsmlSupported) {
+		return nil, false
+	}
+	return o.SsmlSupported, true
+}
+
+// HasSsmlSupported returns a boolean if a field has been set.
+func (o *SynthesisVoiceResponse) HasSsmlSupported() bool {
+	if o != nil && !IsNil(o.SsmlSupported) {
+		return true
+	}
+
+	return false
+}
+
+// SetSsmlSupported gets a reference to the given bool and assigns it to the SsmlSupported field.
+func (o *SynthesisVoiceResponse) SetSsmlSupported(v bool) {
+	o.SsmlSupported = &v
+}
+
+// GetIsDefault returns the IsDefault field value if set, zero value otherwise.
+func (o *SynthesisVoiceResponse) GetIsDefault() bool {
+	if o == nil || IsNil(o.IsDefault) {
+		var ret bool
+		return ret
+	}
+	return *o.IsDefault
+}
+
+// GetIsDefaultOk returns a tuple with the IsDefault field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SynthesisVoiceResponse) GetIsDefaultOk() (*bool, bool) {
+	if o == nil || IsNil(o.IsDefault) {
+		return nil, false
+	}
+	return o.IsDefault, true
+}
+
+// HasIsDefault returns a boolean if a field has been set.
+func (o *SynthesisVoiceResponse) HasIsDefault() bool {
+	if o != nil && !IsNil(o.IsDefault) {
+		return true
+	}
+
+	return false
+}
+
+// SetIsDefault gets a reference to the given bool and assigns it to the IsDefault field.
+func (o *SynthesisVoiceResponse) SetIsDefault(v bool) {
+	o.IsDefault = &v
+}
+
+// GetIsNeural returns the IsNeural field value if set, zero value otherwise.
+func (o *SynthesisVoiceResponse) GetIsNeural() bool {
+	if o == nil || IsNil(o.IsNeural) {
+		var ret bool
+		return ret
+	}
+	return *o.IsNeural
+}
+
+// GetIsNeuralOk returns a tuple with the IsNeural field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *SynthesisVoiceResponse) GetIsNeuralOk() (*bool, bool) {
+	if o == nil || IsNil(o.IsNeural) {
+		return nil, false
+	}
+	return o.IsNeural, true
+}
+
+// HasIsNeural returns a boolean if a field has been set.
+func (o *SynthesisVoiceResponse) HasIsNeural() bool {
+	if o != nil && !IsNil(o.IsNeural) {
+		return true
+	}
+
+	return false
+}
+
+// SetIsNeural gets a reference to the given bool and assigns it to the IsNeural field.
+func (o *SynthesisVoiceResponse) SetIsNeural(v bool) {
+	o.IsNeural = &v
+}
+
+func (o SynthesisVoiceResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o SynthesisVoiceResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Gender) {
+		toSerialize["gender"] = o.Gender
+	}
+	if !IsNil(o.Supplier) {
+		toSerialize["supplier"] = o.Supplier
+	}
+	if !IsNil(o.SsmlSupported) {
+		toSerialize["ssmlSupported"] = o.SsmlSupported
+	}
+	if !IsNil(o.IsDefault) {
+		toSerialize["isDefault"] = o.IsDefault
+	}
+	if !IsNil(o.IsNeural) {
+		toSerialize["isNeural"] = o.IsNeural
+	}
+	return toSerialize, nil
+}
+
+type NullableSynthesisVoiceResponse struct {
+	value *SynthesisVoiceResponse
+	isSet bool
+}
+
+func (v NullableSynthesisVoiceResponse) Get() *SynthesisVoiceResponse {
+	return v.value
+}
+
+func (v *NullableSynthesisVoiceResponse) Set(val *SynthesisVoiceResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableSynthesisVoiceResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableSynthesisVoiceResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableSynthesisVoiceResponse(val *SynthesisVoiceResponse) *NullableSynthesisVoiceResponse {
+	return &NullableSynthesisVoiceResponse{value: val, isSet: true}
+}
+
+func (v NullableSynthesisVoiceResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableSynthesisVoiceResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/tag_identifier_type.go b/pkg/infobip/models/voice/tag_identifier_type.go
new file mode 100644
index 0000000..b2f5a22
--- /dev/null
+++ b/pkg/infobip/models/voice/tag_identifier_type.go
@@ -0,0 +1,110 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// TagIdentifierType Defines which identifier will be provided in the tags field. Possible values are ID and NAME. If not provided, default value of NAME is used.
+type TagIdentifierType string
+
+// List of TagIdentifierType
+const (
+	TAGIDENTIFIERTYPE_ID   TagIdentifierType = "ID"
+	TAGIDENTIFIERTYPE_NAME TagIdentifierType = "NAME"
+)
+
+// All allowed values of TagIdentifierType enum
+var AllowedTagIdentifierTypeEnumValues = []TagIdentifierType{
+	"ID",
+	"NAME",
+}
+
+func (v *TagIdentifierType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := TagIdentifierType(value)
+	for _, existing := range AllowedTagIdentifierTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid TagIdentifierType", value)
+}
+
+// NewTagIdentifierTypeFromValue returns a pointer to a valid TagIdentifierType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewTagIdentifierTypeFromValue(v string) (*TagIdentifierType, error) {
+	ev := TagIdentifierType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for TagIdentifierType: valid values are %v", v, AllowedTagIdentifierTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v TagIdentifierType) IsValid() bool {
+	for _, existing := range AllowedTagIdentifierTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to TagIdentifierType value
+func (v TagIdentifierType) Ptr() *TagIdentifierType {
+	return &v
+}
+
+type NullableTagIdentifierType struct {
+	value *TagIdentifierType
+	isSet bool
+}
+
+func (v NullableTagIdentifierType) Get() *TagIdentifierType {
+	return v.value
+}
+
+func (v *NullableTagIdentifierType) Set(val *TagIdentifierType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTagIdentifierType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTagIdentifierType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTagIdentifierType(val *TagIdentifierType) *NullableTagIdentifierType {
+	return &NullableTagIdentifierType{value: val, isSet: true}
+}
+
+func (v NullableTagIdentifierType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTagIdentifierType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/termination.go b/pkg/infobip/models/voice/termination.go
new file mode 100644
index 0000000..9f7b6c8
--- /dev/null
+++ b/pkg/infobip/models/voice/termination.go
@@ -0,0 +1,111 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// Termination Indicates when to stop the action. The action can be interrupted at any time by the end user when they press any DTMF key.
+type Termination struct {
+	DtmfTermination *DtmfTermination
+}
+
+// DtmfTerminationAsTermination is a convenience function that returns DtmfTermination wrapped in Termination
+func DtmfTerminationAsTermination(v *DtmfTermination) Termination {
+	return Termination{
+		DtmfTermination: v,
+	}
+}
+
+// Unmarshal JSON data into any of the pointers in the struct
+func (dst *Termination) UnmarshalJSON(data []byte) error {
+	// use discriminator value to speed up the lookup
+	var jsonDict map[string]interface{}
+	err := json.Unmarshal(data, &jsonDict)
+	if err != nil {
+		return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.")
+	}
+
+	// check if the discriminator value is 'DTMF'
+	if jsonDict["type"] == "DTMF" {
+		// try to unmarshal JSON data into DtmfTermination
+		err = json.Unmarshal(data, &dst.DtmfTermination)
+		if err == nil {
+			jsonDtmfTermination, _ := json.Marshal(dst.DtmfTermination)
+			if string(jsonDtmfTermination) == "{}" { // empty struct
+				dst.DtmfTermination = nil
+			} else {
+				return nil // data stored in dst.DtmfTermination, return on the first match
+			}
+		} else {
+			dst.DtmfTermination = nil
+		}
+	}
+	return fmt.Errorf("Data failed to match schemas in anyOf(Termination)")
+}
+
+// Marshal data from the first non-nil pointers in the struct to JSON
+func (src Termination) MarshalJSON() ([]byte, error) {
+	if src.DtmfTermination != nil {
+		return json.Marshal(&src.DtmfTermination)
+	}
+	return nil, nil // no data in anyOf schemas
+}
+
+// Get the actual instance
+func (obj *Termination) GetActualInstance() interface{} {
+	if obj == nil {
+		return nil
+	}
+	if obj.DtmfTermination != nil {
+		return obj.DtmfTermination
+	}
+	// all schemas are nil
+	return nil
+}
+
+type NullableTermination struct {
+	value *Termination
+	isSet bool
+}
+
+func (v NullableTermination) Get() *Termination {
+	return v.value
+}
+
+func (v *NullableTermination) Set(val *Termination) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTermination) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTermination) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTermination(val *Termination) *NullableTermination {
+	return &NullableTermination{value: val, isSet: true}
+}
+
+func (v NullableTermination) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTermination) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/termination_type.go b/pkg/infobip/models/voice/termination_type.go
new file mode 100644
index 0000000..17ab159
--- /dev/null
+++ b/pkg/infobip/models/voice/termination_type.go
@@ -0,0 +1,108 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// TerminationType the model 'TerminationType'
+type TerminationType string
+
+// List of TerminationType
+const (
+	TERMINATIONTYPE_DTMF TerminationType = "DTMF"
+)
+
+// All allowed values of TerminationType enum
+var AllowedTerminationTypeEnumValues = []TerminationType{
+	"DTMF",
+}
+
+func (v *TerminationType) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := TerminationType(value)
+	for _, existing := range AllowedTerminationTypeEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid TerminationType", value)
+}
+
+// NewTerminationTypeFromValue returns a pointer to a valid TerminationType
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewTerminationTypeFromValue(v string) (*TerminationType, error) {
+	ev := TerminationType(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for TerminationType: valid values are %v", v, AllowedTerminationTypeEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v TerminationType) IsValid() bool {
+	for _, existing := range AllowedTerminationTypeEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to TerminationType value
+func (v TerminationType) Ptr() *TerminationType {
+	return &v
+}
+
+type NullableTerminationType struct {
+	value *TerminationType
+	isSet bool
+}
+
+func (v NullableTerminationType) Get() *TerminationType {
+	return v.value
+}
+
+func (v *NullableTerminationType) Set(val *TerminationType) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTerminationType) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTerminationType) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTerminationType(val *TerminationType) *NullableTerminationType {
+	return &NullableTerminationType{value: val, isSet: true}
+}
+
+func (v NullableTerminationType) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTerminationType) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/text_play_content.go b/pkg/infobip/models/voice/text_play_content.go
new file mode 100644
index 0000000..39cbe94
--- /dev/null
+++ b/pkg/infobip/models/voice/text_play_content.go
@@ -0,0 +1,224 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the TextPlayContent type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &TextPlayContent{}
+
+// TextPlayContent struct for TextPlayContent
+type TextPlayContent struct {
+	Type        PlayContentType
+	Text        string
+	Language    Language
+	SpeechRate  *float64
+	Preferences *VoicePreferences
+}
+
+type _TextPlayContent TextPlayContent
+
+// NewTextPlayContent instantiates a new TextPlayContent object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewTextPlayContent(text string, language Language) *TextPlayContent {
+	this := TextPlayContent{}
+	this.Type = "TEXT"
+	this.Text = text
+	this.Language = language
+	return &this
+}
+
+// NewTextPlayContentWithDefaults instantiates a new TextPlayContent object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewTextPlayContentWithDefaults() *TextPlayContent {
+	this := TextPlayContent{}
+	this.Type = "TEXT"
+	return &this
+}
+
+// GetText returns the Text field value
+func (o *TextPlayContent) GetText() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Text
+}
+
+// GetTextOk returns a tuple with the Text field value
+// and a boolean to check if the value has been set.
+func (o *TextPlayContent) GetTextOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Text, true
+}
+
+// SetText sets field value
+func (o *TextPlayContent) SetText(v string) {
+	o.Text = v
+}
+
+// GetLanguage returns the Language field value
+func (o *TextPlayContent) GetLanguage() Language {
+	if o == nil {
+		var ret Language
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *TextPlayContent) GetLanguageOk() (*Language, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *TextPlayContent) SetLanguage(v Language) {
+	o.Language = v
+}
+
+// GetSpeechRate returns the SpeechRate field value if set, zero value otherwise.
+func (o *TextPlayContent) GetSpeechRate() float64 {
+	if o == nil || IsNil(o.SpeechRate) {
+		var ret float64
+		return ret
+	}
+	return *o.SpeechRate
+}
+
+// GetSpeechRateOk returns a tuple with the SpeechRate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TextPlayContent) GetSpeechRateOk() (*float64, bool) {
+	if o == nil || IsNil(o.SpeechRate) {
+		return nil, false
+	}
+	return o.SpeechRate, true
+}
+
+// HasSpeechRate returns a boolean if a field has been set.
+func (o *TextPlayContent) HasSpeechRate() bool {
+	if o != nil && !IsNil(o.SpeechRate) {
+		return true
+	}
+
+	return false
+}
+
+// SetSpeechRate gets a reference to the given float64 and assigns it to the SpeechRate field.
+func (o *TextPlayContent) SetSpeechRate(v float64) {
+	o.SpeechRate = &v
+}
+
+// GetPreferences returns the Preferences field value if set, zero value otherwise.
+func (o *TextPlayContent) GetPreferences() VoicePreferences {
+	if o == nil || IsNil(o.Preferences) {
+		var ret VoicePreferences
+		return ret
+	}
+	return *o.Preferences
+}
+
+// GetPreferencesOk returns a tuple with the Preferences field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *TextPlayContent) GetPreferencesOk() (*VoicePreferences, bool) {
+	if o == nil || IsNil(o.Preferences) {
+		return nil, false
+	}
+	return o.Preferences, true
+}
+
+// HasPreferences returns a boolean if a field has been set.
+func (o *TextPlayContent) HasPreferences() bool {
+	if o != nil && !IsNil(o.Preferences) {
+		return true
+	}
+
+	return false
+}
+
+// SetPreferences gets a reference to the given VoicePreferences and assigns it to the Preferences field.
+func (o *TextPlayContent) SetPreferences(v VoicePreferences) {
+	o.Preferences = &v
+}
+
+func (o TextPlayContent) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o TextPlayContent) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["text"] = o.Text
+	toSerialize["language"] = o.Language
+	if !IsNil(o.SpeechRate) {
+		toSerialize["speechRate"] = o.SpeechRate
+	}
+	if !IsNil(o.Preferences) {
+		toSerialize["preferences"] = o.Preferences
+	}
+	return toSerialize, nil
+}
+
+type NullableTextPlayContent struct {
+	value *TextPlayContent
+	isSet bool
+}
+
+func (v NullableTextPlayContent) Get() *TextPlayContent {
+	return v.value
+}
+
+func (v *NullableTextPlayContent) Set(val *TextPlayContent) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTextPlayContent) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTextPlayContent) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTextPlayContent(val *TextPlayContent) *NullableTextPlayContent {
+	return &NullableTextPlayContent{value: val, isSet: true}
+}
+
+func (v NullableTextPlayContent) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTextPlayContent) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/time_unit.go b/pkg/infobip/models/voice/time_unit.go
new file mode 100644
index 0000000..4472195
--- /dev/null
+++ b/pkg/infobip/models/voice/time_unit.go
@@ -0,0 +1,114 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// TimeUnit Defines a time unit used for calculating call creation rate.
+type TimeUnit string
+
+// List of TimeUnit
+const (
+	TIMEUNIT_SECONDS TimeUnit = "SECONDS"
+	TIMEUNIT_MINUTES TimeUnit = "MINUTES"
+	TIMEUNIT_HOURS   TimeUnit = "HOURS"
+	TIMEUNIT_DAYS    TimeUnit = "DAYS"
+)
+
+// All allowed values of TimeUnit enum
+var AllowedTimeUnitEnumValues = []TimeUnit{
+	"SECONDS",
+	"MINUTES",
+	"HOURS",
+	"DAYS",
+}
+
+func (v *TimeUnit) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := TimeUnit(value)
+	for _, existing := range AllowedTimeUnitEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid TimeUnit", value)
+}
+
+// NewTimeUnitFromValue returns a pointer to a valid TimeUnit
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewTimeUnitFromValue(v string) (*TimeUnit, error) {
+	ev := TimeUnit(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for TimeUnit: valid values are %v", v, AllowedTimeUnitEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v TimeUnit) IsValid() bool {
+	for _, existing := range AllowedTimeUnitEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to TimeUnit value
+func (v TimeUnit) Ptr() *TimeUnit {
+	return &v
+}
+
+type NullableTimeUnit struct {
+	value *TimeUnit
+	isSet bool
+}
+
+func (v NullableTimeUnit) Get() *TimeUnit {
+	return v.value
+}
+
+func (v *NullableTimeUnit) Set(val *TimeUnit) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTimeUnit) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTimeUnit) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTimeUnit(val *TimeUnit) *NullableTimeUnit {
+	return &NullableTimeUnit{value: val, isSet: true}
+}
+
+func (v NullableTimeUnit) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTimeUnit) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/transcription.go b/pkg/infobip/models/voice/transcription.go
new file mode 100644
index 0000000..1b23b21
--- /dev/null
+++ b/pkg/infobip/models/voice/transcription.go
@@ -0,0 +1,162 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Transcription type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Transcription{}
+
+// Transcription struct for Transcription
+type Transcription struct {
+	Language TranscriptionLanguage
+	// Flag indicating whether interim transcription results should be sent.
+	SendInterimResults *bool
+}
+
+type _Transcription Transcription
+
+// NewTranscription instantiates a new Transcription object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewTranscription(language TranscriptionLanguage) *Transcription {
+	this := Transcription{}
+	this.Language = language
+	var sendInterimResults bool = false
+	this.SendInterimResults = &sendInterimResults
+	return &this
+}
+
+// NewTranscriptionWithDefaults instantiates a new Transcription object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewTranscriptionWithDefaults() *Transcription {
+	this := Transcription{}
+
+	var sendInterimResults bool = false
+	this.SendInterimResults = &sendInterimResults
+	return &this
+}
+
+// GetLanguage returns the Language field value
+func (o *Transcription) GetLanguage() TranscriptionLanguage {
+	if o == nil {
+		var ret TranscriptionLanguage
+		return ret
+	}
+
+	return o.Language
+}
+
+// GetLanguageOk returns a tuple with the Language field value
+// and a boolean to check if the value has been set.
+func (o *Transcription) GetLanguageOk() (*TranscriptionLanguage, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Language, true
+}
+
+// SetLanguage sets field value
+func (o *Transcription) SetLanguage(v TranscriptionLanguage) {
+	o.Language = v
+}
+
+// GetSendInterimResults returns the SendInterimResults field value if set, zero value otherwise.
+func (o *Transcription) GetSendInterimResults() bool {
+	if o == nil || IsNil(o.SendInterimResults) {
+		var ret bool
+		return ret
+	}
+	return *o.SendInterimResults
+}
+
+// GetSendInterimResultsOk returns a tuple with the SendInterimResults field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Transcription) GetSendInterimResultsOk() (*bool, bool) {
+	if o == nil || IsNil(o.SendInterimResults) {
+		return nil, false
+	}
+	return o.SendInterimResults, true
+}
+
+// HasSendInterimResults returns a boolean if a field has been set.
+func (o *Transcription) HasSendInterimResults() bool {
+	if o != nil && !IsNil(o.SendInterimResults) {
+		return true
+	}
+
+	return false
+}
+
+// SetSendInterimResults gets a reference to the given bool and assigns it to the SendInterimResults field.
+func (o *Transcription) SetSendInterimResults(v bool) {
+	o.SendInterimResults = &v
+}
+
+func (o Transcription) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Transcription) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["language"] = o.Language
+	if !IsNil(o.SendInterimResults) {
+		toSerialize["sendInterimResults"] = o.SendInterimResults
+	}
+	return toSerialize, nil
+}
+
+type NullableTranscription struct {
+	value *Transcription
+	isSet bool
+}
+
+func (v NullableTranscription) Get() *Transcription {
+	return v.value
+}
+
+func (v *NullableTranscription) Set(val *Transcription) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTranscription) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTranscription) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTranscription(val *Transcription) *NullableTranscription {
+	return &NullableTranscription{value: val, isSet: true}
+}
+
+func (v NullableTranscription) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTranscription) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/transcription_language.go b/pkg/infobip/models/voice/transcription_language.go
new file mode 100644
index 0000000..340ef03
--- /dev/null
+++ b/pkg/infobip/models/voice/transcription_language.go
@@ -0,0 +1,392 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// TranscriptionLanguage the model 'TranscriptionLanguage'
+type TranscriptionLanguage string
+
+// List of TranscriptionLanguage
+const (
+	TRANSCRIPTIONLANGUAGE_AF_ZA      TranscriptionLanguage = "af-ZA"
+	TRANSCRIPTIONLANGUAGE_SQ_AL      TranscriptionLanguage = "sq-AL"
+	TRANSCRIPTIONLANGUAGE_AM_ET      TranscriptionLanguage = "am-ET"
+	TRANSCRIPTIONLANGUAGE_AR_KW      TranscriptionLanguage = "ar-KW"
+	TRANSCRIPTIONLANGUAGE_AR_AE      TranscriptionLanguage = "ar-AE"
+	TRANSCRIPTIONLANGUAGE_AR_BH      TranscriptionLanguage = "ar-BH"
+	TRANSCRIPTIONLANGUAGE_AR_DZ      TranscriptionLanguage = "ar-DZ"
+	TRANSCRIPTIONLANGUAGE_AR_EG      TranscriptionLanguage = "ar-EG"
+	TRANSCRIPTIONLANGUAGE_AR_IL      TranscriptionLanguage = "ar-IL"
+	TRANSCRIPTIONLANGUAGE_AR_IQ      TranscriptionLanguage = "ar-IQ"
+	TRANSCRIPTIONLANGUAGE_AR_JO      TranscriptionLanguage = "ar-JO"
+	TRANSCRIPTIONLANGUAGE_AR_LB      TranscriptionLanguage = "ar-LB"
+	TRANSCRIPTIONLANGUAGE_AR_LY      TranscriptionLanguage = "ar-LY"
+	TRANSCRIPTIONLANGUAGE_AR_MA      TranscriptionLanguage = "ar-MA"
+	TRANSCRIPTIONLANGUAGE_AR_OM      TranscriptionLanguage = "ar-OM"
+	TRANSCRIPTIONLANGUAGE_AR_PS      TranscriptionLanguage = "ar-PS"
+	TRANSCRIPTIONLANGUAGE_AR_QA      TranscriptionLanguage = "ar-QA"
+	TRANSCRIPTIONLANGUAGE_AR_SA      TranscriptionLanguage = "ar-SA"
+	TRANSCRIPTIONLANGUAGE_AR_SY      TranscriptionLanguage = "ar-SY"
+	TRANSCRIPTIONLANGUAGE_AR_TN      TranscriptionLanguage = "ar-TN"
+	TRANSCRIPTIONLANGUAGE_AR_YE      TranscriptionLanguage = "ar-YE"
+	TRANSCRIPTIONLANGUAGE_HY_AM      TranscriptionLanguage = "hy-AM"
+	TRANSCRIPTIONLANGUAGE_AZ_AZ      TranscriptionLanguage = "az-AZ"
+	TRANSCRIPTIONLANGUAGE_EU_ES      TranscriptionLanguage = "eu-ES"
+	TRANSCRIPTIONLANGUAGE_BN_IN      TranscriptionLanguage = "bn-IN"
+	TRANSCRIPTIONLANGUAGE_BN_BD      TranscriptionLanguage = "bn-BD"
+	TRANSCRIPTIONLANGUAGE_BS_BA      TranscriptionLanguage = "bs-BA"
+	TRANSCRIPTIONLANGUAGE_BG_BG      TranscriptionLanguage = "bg-BG"
+	TRANSCRIPTIONLANGUAGE_MY_MM      TranscriptionLanguage = "my-MM"
+	TRANSCRIPTIONLANGUAGE_CA_ES      TranscriptionLanguage = "ca-ES"
+	TRANSCRIPTIONLANGUAGE_ZH_CN      TranscriptionLanguage = "zh-CN"
+	TRANSCRIPTIONLANGUAGE_ZH_HK      TranscriptionLanguage = "zh-HK"
+	TRANSCRIPTIONLANGUAGE_ZH_TW      TranscriptionLanguage = "zh-TW"
+	TRANSCRIPTIONLANGUAGE_HR_HR      TranscriptionLanguage = "hr-HR"
+	TRANSCRIPTIONLANGUAGE_CS_CZ      TranscriptionLanguage = "cs-CZ"
+	TRANSCRIPTIONLANGUAGE_DA_DK      TranscriptionLanguage = "da-DK"
+	TRANSCRIPTIONLANGUAGE_NL_NL      TranscriptionLanguage = "nl-NL"
+	TRANSCRIPTIONLANGUAGE_NL_BE      TranscriptionLanguage = "nl-BE"
+	TRANSCRIPTIONLANGUAGE_EN_AU      TranscriptionLanguage = "en-AU"
+	TRANSCRIPTIONLANGUAGE_EN_CA      TranscriptionLanguage = "en-CA"
+	TRANSCRIPTIONLANGUAGE_EN_GB      TranscriptionLanguage = "en-GB"
+	TRANSCRIPTIONLANGUAGE_EN_GH      TranscriptionLanguage = "en-GH"
+	TRANSCRIPTIONLANGUAGE_EN_HK      TranscriptionLanguage = "en-HK"
+	TRANSCRIPTIONLANGUAGE_EN_IE      TranscriptionLanguage = "en-IE"
+	TRANSCRIPTIONLANGUAGE_EN_IN      TranscriptionLanguage = "en-IN"
+	TRANSCRIPTIONLANGUAGE_EN_KE      TranscriptionLanguage = "en-KE"
+	TRANSCRIPTIONLANGUAGE_EN_NG      TranscriptionLanguage = "en-NG"
+	TRANSCRIPTIONLANGUAGE_EN_NZ      TranscriptionLanguage = "en-NZ"
+	TRANSCRIPTIONLANGUAGE_EN_PH      TranscriptionLanguage = "en-PH"
+	TRANSCRIPTIONLANGUAGE_EN_PK      TranscriptionLanguage = "en-PK"
+	TRANSCRIPTIONLANGUAGE_EN_SG      TranscriptionLanguage = "en-SG"
+	TRANSCRIPTIONLANGUAGE_EN_TZ      TranscriptionLanguage = "en-TZ"
+	TRANSCRIPTIONLANGUAGE_EN_US      TranscriptionLanguage = "en-US"
+	TRANSCRIPTIONLANGUAGE_EN_ZA      TranscriptionLanguage = "en-ZA"
+	TRANSCRIPTIONLANGUAGE_ET_EE      TranscriptionLanguage = "et-EE"
+	TRANSCRIPTIONLANGUAGE_FIL_PH     TranscriptionLanguage = "fil-PH"
+	TRANSCRIPTIONLANGUAGE_FI_FI      TranscriptionLanguage = "fi-FI"
+	TRANSCRIPTIONLANGUAGE_FR_BE      TranscriptionLanguage = "fr-BE"
+	TRANSCRIPTIONLANGUAGE_FR_CA      TranscriptionLanguage = "fr-CA"
+	TRANSCRIPTIONLANGUAGE_FR_CH      TranscriptionLanguage = "fr-CH"
+	TRANSCRIPTIONLANGUAGE_FR_FR      TranscriptionLanguage = "fr-FR"
+	TRANSCRIPTIONLANGUAGE_GL_ES      TranscriptionLanguage = "gl-ES"
+	TRANSCRIPTIONLANGUAGE_KA_GE      TranscriptionLanguage = "ka-GE"
+	TRANSCRIPTIONLANGUAGE_DE_AT      TranscriptionLanguage = "de-AT"
+	TRANSCRIPTIONLANGUAGE_DE_CH      TranscriptionLanguage = "de-CH"
+	TRANSCRIPTIONLANGUAGE_DE_DE      TranscriptionLanguage = "de-DE"
+	TRANSCRIPTIONLANGUAGE_EL_GR      TranscriptionLanguage = "el-GR"
+	TRANSCRIPTIONLANGUAGE_GU_IN      TranscriptionLanguage = "gu-IN"
+	TRANSCRIPTIONLANGUAGE_HE_IL      TranscriptionLanguage = "he-IL"
+	TRANSCRIPTIONLANGUAGE_HI_IN      TranscriptionLanguage = "hi-IN"
+	TRANSCRIPTIONLANGUAGE_HU_HU      TranscriptionLanguage = "hu-HU"
+	TRANSCRIPTIONLANGUAGE_IS_IS      TranscriptionLanguage = "is-IS"
+	TRANSCRIPTIONLANGUAGE_ID_ID      TranscriptionLanguage = "id-ID"
+	TRANSCRIPTIONLANGUAGE_GA_IE      TranscriptionLanguage = "ga-IE"
+	TRANSCRIPTIONLANGUAGE_IT_CH      TranscriptionLanguage = "it-CH"
+	TRANSCRIPTIONLANGUAGE_IT_IT      TranscriptionLanguage = "it-IT"
+	TRANSCRIPTIONLANGUAGE_JA_JP      TranscriptionLanguage = "ja-JP"
+	TRANSCRIPTIONLANGUAGE_JV_ID      TranscriptionLanguage = "jv-ID"
+	TRANSCRIPTIONLANGUAGE_KN_IN      TranscriptionLanguage = "kn-IN"
+	TRANSCRIPTIONLANGUAGE_KK_KZ      TranscriptionLanguage = "kk-KZ"
+	TRANSCRIPTIONLANGUAGE_KM_KH      TranscriptionLanguage = "km-KH"
+	TRANSCRIPTIONLANGUAGE_KO_KR      TranscriptionLanguage = "ko-KR"
+	TRANSCRIPTIONLANGUAGE_LO_LA      TranscriptionLanguage = "lo-LA"
+	TRANSCRIPTIONLANGUAGE_LV_LV      TranscriptionLanguage = "lv-LV"
+	TRANSCRIPTIONLANGUAGE_LT_LT      TranscriptionLanguage = "lt-LT"
+	TRANSCRIPTIONLANGUAGE_MK_MK      TranscriptionLanguage = "mk-MK"
+	TRANSCRIPTIONLANGUAGE_MS_MY      TranscriptionLanguage = "ms-MY"
+	TRANSCRIPTIONLANGUAGE_ML_IN      TranscriptionLanguage = "ml-IN"
+	TRANSCRIPTIONLANGUAGE_MT_MT      TranscriptionLanguage = "mt-MT"
+	TRANSCRIPTIONLANGUAGE_MR_IN      TranscriptionLanguage = "mr-IN"
+	TRANSCRIPTIONLANGUAGE_MN_MN      TranscriptionLanguage = "mn-MN"
+	TRANSCRIPTIONLANGUAGE_NE_NP      TranscriptionLanguage = "ne-NP"
+	TRANSCRIPTIONLANGUAGE_NO_NO      TranscriptionLanguage = "no-NO"
+	TRANSCRIPTIONLANGUAGE_FA_IR      TranscriptionLanguage = "fa-IR"
+	TRANSCRIPTIONLANGUAGE_PL_PL      TranscriptionLanguage = "pl-PL"
+	TRANSCRIPTIONLANGUAGE_PT_PT      TranscriptionLanguage = "pt-PT"
+	TRANSCRIPTIONLANGUAGE_PT_BR      TranscriptionLanguage = "pt-BR"
+	TRANSCRIPTIONLANGUAGE_PA_GURU_IN TranscriptionLanguage = "pa-Guru-IN"
+	TRANSCRIPTIONLANGUAGE_RO_RO      TranscriptionLanguage = "ro-RO"
+	TRANSCRIPTIONLANGUAGE_RU_RU      TranscriptionLanguage = "ru-RU"
+	TRANSCRIPTIONLANGUAGE_SR_RS      TranscriptionLanguage = "sr-RS"
+	TRANSCRIPTIONLANGUAGE_SI_LK      TranscriptionLanguage = "si-LK"
+	TRANSCRIPTIONLANGUAGE_SK_SK      TranscriptionLanguage = "sk-SK"
+	TRANSCRIPTIONLANGUAGE_SL_SI      TranscriptionLanguage = "sl-SI"
+	TRANSCRIPTIONLANGUAGE_ES_BO      TranscriptionLanguage = "es-BO"
+	TRANSCRIPTIONLANGUAGE_ES_AR      TranscriptionLanguage = "es-AR"
+	TRANSCRIPTIONLANGUAGE_ES_CL      TranscriptionLanguage = "es-CL"
+	TRANSCRIPTIONLANGUAGE_ES_CO      TranscriptionLanguage = "es-CO"
+	TRANSCRIPTIONLANGUAGE_ES_CR      TranscriptionLanguage = "es-CR"
+	TRANSCRIPTIONLANGUAGE_ES_CU      TranscriptionLanguage = "es-CU"
+	TRANSCRIPTIONLANGUAGE_ES_DO      TranscriptionLanguage = "es-DO"
+	TRANSCRIPTIONLANGUAGE_ES_EC      TranscriptionLanguage = "es-EC"
+	TRANSCRIPTIONLANGUAGE_ES_ES      TranscriptionLanguage = "es-ES"
+	TRANSCRIPTIONLANGUAGE_ES_GQ      TranscriptionLanguage = "es-GQ"
+	TRANSCRIPTIONLANGUAGE_ES_GT      TranscriptionLanguage = "es-GT"
+	TRANSCRIPTIONLANGUAGE_ES_HN      TranscriptionLanguage = "es-HN"
+	TRANSCRIPTIONLANGUAGE_ES_MX      TranscriptionLanguage = "es-MX"
+	TRANSCRIPTIONLANGUAGE_ES_NI      TranscriptionLanguage = "es-NI"
+	TRANSCRIPTIONLANGUAGE_ES_PA      TranscriptionLanguage = "es-PA"
+	TRANSCRIPTIONLANGUAGE_ES_PE      TranscriptionLanguage = "es-PE"
+	TRANSCRIPTIONLANGUAGE_ES_PR      TranscriptionLanguage = "es-PR"
+	TRANSCRIPTIONLANGUAGE_ES_PY      TranscriptionLanguage = "es-PY"
+	TRANSCRIPTIONLANGUAGE_ES_SV      TranscriptionLanguage = "es-SV"
+	TRANSCRIPTIONLANGUAGE_ES_US      TranscriptionLanguage = "es-US"
+	TRANSCRIPTIONLANGUAGE_ES_UY      TranscriptionLanguage = "es-UY"
+	TRANSCRIPTIONLANGUAGE_ES_VE      TranscriptionLanguage = "es-VE"
+	TRANSCRIPTIONLANGUAGE_SU_ID      TranscriptionLanguage = "su-ID"
+	TRANSCRIPTIONLANGUAGE_SW_TZ      TranscriptionLanguage = "sw-TZ"
+	TRANSCRIPTIONLANGUAGE_SW_KE      TranscriptionLanguage = "sw-KE"
+	TRANSCRIPTIONLANGUAGE_SV_SE      TranscriptionLanguage = "sv-SE"
+	TRANSCRIPTIONLANGUAGE_TA_IN      TranscriptionLanguage = "ta-IN"
+	TRANSCRIPTIONLANGUAGE_TA_LK      TranscriptionLanguage = "ta-LK"
+	TRANSCRIPTIONLANGUAGE_TA_MY      TranscriptionLanguage = "ta-MY"
+	TRANSCRIPTIONLANGUAGE_TA_SG      TranscriptionLanguage = "ta-SG"
+	TRANSCRIPTIONLANGUAGE_TE_IN      TranscriptionLanguage = "te-IN"
+	TRANSCRIPTIONLANGUAGE_TH_TH      TranscriptionLanguage = "th-TH"
+	TRANSCRIPTIONLANGUAGE_TR_TR      TranscriptionLanguage = "tr-TR"
+	TRANSCRIPTIONLANGUAGE_UK_UA      TranscriptionLanguage = "uk-UA"
+	TRANSCRIPTIONLANGUAGE_UR_IN      TranscriptionLanguage = "ur-IN"
+	TRANSCRIPTIONLANGUAGE_UR_PK      TranscriptionLanguage = "ur-PK"
+	TRANSCRIPTIONLANGUAGE_UZ_UZ      TranscriptionLanguage = "uz-UZ"
+	TRANSCRIPTIONLANGUAGE_VI_VN      TranscriptionLanguage = "vi-VN"
+	TRANSCRIPTIONLANGUAGE_ZU_ZA      TranscriptionLanguage = "zu-ZA"
+)
+
+// All allowed values of TranscriptionLanguage enum
+var AllowedTranscriptionLanguageEnumValues = []TranscriptionLanguage{
+	"af-ZA",
+	"sq-AL",
+	"am-ET",
+	"ar-KW",
+	"ar-AE",
+	"ar-BH",
+	"ar-DZ",
+	"ar-EG",
+	"ar-IL",
+	"ar-IQ",
+	"ar-JO",
+	"ar-LB",
+	"ar-LY",
+	"ar-MA",
+	"ar-OM",
+	"ar-PS",
+	"ar-QA",
+	"ar-SA",
+	"ar-SY",
+	"ar-TN",
+	"ar-YE",
+	"hy-AM",
+	"az-AZ",
+	"eu-ES",
+	"bn-IN",
+	"bn-BD",
+	"bs-BA",
+	"bg-BG",
+	"my-MM",
+	"ca-ES",
+	"zh-CN",
+	"zh-HK",
+	"zh-TW",
+	"hr-HR",
+	"cs-CZ",
+	"da-DK",
+	"nl-NL",
+	"nl-BE",
+	"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",
+	"et-EE",
+	"fil-PH",
+	"fi-FI",
+	"fr-BE",
+	"fr-CA",
+	"fr-CH",
+	"fr-FR",
+	"gl-ES",
+	"ka-GE",
+	"de-AT",
+	"de-CH",
+	"de-DE",
+	"el-GR",
+	"gu-IN",
+	"he-IL",
+	"hi-IN",
+	"hu-HU",
+	"is-IS",
+	"id-ID",
+	"ga-IE",
+	"it-CH",
+	"it-IT",
+	"ja-JP",
+	"jv-ID",
+	"kn-IN",
+	"kk-KZ",
+	"km-KH",
+	"ko-KR",
+	"lo-LA",
+	"lv-LV",
+	"lt-LT",
+	"mk-MK",
+	"ms-MY",
+	"ml-IN",
+	"mt-MT",
+	"mr-IN",
+	"mn-MN",
+	"ne-NP",
+	"no-NO",
+	"fa-IR",
+	"pl-PL",
+	"pt-PT",
+	"pt-BR",
+	"pa-Guru-IN",
+	"ro-RO",
+	"ru-RU",
+	"sr-RS",
+	"si-LK",
+	"sk-SK",
+	"sl-SI",
+	"es-BO",
+	"es-AR",
+	"es-CL",
+	"es-CO",
+	"es-CR",
+	"es-CU",
+	"es-DO",
+	"es-EC",
+	"es-ES",
+	"es-GQ",
+	"es-GT",
+	"es-HN",
+	"es-MX",
+	"es-NI",
+	"es-PA",
+	"es-PE",
+	"es-PR",
+	"es-PY",
+	"es-SV",
+	"es-US",
+	"es-UY",
+	"es-VE",
+	"su-ID",
+	"sw-TZ",
+	"sw-KE",
+	"sv-SE",
+	"ta-IN",
+	"ta-LK",
+	"ta-MY",
+	"ta-SG",
+	"te-IN",
+	"th-TH",
+	"tr-TR",
+	"uk-UA",
+	"ur-IN",
+	"ur-PK",
+	"uz-UZ",
+	"vi-VN",
+	"zu-ZA",
+}
+
+func (v *TranscriptionLanguage) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := TranscriptionLanguage(value)
+	for _, existing := range AllowedTranscriptionLanguageEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid TranscriptionLanguage", value)
+}
+
+// NewTranscriptionLanguageFromValue returns a pointer to a valid TranscriptionLanguage
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewTranscriptionLanguageFromValue(v string) (*TranscriptionLanguage, error) {
+	ev := TranscriptionLanguage(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for TranscriptionLanguage: valid values are %v", v, AllowedTranscriptionLanguageEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v TranscriptionLanguage) IsValid() bool {
+	for _, existing := range AllowedTranscriptionLanguageEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to TranscriptionLanguage value
+func (v TranscriptionLanguage) Ptr() *TranscriptionLanguage {
+	return &v
+}
+
+type NullableTranscriptionLanguage struct {
+	value *TranscriptionLanguage
+	isSet bool
+}
+
+func (v NullableTranscriptionLanguage) Get() *TranscriptionLanguage {
+	return v.value
+}
+
+func (v *NullableTranscriptionLanguage) Set(val *TranscriptionLanguage) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableTranscriptionLanguage) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableTranscriptionLanguage) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableTranscriptionLanguage(val *TranscriptionLanguage) *NullableTranscriptionLanguage {
+	return &NullableTranscriptionLanguage{value: val, isSet: true}
+}
+
+func (v NullableTranscriptionLanguage) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableTranscriptionLanguage) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/update_request.go b/pkg/infobip/models/voice/update_request.go
new file mode 100644
index 0000000..f853358
--- /dev/null
+++ b/pkg/infobip/models/voice/update_request.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the UpdateRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &UpdateRequest{}
+
+// UpdateRequest struct for UpdateRequest
+type UpdateRequest struct {
+	// Indicates whether to mute or unmute the end user. This action prevents the user from talking.
+	Muted *bool
+	// Indicates whether to deaf or undeaf the end user. This action prevents the user from hearing the call.
+	Deaf *bool
+}
+
+// NewUpdateRequest instantiates a new UpdateRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewUpdateRequest() *UpdateRequest {
+	this := UpdateRequest{}
+	return &this
+}
+
+// NewUpdateRequestWithDefaults instantiates a new UpdateRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewUpdateRequestWithDefaults() *UpdateRequest {
+	this := UpdateRequest{}
+
+	return &this
+}
+
+// GetMuted returns the Muted field value if set, zero value otherwise.
+func (o *UpdateRequest) GetMuted() bool {
+	if o == nil || IsNil(o.Muted) {
+		var ret bool
+		return ret
+	}
+	return *o.Muted
+}
+
+// GetMutedOk returns a tuple with the Muted field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateRequest) GetMutedOk() (*bool, bool) {
+	if o == nil || IsNil(o.Muted) {
+		return nil, false
+	}
+	return o.Muted, true
+}
+
+// HasMuted returns a boolean if a field has been set.
+func (o *UpdateRequest) HasMuted() bool {
+	if o != nil && !IsNil(o.Muted) {
+		return true
+	}
+
+	return false
+}
+
+// SetMuted gets a reference to the given bool and assigns it to the Muted field.
+func (o *UpdateRequest) SetMuted(v bool) {
+	o.Muted = &v
+}
+
+// GetDeaf returns the Deaf field value if set, zero value otherwise.
+func (o *UpdateRequest) GetDeaf() bool {
+	if o == nil || IsNil(o.Deaf) {
+		var ret bool
+		return ret
+	}
+	return *o.Deaf
+}
+
+// GetDeafOk returns a tuple with the Deaf field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateRequest) GetDeafOk() (*bool, bool) {
+	if o == nil || IsNil(o.Deaf) {
+		return nil, false
+	}
+	return o.Deaf, true
+}
+
+// HasDeaf returns a boolean if a field has been set.
+func (o *UpdateRequest) HasDeaf() bool {
+	if o != nil && !IsNil(o.Deaf) {
+		return true
+	}
+
+	return false
+}
+
+// SetDeaf gets a reference to the given bool and assigns it to the Deaf field.
+func (o *UpdateRequest) SetDeaf(v bool) {
+	o.Deaf = &v
+}
+
+func (o UpdateRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o UpdateRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Muted) {
+		toSerialize["muted"] = o.Muted
+	}
+	if !IsNil(o.Deaf) {
+		toSerialize["deaf"] = o.Deaf
+	}
+	return toSerialize, nil
+}
+
+type NullableUpdateRequest struct {
+	value *UpdateRequest
+	isSet bool
+}
+
+func (v NullableUpdateRequest) Get() *UpdateRequest {
+	return v.value
+}
+
+func (v *NullableUpdateRequest) Set(val *UpdateRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableUpdateRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableUpdateRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableUpdateRequest(val *UpdateRequest) *NullableUpdateRequest {
+	return &NullableUpdateRequest{value: val, isSet: true}
+}
+
+func (v NullableUpdateRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableUpdateRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/update_scenario_request.go b/pkg/infobip/models/voice/update_scenario_request.go
new file mode 100644
index 0000000..5ea0b17
--- /dev/null
+++ b/pkg/infobip/models/voice/update_scenario_request.go
@@ -0,0 +1,187 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the UpdateScenarioRequest type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &UpdateScenarioRequest{}
+
+// UpdateScenarioRequest struct for UpdateScenarioRequest
+type UpdateScenarioRequest struct {
+	// The name of IVR scenario.
+	Name string
+	// Description of IVR scenario.
+	Description *string
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Script []ScriptInner
+}
+
+type _UpdateScenarioRequest UpdateScenarioRequest
+
+// NewUpdateScenarioRequest instantiates a new UpdateScenarioRequest object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewUpdateScenarioRequest(name string, script []ScriptInner) *UpdateScenarioRequest {
+	this := UpdateScenarioRequest{}
+	this.Name = name
+	this.Script = script
+	return &this
+}
+
+// NewUpdateScenarioRequestWithDefaults instantiates a new UpdateScenarioRequest object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewUpdateScenarioRequestWithDefaults() *UpdateScenarioRequest {
+	this := UpdateScenarioRequest{}
+
+	return &this
+}
+
+// GetName returns the Name field value
+func (o *UpdateScenarioRequest) GetName() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioRequest) GetNameOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Name, true
+}
+
+// SetName sets field value
+func (o *UpdateScenarioRequest) SetName(v string) {
+	o.Name = v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *UpdateScenarioRequest) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioRequest) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *UpdateScenarioRequest) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *UpdateScenarioRequest) SetDescription(v string) {
+	o.Description = &v
+}
+
+// GetScript returns the Script field value
+func (o *UpdateScenarioRequest) GetScript() []ScriptInner {
+	if o == nil {
+		var ret []ScriptInner
+		return ret
+	}
+
+	return o.Script
+}
+
+// GetScriptOk returns a tuple with the Script field value
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioRequest) GetScriptOk() ([]ScriptInner, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Script, true
+}
+
+// SetScript sets field value
+func (o *UpdateScenarioRequest) SetScript(v []ScriptInner) {
+	o.Script = v
+}
+
+func (o UpdateScenarioRequest) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o UpdateScenarioRequest) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["name"] = o.Name
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	toSerialize["script"] = o.Script
+	return toSerialize, nil
+}
+
+type NullableUpdateScenarioRequest struct {
+	value *UpdateScenarioRequest
+	isSet bool
+}
+
+func (v NullableUpdateScenarioRequest) Get() *UpdateScenarioRequest {
+	return v.value
+}
+
+func (v *NullableUpdateScenarioRequest) Set(val *UpdateScenarioRequest) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableUpdateScenarioRequest) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableUpdateScenarioRequest) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableUpdateScenarioRequest(val *UpdateScenarioRequest) *NullableUpdateScenarioRequest {
+	return &NullableUpdateScenarioRequest{value: val, isSet: true}
+}
+
+func (v NullableUpdateScenarioRequest) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableUpdateScenarioRequest) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/update_scenario_response.go b/pkg/infobip/models/voice/update_scenario_response.go
new file mode 100644
index 0000000..61196ce
--- /dev/null
+++ b/pkg/infobip/models/voice/update_scenario_response.go
@@ -0,0 +1,351 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the UpdateScenarioResponse type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &UpdateScenarioResponse{}
+
+// UpdateScenarioResponse struct for UpdateScenarioResponse
+type UpdateScenarioResponse struct {
+	// Creation timestamp.
+	CreateTime *Time
+	// Scenario description.
+	Description *string
+	// Scenario key. It is used for launching IVR scenario.
+	Id *string
+	// Scenario name.
+	Name *string
+	// Array of IVR actions defining scenario. NOTE: Answering Machine Detection, Call Recording and Speech Recognition (used for Capture action) are add-on features. To enable these add-ons, please contact our [sales](https://www.infobip.com/contact) organisation.
+	Script []ScriptInner
+	// Update timestamp.
+	UpdateTime *Time
+	// Last usage date. `null` for scenarios that are used last time before `2024-01-01`.
+	LastUsageDate *Time
+}
+
+// NewUpdateScenarioResponse instantiates a new UpdateScenarioResponse object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewUpdateScenarioResponse() *UpdateScenarioResponse {
+	this := UpdateScenarioResponse{}
+	return &this
+}
+
+// NewUpdateScenarioResponseWithDefaults instantiates a new UpdateScenarioResponse object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewUpdateScenarioResponseWithDefaults() *UpdateScenarioResponse {
+	this := UpdateScenarioResponse{}
+
+	return &this
+}
+
+// GetCreateTime returns the CreateTime field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetCreateTime() Time {
+	if o == nil || IsNil(o.CreateTime) {
+		var ret Time
+		return ret
+	}
+	return *o.CreateTime
+}
+
+// GetCreateTimeOk returns a tuple with the CreateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetCreateTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.CreateTime) {
+		return nil, false
+	}
+	return o.CreateTime, true
+}
+
+// HasCreateTime returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasCreateTime() bool {
+	if o != nil && !IsNil(o.CreateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetCreateTime gets a reference to the given Time and assigns it to the CreateTime field.
+func (o *UpdateScenarioResponse) SetCreateTime(v Time) {
+	o.CreateTime = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *UpdateScenarioResponse) SetDescription(v string) {
+	o.Description = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetId() string {
+	if o == nil || IsNil(o.Id) {
+		var ret string
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetIdOk() (*string, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given string and assigns it to the Id field.
+func (o *UpdateScenarioResponse) SetId(v string) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *UpdateScenarioResponse) SetName(v string) {
+	o.Name = &v
+}
+
+// GetScript returns the Script field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetScript() []ScriptInner {
+	if o == nil || IsNil(o.Script) {
+		var ret []ScriptInner
+		return ret
+	}
+	return o.Script
+}
+
+// GetScriptOk returns a tuple with the Script field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetScriptOk() ([]ScriptInner, bool) {
+	if o == nil || IsNil(o.Script) {
+		return nil, false
+	}
+	return o.Script, true
+}
+
+// HasScript returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasScript() bool {
+	if o != nil && !IsNil(o.Script) {
+		return true
+	}
+
+	return false
+}
+
+// SetScript gets a reference to the given []ScriptInner and assigns it to the Script field.
+func (o *UpdateScenarioResponse) SetScript(v []ScriptInner) {
+	o.Script = v
+}
+
+// GetUpdateTime returns the UpdateTime field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetUpdateTime() Time {
+	if o == nil || IsNil(o.UpdateTime) {
+		var ret Time
+		return ret
+	}
+	return *o.UpdateTime
+}
+
+// GetUpdateTimeOk returns a tuple with the UpdateTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetUpdateTimeOk() (*Time, bool) {
+	if o == nil || IsNil(o.UpdateTime) {
+		return nil, false
+	}
+	return o.UpdateTime, true
+}
+
+// HasUpdateTime returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasUpdateTime() bool {
+	if o != nil && !IsNil(o.UpdateTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetUpdateTime gets a reference to the given Time and assigns it to the UpdateTime field.
+func (o *UpdateScenarioResponse) SetUpdateTime(v Time) {
+	o.UpdateTime = &v
+}
+
+// GetLastUsageDate returns the LastUsageDate field value if set, zero value otherwise.
+func (o *UpdateScenarioResponse) GetLastUsageDate() Time {
+	if o == nil || IsNil(o.LastUsageDate) {
+		var ret Time
+		return ret
+	}
+	return *o.LastUsageDate
+}
+
+// GetLastUsageDateOk returns a tuple with the LastUsageDate field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UpdateScenarioResponse) GetLastUsageDateOk() (*Time, bool) {
+	if o == nil || IsNil(o.LastUsageDate) {
+		return nil, false
+	}
+	return o.LastUsageDate, true
+}
+
+// HasLastUsageDate returns a boolean if a field has been set.
+func (o *UpdateScenarioResponse) HasLastUsageDate() bool {
+	if o != nil && !IsNil(o.LastUsageDate) {
+		return true
+	}
+
+	return false
+}
+
+// SetLastUsageDate gets a reference to the given Time and assigns it to the LastUsageDate field.
+func (o *UpdateScenarioResponse) SetLastUsageDate(v Time) {
+	o.LastUsageDate = &v
+}
+
+func (o UpdateScenarioResponse) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o UpdateScenarioResponse) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.CreateTime) {
+		toSerialize["createTime"] = o.CreateTime
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Script) {
+		toSerialize["script"] = o.Script
+	}
+	if !IsNil(o.UpdateTime) {
+		toSerialize["updateTime"] = o.UpdateTime
+	}
+	if !IsNil(o.LastUsageDate) {
+		toSerialize["lastUsageDate"] = o.LastUsageDate
+	}
+	return toSerialize, nil
+}
+
+type NullableUpdateScenarioResponse struct {
+	value *UpdateScenarioResponse
+	isSet bool
+}
+
+func (v NullableUpdateScenarioResponse) Get() *UpdateScenarioResponse {
+	return v.value
+}
+
+func (v *NullableUpdateScenarioResponse) Set(val *UpdateScenarioResponse) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableUpdateScenarioResponse) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableUpdateScenarioResponse) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableUpdateScenarioResponse(val *UpdateScenarioResponse) *NullableUpdateScenarioResponse {
+	return &NullableUpdateScenarioResponse{value: val, isSet: true}
+}
+
+func (v NullableUpdateScenarioResponse) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableUpdateScenarioResponse) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/url_play_content.go b/pkg/infobip/models/voice/url_play_content.go
new file mode 100644
index 0000000..8f7496b
--- /dev/null
+++ b/pkg/infobip/models/voice/url_play_content.go
@@ -0,0 +1,161 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the UrlPlayContent type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &UrlPlayContent{}
+
+// UrlPlayContent struct for UrlPlayContent
+type UrlPlayContent struct {
+	Type          PlayContentType
+	FileUrl       string
+	CacheDuration *int32
+}
+
+type _UrlPlayContent UrlPlayContent
+
+// NewUrlPlayContent instantiates a new UrlPlayContent object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewUrlPlayContent(fileUrl string) *UrlPlayContent {
+	this := UrlPlayContent{}
+	this.Type = "URL"
+	this.FileUrl = fileUrl
+	return &this
+}
+
+// NewUrlPlayContentWithDefaults instantiates a new UrlPlayContent object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewUrlPlayContentWithDefaults() *UrlPlayContent {
+	this := UrlPlayContent{}
+	this.Type = "URL"
+	return &this
+}
+
+// GetFileUrl returns the FileUrl field value
+func (o *UrlPlayContent) GetFileUrl() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.FileUrl
+}
+
+// GetFileUrlOk returns a tuple with the FileUrl field value
+// and a boolean to check if the value has been set.
+func (o *UrlPlayContent) GetFileUrlOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.FileUrl, true
+}
+
+// SetFileUrl sets field value
+func (o *UrlPlayContent) SetFileUrl(v string) {
+	o.FileUrl = v
+}
+
+// GetCacheDuration returns the CacheDuration field value if set, zero value otherwise.
+func (o *UrlPlayContent) GetCacheDuration() int32 {
+	if o == nil || IsNil(o.CacheDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.CacheDuration
+}
+
+// GetCacheDurationOk returns a tuple with the CacheDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *UrlPlayContent) GetCacheDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.CacheDuration) {
+		return nil, false
+	}
+	return o.CacheDuration, true
+}
+
+// HasCacheDuration returns a boolean if a field has been set.
+func (o *UrlPlayContent) HasCacheDuration() bool {
+	if o != nil && !IsNil(o.CacheDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetCacheDuration gets a reference to the given int32 and assigns it to the CacheDuration field.
+func (o *UrlPlayContent) SetCacheDuration(v int32) {
+	o.CacheDuration = &v
+}
+
+func (o UrlPlayContent) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o UrlPlayContent) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["fileUrl"] = o.FileUrl
+	if !IsNil(o.CacheDuration) {
+		toSerialize["cacheDuration"] = o.CacheDuration
+	}
+	return toSerialize, nil
+}
+
+type NullableUrlPlayContent struct {
+	value *UrlPlayContent
+	isSet bool
+}
+
+func (v NullableUrlPlayContent) Get() *UrlPlayContent {
+	return v.value
+}
+
+func (v *NullableUrlPlayContent) Set(val *UrlPlayContent) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableUrlPlayContent) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableUrlPlayContent) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableUrlPlayContent(val *UrlPlayContent) *NullableUrlPlayContent {
+	return &NullableUrlPlayContent{value: val, isSet: true}
+}
+
+func (v NullableUrlPlayContent) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableUrlPlayContent) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/viber_endpoint.go b/pkg/infobip/models/voice/viber_endpoint.go
new file mode 100644
index 0000000..0ee068f
--- /dev/null
+++ b/pkg/infobip/models/voice/viber_endpoint.go
@@ -0,0 +1,126 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the ViberEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &ViberEndpoint{}
+
+// ViberEndpoint struct for ViberEndpoint
+type ViberEndpoint struct {
+	Type CallEndpointType
+	// Phone number in the [E.164](https://en.wikipedia.org/wiki/E.164) format.
+	PhoneNumber string
+}
+
+type _ViberEndpoint ViberEndpoint
+
+// NewViberEndpoint instantiates a new ViberEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewViberEndpoint(phoneNumber string) *ViberEndpoint {
+	this := ViberEndpoint{}
+	this.Type = "VIBER"
+	this.PhoneNumber = phoneNumber
+	return &this
+}
+
+// NewViberEndpointWithDefaults instantiates a new ViberEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewViberEndpointWithDefaults() *ViberEndpoint {
+	this := ViberEndpoint{}
+	this.Type = "VIBER"
+	return &this
+}
+
+// GetPhoneNumber returns the PhoneNumber field value
+func (o *ViberEndpoint) GetPhoneNumber() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.PhoneNumber
+}
+
+// GetPhoneNumberOk returns a tuple with the PhoneNumber field value
+// and a boolean to check if the value has been set.
+func (o *ViberEndpoint) GetPhoneNumberOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.PhoneNumber, true
+}
+
+// SetPhoneNumber sets field value
+func (o *ViberEndpoint) SetPhoneNumber(v string) {
+	o.PhoneNumber = v
+}
+
+func (o ViberEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o ViberEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["phoneNumber"] = o.PhoneNumber
+	return toSerialize, nil
+}
+
+type NullableViberEndpoint struct {
+	value *ViberEndpoint
+	isSet bool
+}
+
+func (v NullableViberEndpoint) Get() *ViberEndpoint {
+	return v.value
+}
+
+func (v *NullableViberEndpoint) Set(val *ViberEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableViberEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableViberEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableViberEndpoint(val *ViberEndpoint) *NullableViberEndpoint {
+	return &NullableViberEndpoint{value: val, isSet: true}
+}
+
+func (v NullableViberEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableViberEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/video_media_properties.go b/pkg/infobip/models/voice/video_media_properties.go
new file mode 100644
index 0000000..ea7c3e6
--- /dev/null
+++ b/pkg/infobip/models/voice/video_media_properties.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the VideoMediaProperties type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &VideoMediaProperties{}
+
+// VideoMediaProperties Video media properties.
+type VideoMediaProperties struct {
+	// Indicates whether there is a video feed.
+	Camera *bool
+	// Indicates whether the end user is sharing their screen.
+	ScreenShare *bool
+}
+
+// NewVideoMediaProperties instantiates a new VideoMediaProperties object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVideoMediaProperties() *VideoMediaProperties {
+	this := VideoMediaProperties{}
+	return &this
+}
+
+// NewVideoMediaPropertiesWithDefaults instantiates a new VideoMediaProperties object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVideoMediaPropertiesWithDefaults() *VideoMediaProperties {
+	this := VideoMediaProperties{}
+
+	return &this
+}
+
+// GetCamera returns the Camera field value if set, zero value otherwise.
+func (o *VideoMediaProperties) GetCamera() bool {
+	if o == nil || IsNil(o.Camera) {
+		var ret bool
+		return ret
+	}
+	return *o.Camera
+}
+
+// GetCameraOk returns a tuple with the Camera field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VideoMediaProperties) GetCameraOk() (*bool, bool) {
+	if o == nil || IsNil(o.Camera) {
+		return nil, false
+	}
+	return o.Camera, true
+}
+
+// HasCamera returns a boolean if a field has been set.
+func (o *VideoMediaProperties) HasCamera() bool {
+	if o != nil && !IsNil(o.Camera) {
+		return true
+	}
+
+	return false
+}
+
+// SetCamera gets a reference to the given bool and assigns it to the Camera field.
+func (o *VideoMediaProperties) SetCamera(v bool) {
+	o.Camera = &v
+}
+
+// GetScreenShare returns the ScreenShare field value if set, zero value otherwise.
+func (o *VideoMediaProperties) GetScreenShare() bool {
+	if o == nil || IsNil(o.ScreenShare) {
+		var ret bool
+		return ret
+	}
+	return *o.ScreenShare
+}
+
+// GetScreenShareOk returns a tuple with the ScreenShare field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VideoMediaProperties) GetScreenShareOk() (*bool, bool) {
+	if o == nil || IsNil(o.ScreenShare) {
+		return nil, false
+	}
+	return o.ScreenShare, true
+}
+
+// HasScreenShare returns a boolean if a field has been set.
+func (o *VideoMediaProperties) HasScreenShare() bool {
+	if o != nil && !IsNil(o.ScreenShare) {
+		return true
+	}
+
+	return false
+}
+
+// SetScreenShare gets a reference to the given bool and assigns it to the ScreenShare field.
+func (o *VideoMediaProperties) SetScreenShare(v bool) {
+	o.ScreenShare = &v
+}
+
+func (o VideoMediaProperties) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o VideoMediaProperties) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Camera) {
+		toSerialize["camera"] = o.Camera
+	}
+	if !IsNil(o.ScreenShare) {
+		toSerialize["screenShare"] = o.ScreenShare
+	}
+	return toSerialize, nil
+}
+
+type NullableVideoMediaProperties struct {
+	value *VideoMediaProperties
+	isSet bool
+}
+
+func (v NullableVideoMediaProperties) Get() *VideoMediaProperties {
+	return v.value
+}
+
+func (v *NullableVideoMediaProperties) Set(val *VideoMediaProperties) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVideoMediaProperties) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVideoMediaProperties) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVideoMediaProperties(val *VideoMediaProperties) *NullableVideoMediaProperties {
+	return &NullableVideoMediaProperties{value: val, isSet: true}
+}
+
+func (v NullableVideoMediaProperties) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVideoMediaProperties) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice.go b/pkg/infobip/models/voice/voice.go
new file mode 100644
index 0000000..995fc8e
--- /dev/null
+++ b/pkg/infobip/models/voice/voice.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the Voice type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &Voice{}
+
+// Voice Used to define voice in which text would be synthesized. It has two parameters: _name_ and _gender_. When only _name_ is provided, then that exact voice with that name will be used to synthesize text. If only _gender_ is provided, then text is synthesized with first voice in given gender. If voice is not set, then default voice is used.
+type Voice struct {
+	// Gender of the voice. Can be `male` or `female`.
+	Gender *string
+	// Name of the voice. Example: `Joanna`
+	Name *string
+}
+
+// NewVoice instantiates a new Voice object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVoice() *Voice {
+	this := Voice{}
+	return &this
+}
+
+// NewVoiceWithDefaults instantiates a new Voice object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVoiceWithDefaults() *Voice {
+	this := Voice{}
+
+	return &this
+}
+
+// GetGender returns the Gender field value if set, zero value otherwise.
+func (o *Voice) GetGender() string {
+	if o == nil || IsNil(o.Gender) {
+		var ret string
+		return ret
+	}
+	return *o.Gender
+}
+
+// GetGenderOk returns a tuple with the Gender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Voice) GetGenderOk() (*string, bool) {
+	if o == nil || IsNil(o.Gender) {
+		return nil, false
+	}
+	return o.Gender, true
+}
+
+// HasGender returns a boolean if a field has been set.
+func (o *Voice) HasGender() bool {
+	if o != nil && !IsNil(o.Gender) {
+		return true
+	}
+
+	return false
+}
+
+// SetGender gets a reference to the given string and assigns it to the Gender field.
+func (o *Voice) SetGender(v string) {
+	o.Gender = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *Voice) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *Voice) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *Voice) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *Voice) SetName(v string) {
+	o.Name = &v
+}
+
+func (o Voice) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o Voice) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Gender) {
+		toSerialize["gender"] = o.Gender
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	return toSerialize, nil
+}
+
+type NullableVoice struct {
+	value *Voice
+	isSet bool
+}
+
+func (v NullableVoice) Get() *Voice {
+	return v.value
+}
+
+func (v *NullableVoice) Set(val *Voice) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoice) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoice) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoice(val *Voice) *NullableVoice {
+	return &NullableVoice{value: val, isSet: true}
+}
+
+func (v NullableVoice) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoice) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice_data.go b/pkg/infobip/models/voice/voice_data.go
new file mode 100644
index 0000000..3fa79b1
--- /dev/null
+++ b/pkg/infobip/models/voice/voice_data.go
@@ -0,0 +1,424 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the VoiceData type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &VoiceData{}
+
+// VoiceData Fields representing details specific for voice messages.
+type VoiceData struct {
+	// Name of the Infobip Voice service or feature.
+	Feature *string
+	// Date and time when the voice message was established and started ringing. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSSZ.
+	StartTime *string
+	// Date and time when the voice message was answered. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSSZ.
+	AnswerTime *string
+	// Date and time when the voice message was ended. Has the following format: yyyy-MM-dd'T'HH:mm:ss.SSSZ.
+	EndTime *string
+	// Duration of the voice message, in seconds.
+	Duration *int32
+	// Charged duration of the voice message, in seconds.
+	ChargedDuration *int32
+	// Duration of the voice message audio file, in seconds.
+	FileDuration *float64
+	// DTMF code entered by user. Can be empty string, if user did not press anything, or `null` in case of IVR if user did not participate in Collect action.
+	DtmfCodes *string
+	Ivr       *IvrData
+}
+
+// NewVoiceData instantiates a new VoiceData object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVoiceData() *VoiceData {
+	this := VoiceData{}
+	return &this
+}
+
+// NewVoiceDataWithDefaults instantiates a new VoiceData object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVoiceDataWithDefaults() *VoiceData {
+	this := VoiceData{}
+
+	return &this
+}
+
+// GetFeature returns the Feature field value if set, zero value otherwise.
+func (o *VoiceData) GetFeature() string {
+	if o == nil || IsNil(o.Feature) {
+		var ret string
+		return ret
+	}
+	return *o.Feature
+}
+
+// GetFeatureOk returns a tuple with the Feature field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetFeatureOk() (*string, bool) {
+	if o == nil || IsNil(o.Feature) {
+		return nil, false
+	}
+	return o.Feature, true
+}
+
+// HasFeature returns a boolean if a field has been set.
+func (o *VoiceData) HasFeature() bool {
+	if o != nil && !IsNil(o.Feature) {
+		return true
+	}
+
+	return false
+}
+
+// SetFeature gets a reference to the given string and assigns it to the Feature field.
+func (o *VoiceData) SetFeature(v string) {
+	o.Feature = &v
+}
+
+// GetStartTime returns the StartTime field value if set, zero value otherwise.
+func (o *VoiceData) GetStartTime() string {
+	if o == nil || IsNil(o.StartTime) {
+		var ret string
+		return ret
+	}
+	return *o.StartTime
+}
+
+// GetStartTimeOk returns a tuple with the StartTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetStartTimeOk() (*string, bool) {
+	if o == nil || IsNil(o.StartTime) {
+		return nil, false
+	}
+	return o.StartTime, true
+}
+
+// HasStartTime returns a boolean if a field has been set.
+func (o *VoiceData) HasStartTime() bool {
+	if o != nil && !IsNil(o.StartTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetStartTime gets a reference to the given string and assigns it to the StartTime field.
+func (o *VoiceData) SetStartTime(v string) {
+	o.StartTime = &v
+}
+
+// GetAnswerTime returns the AnswerTime field value if set, zero value otherwise.
+func (o *VoiceData) GetAnswerTime() string {
+	if o == nil || IsNil(o.AnswerTime) {
+		var ret string
+		return ret
+	}
+	return *o.AnswerTime
+}
+
+// GetAnswerTimeOk returns a tuple with the AnswerTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetAnswerTimeOk() (*string, bool) {
+	if o == nil || IsNil(o.AnswerTime) {
+		return nil, false
+	}
+	return o.AnswerTime, true
+}
+
+// HasAnswerTime returns a boolean if a field has been set.
+func (o *VoiceData) HasAnswerTime() bool {
+	if o != nil && !IsNil(o.AnswerTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetAnswerTime gets a reference to the given string and assigns it to the AnswerTime field.
+func (o *VoiceData) SetAnswerTime(v string) {
+	o.AnswerTime = &v
+}
+
+// GetEndTime returns the EndTime field value if set, zero value otherwise.
+func (o *VoiceData) GetEndTime() string {
+	if o == nil || IsNil(o.EndTime) {
+		var ret string
+		return ret
+	}
+	return *o.EndTime
+}
+
+// GetEndTimeOk returns a tuple with the EndTime field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetEndTimeOk() (*string, bool) {
+	if o == nil || IsNil(o.EndTime) {
+		return nil, false
+	}
+	return o.EndTime, true
+}
+
+// HasEndTime returns a boolean if a field has been set.
+func (o *VoiceData) HasEndTime() bool {
+	if o != nil && !IsNil(o.EndTime) {
+		return true
+	}
+
+	return false
+}
+
+// SetEndTime gets a reference to the given string and assigns it to the EndTime field.
+func (o *VoiceData) SetEndTime(v string) {
+	o.EndTime = &v
+}
+
+// GetDuration returns the Duration field value if set, zero value otherwise.
+func (o *VoiceData) GetDuration() int32 {
+	if o == nil || IsNil(o.Duration) {
+		var ret int32
+		return ret
+	}
+	return *o.Duration
+}
+
+// GetDurationOk returns a tuple with the Duration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.Duration) {
+		return nil, false
+	}
+	return o.Duration, true
+}
+
+// HasDuration returns a boolean if a field has been set.
+func (o *VoiceData) HasDuration() bool {
+	if o != nil && !IsNil(o.Duration) {
+		return true
+	}
+
+	return false
+}
+
+// SetDuration gets a reference to the given int32 and assigns it to the Duration field.
+func (o *VoiceData) SetDuration(v int32) {
+	o.Duration = &v
+}
+
+// GetChargedDuration returns the ChargedDuration field value if set, zero value otherwise.
+func (o *VoiceData) GetChargedDuration() int32 {
+	if o == nil || IsNil(o.ChargedDuration) {
+		var ret int32
+		return ret
+	}
+	return *o.ChargedDuration
+}
+
+// GetChargedDurationOk returns a tuple with the ChargedDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetChargedDurationOk() (*int32, bool) {
+	if o == nil || IsNil(o.ChargedDuration) {
+		return nil, false
+	}
+	return o.ChargedDuration, true
+}
+
+// HasChargedDuration returns a boolean if a field has been set.
+func (o *VoiceData) HasChargedDuration() bool {
+	if o != nil && !IsNil(o.ChargedDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetChargedDuration gets a reference to the given int32 and assigns it to the ChargedDuration field.
+func (o *VoiceData) SetChargedDuration(v int32) {
+	o.ChargedDuration = &v
+}
+
+// GetFileDuration returns the FileDuration field value if set, zero value otherwise.
+func (o *VoiceData) GetFileDuration() float64 {
+	if o == nil || IsNil(o.FileDuration) {
+		var ret float64
+		return ret
+	}
+	return *o.FileDuration
+}
+
+// GetFileDurationOk returns a tuple with the FileDuration field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetFileDurationOk() (*float64, bool) {
+	if o == nil || IsNil(o.FileDuration) {
+		return nil, false
+	}
+	return o.FileDuration, true
+}
+
+// HasFileDuration returns a boolean if a field has been set.
+func (o *VoiceData) HasFileDuration() bool {
+	if o != nil && !IsNil(o.FileDuration) {
+		return true
+	}
+
+	return false
+}
+
+// SetFileDuration gets a reference to the given float64 and assigns it to the FileDuration field.
+func (o *VoiceData) SetFileDuration(v float64) {
+	o.FileDuration = &v
+}
+
+// GetDtmfCodes returns the DtmfCodes field value if set, zero value otherwise.
+func (o *VoiceData) GetDtmfCodes() string {
+	if o == nil || IsNil(o.DtmfCodes) {
+		var ret string
+		return ret
+	}
+	return *o.DtmfCodes
+}
+
+// GetDtmfCodesOk returns a tuple with the DtmfCodes field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetDtmfCodesOk() (*string, bool) {
+	if o == nil || IsNil(o.DtmfCodes) {
+		return nil, false
+	}
+	return o.DtmfCodes, true
+}
+
+// HasDtmfCodes returns a boolean if a field has been set.
+func (o *VoiceData) HasDtmfCodes() bool {
+	if o != nil && !IsNil(o.DtmfCodes) {
+		return true
+	}
+
+	return false
+}
+
+// SetDtmfCodes gets a reference to the given string and assigns it to the DtmfCodes field.
+func (o *VoiceData) SetDtmfCodes(v string) {
+	o.DtmfCodes = &v
+}
+
+// GetIvr returns the Ivr field value if set, zero value otherwise.
+func (o *VoiceData) GetIvr() IvrData {
+	if o == nil || IsNil(o.Ivr) {
+		var ret IvrData
+		return ret
+	}
+	return *o.Ivr
+}
+
+// GetIvrOk returns a tuple with the Ivr field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceData) GetIvrOk() (*IvrData, bool) {
+	if o == nil || IsNil(o.Ivr) {
+		return nil, false
+	}
+	return o.Ivr, true
+}
+
+// HasIvr returns a boolean if a field has been set.
+func (o *VoiceData) HasIvr() bool {
+	if o != nil && !IsNil(o.Ivr) {
+		return true
+	}
+
+	return false
+}
+
+// SetIvr gets a reference to the given IvrData and assigns it to the Ivr field.
+func (o *VoiceData) SetIvr(v IvrData) {
+	o.Ivr = &v
+}
+
+func (o VoiceData) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o VoiceData) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Feature) {
+		toSerialize["feature"] = o.Feature
+	}
+	if !IsNil(o.StartTime) {
+		toSerialize["startTime"] = o.StartTime
+	}
+	if !IsNil(o.AnswerTime) {
+		toSerialize["answerTime"] = o.AnswerTime
+	}
+	if !IsNil(o.EndTime) {
+		toSerialize["endTime"] = o.EndTime
+	}
+	if !IsNil(o.Duration) {
+		toSerialize["duration"] = o.Duration
+	}
+	if !IsNil(o.ChargedDuration) {
+		toSerialize["chargedDuration"] = o.ChargedDuration
+	}
+	if !IsNil(o.FileDuration) {
+		toSerialize["fileDuration"] = o.FileDuration
+	}
+	if !IsNil(o.DtmfCodes) {
+		toSerialize["dtmfCodes"] = o.DtmfCodes
+	}
+	if !IsNil(o.Ivr) {
+		toSerialize["ivr"] = o.Ivr
+	}
+	return toSerialize, nil
+}
+
+type NullableVoiceData struct {
+	value *VoiceData
+	isSet bool
+}
+
+func (v NullableVoiceData) Get() *VoiceData {
+	return v.value
+}
+
+func (v *NullableVoiceData) Set(val *VoiceData) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoiceData) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoiceData) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoiceData(val *VoiceData) *NullableVoiceData {
+	return &NullableVoiceData{value: val, isSet: true}
+}
+
+func (v NullableVoiceData) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoiceData) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice_error.go b/pkg/infobip/models/voice/voice_error.go
new file mode 100644
index 0000000..5b35086
--- /dev/null
+++ b/pkg/infobip/models/voice/voice_error.go
@@ -0,0 +1,314 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the VoiceError type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &VoiceError{}
+
+// VoiceError Indicates whether the error occurred during the query execution.
+type VoiceError struct {
+	// Error group ID.
+	GroupId *int32
+	// Error group name.
+	GroupName *string
+	// Error ID.
+	Id *int32
+	// Error name.
+	Name *string
+	// Human-readable description of the error.
+	Description *string
+	// Tells if the error is permanent.
+	Permanent *bool
+}
+
+// NewVoiceError instantiates a new VoiceError object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVoiceError() *VoiceError {
+	this := VoiceError{}
+	return &this
+}
+
+// NewVoiceErrorWithDefaults instantiates a new VoiceError object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVoiceErrorWithDefaults() *VoiceError {
+	this := VoiceError{}
+
+	return &this
+}
+
+// GetGroupId returns the GroupId field value if set, zero value otherwise.
+func (o *VoiceError) GetGroupId() int32 {
+	if o == nil || IsNil(o.GroupId) {
+		var ret int32
+		return ret
+	}
+	return *o.GroupId
+}
+
+// GetGroupIdOk returns a tuple with the GroupId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceError) GetGroupIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.GroupId) {
+		return nil, false
+	}
+	return o.GroupId, true
+}
+
+// HasGroupId returns a boolean if a field has been set.
+func (o *VoiceError) HasGroupId() bool {
+	if o != nil && !IsNil(o.GroupId) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupId gets a reference to the given int32 and assigns it to the GroupId field.
+func (o *VoiceError) SetGroupId(v int32) {
+	o.GroupId = &v
+}
+
+// GetGroupName returns the GroupName field value if set, zero value otherwise.
+func (o *VoiceError) GetGroupName() string {
+	if o == nil || IsNil(o.GroupName) {
+		var ret string
+		return ret
+	}
+	return *o.GroupName
+}
+
+// GetGroupNameOk returns a tuple with the GroupName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceError) GetGroupNameOk() (*string, bool) {
+	if o == nil || IsNil(o.GroupName) {
+		return nil, false
+	}
+	return o.GroupName, true
+}
+
+// HasGroupName returns a boolean if a field has been set.
+func (o *VoiceError) HasGroupName() bool {
+	if o != nil && !IsNil(o.GroupName) {
+		return true
+	}
+
+	return false
+}
+
+// SetGroupName gets a reference to the given string and assigns it to the GroupName field.
+func (o *VoiceError) SetGroupName(v string) {
+	o.GroupName = &v
+}
+
+// GetId returns the Id field value if set, zero value otherwise.
+func (o *VoiceError) GetId() int32 {
+	if o == nil || IsNil(o.Id) {
+		var ret int32
+		return ret
+	}
+	return *o.Id
+}
+
+// GetIdOk returns a tuple with the Id field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceError) GetIdOk() (*int32, bool) {
+	if o == nil || IsNil(o.Id) {
+		return nil, false
+	}
+	return o.Id, true
+}
+
+// HasId returns a boolean if a field has been set.
+func (o *VoiceError) HasId() bool {
+	if o != nil && !IsNil(o.Id) {
+		return true
+	}
+
+	return false
+}
+
+// SetId gets a reference to the given int32 and assigns it to the Id field.
+func (o *VoiceError) SetId(v int32) {
+	o.Id = &v
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *VoiceError) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceError) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *VoiceError) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *VoiceError) SetName(v string) {
+	o.Name = &v
+}
+
+// GetDescription returns the Description field value if set, zero value otherwise.
+func (o *VoiceError) GetDescription() string {
+	if o == nil || IsNil(o.Description) {
+		var ret string
+		return ret
+	}
+	return *o.Description
+}
+
+// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceError) GetDescriptionOk() (*string, bool) {
+	if o == nil || IsNil(o.Description) {
+		return nil, false
+	}
+	return o.Description, true
+}
+
+// HasDescription returns a boolean if a field has been set.
+func (o *VoiceError) HasDescription() bool {
+	if o != nil && !IsNil(o.Description) {
+		return true
+	}
+
+	return false
+}
+
+// SetDescription gets a reference to the given string and assigns it to the Description field.
+func (o *VoiceError) SetDescription(v string) {
+	o.Description = &v
+}
+
+// GetPermanent returns the Permanent field value if set, zero value otherwise.
+func (o *VoiceError) GetPermanent() bool {
+	if o == nil || IsNil(o.Permanent) {
+		var ret bool
+		return ret
+	}
+	return *o.Permanent
+}
+
+// GetPermanentOk returns a tuple with the Permanent field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceError) GetPermanentOk() (*bool, bool) {
+	if o == nil || IsNil(o.Permanent) {
+		return nil, false
+	}
+	return o.Permanent, true
+}
+
+// HasPermanent returns a boolean if a field has been set.
+func (o *VoiceError) HasPermanent() bool {
+	if o != nil && !IsNil(o.Permanent) {
+		return true
+	}
+
+	return false
+}
+
+// SetPermanent gets a reference to the given bool and assigns it to the Permanent field.
+func (o *VoiceError) SetPermanent(v bool) {
+	o.Permanent = &v
+}
+
+func (o VoiceError) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o VoiceError) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.GroupId) {
+		toSerialize["groupId"] = o.GroupId
+	}
+	if !IsNil(o.GroupName) {
+		toSerialize["groupName"] = o.GroupName
+	}
+	if !IsNil(o.Id) {
+		toSerialize["id"] = o.Id
+	}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Description) {
+		toSerialize["description"] = o.Description
+	}
+	if !IsNil(o.Permanent) {
+		toSerialize["permanent"] = o.Permanent
+	}
+	return toSerialize, nil
+}
+
+type NullableVoiceError struct {
+	value *VoiceError
+	isSet bool
+}
+
+func (v NullableVoiceError) Get() *VoiceError {
+	return v.value
+}
+
+func (v *NullableVoiceError) Set(val *VoiceError) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoiceError) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoiceError) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoiceError(val *VoiceError) *NullableVoiceError {
+	return &NullableVoiceError{value: val, isSet: true}
+}
+
+func (v NullableVoiceError) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoiceError) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice_name.go b/pkg/infobip/models/voice/voice_name.go
new file mode 100644
index 0000000..21af9b4
--- /dev/null
+++ b/pkg/infobip/models/voice/voice_name.go
@@ -0,0 +1,934 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+	"fmt"
+)
+
+// VoiceName Voice name in which text would be synthesized. More info about available languages and voices can be found [here](https://www.infobip.com/docs/voice-and-video/getting-started#text-to-speech).
+type VoiceName string
+
+// List of VoiceName
+const (
+	VOICENAME_ZEINA               VoiceName = "Zeina"
+	VOICENAME_AISHA__BETA         VoiceName = "Aisha (beta)"
+	VOICENAME_FAROOQ__BETA        VoiceName = "Farooq (beta)"
+	VOICENAME_HUSSEIN__BETA       VoiceName = "Hussein (beta)"
+	VOICENAME_AMAL__BETA          VoiceName = "Amal (beta)"
+	VOICENAME_SAYAN__BETA         VoiceName = "Sayan (beta)"
+	VOICENAME_SUSHMITA__BETA      VoiceName = "Sushmita (beta)"
+	VOICENAME_DARINA              VoiceName = "Darina"
+	VOICENAME_CONCHITA            VoiceName = "Conchita"
+	VOICENAME_ZHIYU               VoiceName = "Zhiyu"
+	VOICENAME_LIU__BETA           VoiceName = "Liu (beta)"
+	VOICENAME_WANG__BETA          VoiceName = "Wang (beta)"
+	VOICENAME_ZHANG__BETA         VoiceName = "Zhang (beta)"
+	VOICENAME_LIN__BETA           VoiceName = "Lin (beta)"
+	VOICENAME_AKEMI__BETA         VoiceName = "Akemi (beta)"
+	VOICENAME_CHEN__BETA          VoiceName = "Chen (beta)"
+	VOICENAME_HUANG__BETA         VoiceName = "Huang (beta)"
+	VOICENAME_FANG                VoiceName = "Fang"
+	VOICENAME_CHAO                VoiceName = "Chao"
+	VOICENAME_MING                VoiceName = "Ming"
+	VOICENAME_ANETA               VoiceName = "Aneta"
+	VOICENAME_NAJA                VoiceName = "Naja"
+	VOICENAME_MADS                VoiceName = "Mads"
+	VOICENAME_RUBEN               VoiceName = "Ruben"
+	VOICENAME_LOTTE               VoiceName = "Lotte"
+	VOICENAME_JOANNA              VoiceName = "Joanna"
+	VOICENAME_IVY                 VoiceName = "Ivy"
+	VOICENAME_KENDRA              VoiceName = "Kendra"
+	VOICENAME_KIMBERLY            VoiceName = "Kimberly"
+	VOICENAME_SALLI               VoiceName = "Salli"
+	VOICENAME_JOEY                VoiceName = "Joey"
+	VOICENAME_JUSTIN              VoiceName = "Justin"
+	VOICENAME_MATTHEW             VoiceName = "Matthew"
+	VOICENAME_RUSSELL             VoiceName = "Russell"
+	VOICENAME_NICOLE              VoiceName = "Nicole"
+	VOICENAME_BRIAN               VoiceName = "Brian"
+	VOICENAME_AMY                 VoiceName = "Amy"
+	VOICENAME_EMMA                VoiceName = "Emma"
+	VOICENAME_ADITI               VoiceName = "Aditi"
+	VOICENAME_RAVEENA             VoiceName = "Raveena"
+	VOICENAME_GERAINT             VoiceName = "Geraint"
+	VOICENAME_EVELIN__BETA        VoiceName = "Evelin (beta)"
+	VOICENAME_CELINE              VoiceName = "Celine"
+	VOICENAME_LEA                 VoiceName = "Lea"
+	VOICENAME_MATHIEU             VoiceName = "Mathieu"
+	VOICENAME_CHANTAL             VoiceName = "Chantal"
+	VOICENAME_VICKI               VoiceName = "Vicki"
+	VOICENAME_HANS                VoiceName = "Hans"
+	VOICENAME_MARLENE             VoiceName = "Marlene"
+	VOICENAME_SOPHIA__BETA        VoiceName = "Sophia (beta)"
+	VOICENAME_DINESH__BETA        VoiceName = "Dinesh (beta)"
+	VOICENAME_LEELA__BETA         VoiceName = "Leela (beta)"
+	VOICENAME_ABIGAIL             VoiceName = "Abigail"
+	VOICENAME_MEIRA               VoiceName = "Meira"
+	VOICENAME_IDAN                VoiceName = "Idan"
+	VOICENAME_YOSEF               VoiceName = "Yosef"
+	VOICENAME_AADITA              VoiceName = "Aadita"
+	VOICENAME_AARUSHI__BETA       VoiceName = "Aarushi (beta)"
+	VOICENAME_AKASH__BETA         VoiceName = "Akash (beta)"
+	VOICENAME_DAMAN__BETA         VoiceName = "Daman (beta)"
+	VOICENAME_DIVYA__BETA         VoiceName = "Divya (beta)"
+	VOICENAME_AGOTA               VoiceName = "Agota"
+	VOICENAME_DORA                VoiceName = "Dora"
+	VOICENAME_KARL                VoiceName = "Karl"
+	VOICENAME_INDAH__BETA         VoiceName = "Indah (beta)"
+	VOICENAME_ARIF__BETA          VoiceName = "Arif (beta)"
+	VOICENAME_REZA__BETA          VoiceName = "Reza (beta)"
+	VOICENAME_NURUL__BETA         VoiceName = "Nurul (beta)"
+	VOICENAME_GIANNA__BETA        VoiceName = "Gianna (beta)"
+	VOICENAME_CARLA               VoiceName = "Carla"
+	VOICENAME_BIANCA              VoiceName = "Bianca"
+	VOICENAME_GIORGIO             VoiceName = "Giorgio"
+	VOICENAME_TAKUMI              VoiceName = "Takumi"
+	VOICENAME_MIZUKI              VoiceName = "Mizuki"
+	VOICENAME_SHASHANK__BETA      VoiceName = "Shashank (beta)"
+	VOICENAME_NAMRATHA__BETA      VoiceName = "Namratha (beta)"
+	VOICENAME_SEOYEON             VoiceName = "Seoyeon"
+	VOICENAME_SUMI__BETA          VoiceName = "Sumi (beta)"
+	VOICENAME_JINA__BETA          VoiceName = "Jina (beta)"
+	VOICENAME_HIMCHAN__BETA       VoiceName = "Himchan (beta)"
+	VOICENAME_MINHO__BETA         VoiceName = "Minho (beta)"
+	VOICENAME_AMEERA              VoiceName = "Ameera"
+	VOICENAME_NURIN               VoiceName = "Nurin"
+	VOICENAME_NIJAT               VoiceName = "Nijat"
+	VOICENAME_FUAAD               VoiceName = "Fuaad"
+	VOICENAME_VISHNU__BETA        VoiceName = "Vishnu (beta)"
+	VOICENAME_KIRTI__BETA         VoiceName = "Kirti (beta)"
+	VOICENAME_LIV                 VoiceName = "Liv"
+	VOICENAME_EWA                 VoiceName = "Ewa"
+	VOICENAME_MAJA                VoiceName = "Maja"
+	VOICENAME_JACEK               VoiceName = "Jacek"
+	VOICENAME_JAN                 VoiceName = "Jan"
+	VOICENAME_CRISTIANO           VoiceName = "Cristiano"
+	VOICENAME_INES                VoiceName = "Ines"
+	VOICENAME_ABRIELLE__BETA      VoiceName = "Abrielle (beta)"
+	VOICENAME_HENRIQUES__BETA     VoiceName = "Henriques (beta)"
+	VOICENAME_JERALDO__BETA       VoiceName = "Jeraldo (beta)"
+	VOICENAME_JACINDA__BETA       VoiceName = "Jacinda (beta)"
+	VOICENAME_CAMILA              VoiceName = "Camila"
+	VOICENAME_RICARDO             VoiceName = "Ricardo"
+	VOICENAME_VITORIA             VoiceName = "Vitoria"
+	VOICENAME_CARMEN              VoiceName = "Carmen"
+	VOICENAME_MAXIM               VoiceName = "Maxim"
+	VOICENAME_TATYANA             VoiceName = "Tatyana"
+	VOICENAME_NATALIA             VoiceName = "Natalia"
+	VOICENAME_MIGUEL              VoiceName = "Miguel"
+	VOICENAME_LINDA               VoiceName = "Linda"
+	VOICENAME_ENRIQUE             VoiceName = "Enrique"
+	VOICENAME_GABRIELA__BETA      VoiceName = "Gabriela (beta)"
+	VOICENAME_LUPE                VoiceName = "Lupe"
+	VOICENAME_PENELOPE            VoiceName = "Penelope"
+	VOICENAME_MIA                 VoiceName = "Mia"
+	VOICENAME_ASTRID              VoiceName = "Astrid"
+	VOICENAME_GANESH__BETA        VoiceName = "Ganesh (beta)"
+	VOICENAME_SHRUTI__BETA        VoiceName = "Shruti (beta)"
+	VOICENAME_VIJAY__BETA         VoiceName = "Vijay (beta)"
+	VOICENAME_SAMANTHA__BETA      VoiceName = "Samantha (beta)"
+	VOICENAME_NATCHAYA__BETA      VoiceName = "Natchaya (beta)"
+	VOICENAME_FILIZ               VoiceName = "Filiz"
+	VOICENAME_ULYANA              VoiceName = "Ulyana"
+	VOICENAME_LIEN__BETA          VoiceName = "Lien (beta)"
+	VOICENAME_QUAN__BETA          VoiceName = "Quan (beta)"
+	VOICENAME_MAI__BETA           VoiceName = "Mai (beta)"
+	VOICENAME_TUAN__BETA          VoiceName = "Tuan (beta)"
+	VOICENAME_GWYNETH             VoiceName = "Gwyneth"
+	VOICENAME_HAMED__NEURAL       VoiceName = "Hamed (neural)"
+	VOICENAME_SALMA__NEURAL       VoiceName = "Salma (neural)"
+	VOICENAME_SHAKIR__NEURAL      VoiceName = "Shakir (neural)"
+	VOICENAME_ZARIYAH__NEURAL     VoiceName = "Zariyah (neural)"
+	VOICENAME_BASHKAR__NEURAL     VoiceName = "Bashkar (neural)"
+	VOICENAME_TANISHAA__NEURAL    VoiceName = "Tanishaa (neural)"
+	VOICENAME_BORISLAV__NEURAL    VoiceName = "Borislav (neural)"
+	VOICENAME_KALINA__NEURAL      VoiceName = "Kalina (neural)"
+	VOICENAME_ALBA__NEURAL        VoiceName = "Alba (neural)"
+	VOICENAME_ENRIC__NEURAL       VoiceName = "Enric (neural)"
+	VOICENAME_JOANA__NEURAL       VoiceName = "Joana (neural)"
+	VOICENAME_XIAOCHEN__NEURAL    VoiceName = "Xiaochen (neural)"
+	VOICENAME_XIAOHAN__NEURAL     VoiceName = "Xiaohan (neural)"
+	VOICENAME_XIAOMENG__NEURAL    VoiceName = "Xiaomeng (neural)"
+	VOICENAME_XIAOMO__NEURAL      VoiceName = "Xiaomo (neural)"
+	VOICENAME_XIAOQIU__NEURAL     VoiceName = "Xiaoqiu (neural)"
+	VOICENAME_XIAOROU__NEURAL     VoiceName = "Xiaorou (neural)"
+	VOICENAME_XIAORUI__NEURAL     VoiceName = "Xiaorui (neural)"
+	VOICENAME_XIAOXIAO__NEURAL    VoiceName = "Xiaoxiao (neural)"
+	VOICENAME_XIAOYAN__NEURAL     VoiceName = "Xiaoyan (neural)"
+	VOICENAME_XIAOYI__NEURAL      VoiceName = "Xiaoyi (neural)"
+	VOICENAME_XIAOZHEN__NEURAL    VoiceName = "Xiaozhen (neural)"
+	VOICENAME_YUNFENG__NEURAL     VoiceName = "Yunfeng (neural)"
+	VOICENAME_YUNHAO__NEURAL      VoiceName = "Yunhao (neural)"
+	VOICENAME_YUNJIAN__NEURAL     VoiceName = "Yunjian (neural)"
+	VOICENAME_YUNJIE__NEURAL      VoiceName = "Yunjie (neural)"
+	VOICENAME_YUNXI__NEURAL       VoiceName = "Yunxi (neural)"
+	VOICENAME_YUNXIA__NEURAL      VoiceName = "Yunxia (neural)"
+	VOICENAME_YUNYANG__NEURAL     VoiceName = "Yunyang (neural)"
+	VOICENAME_YUNYE__NEURAL       VoiceName = "Yunye (neural)"
+	VOICENAME_YUNZE__NEURAL       VoiceName = "Yunze (neural)"
+	VOICENAME_HIU_GAAI__NEURAL    VoiceName = "HiuGaai (neural)"
+	VOICENAME_HIU_MAAN__NEURAL    VoiceName = "HiuMaan (neural)"
+	VOICENAME_HSIAO_CHEN__NEURAL  VoiceName = "HsiaoChen (neural)"
+	VOICENAME_HSIAO_YU__NEURAL    VoiceName = "HsiaoYu (neural)"
+	VOICENAME_WAN_LUNG__NEURAL    VoiceName = "WanLung (neural)"
+	VOICENAME_YUN_JHE__NEURAL     VoiceName = "YunJhe (neural)"
+	VOICENAME_GABRIJELA__NEURAL   VoiceName = "Gabrijela (neural)"
+	VOICENAME_SRECKO__NEURAL      VoiceName = "Srecko (neural)"
+	VOICENAME_ANTONIN__NEURAL     VoiceName = "Antonin (neural)"
+	VOICENAME_VLASTA__NEURAL      VoiceName = "Vlasta (neural)"
+	VOICENAME_CHRISTEL__NEURAL    VoiceName = "Christel (neural)"
+	VOICENAME_JEPPE__NEURAL       VoiceName = "Jeppe (neural)"
+	VOICENAME_COLETTE__NEURAL     VoiceName = "Colette (neural)"
+	VOICENAME_FENNA__NEURAL       VoiceName = "Fenna (neural)"
+	VOICENAME_MAARTEN__NEURAL     VoiceName = "Maarten (neural)"
+	VOICENAME_AMBER__NEURAL       VoiceName = "Amber (neural)"
+	VOICENAME_ANDREW__NEURAL      VoiceName = "Andrew (neural)"
+	VOICENAME_ARIA__NEURAL        VoiceName = "Aria (neural)"
+	VOICENAME_ASHLEY__NEURAL      VoiceName = "Ashley (neural)"
+	VOICENAME_AVA__NEURAL         VoiceName = "Ava (neural)"
+	VOICENAME_BRANDON__NEURAL     VoiceName = "Brandon (neural)"
+	VOICENAME_BRIAN__NEURAL       VoiceName = "Brian (neural)"
+	VOICENAME_CHRISTOPHER__NEURAL VoiceName = "Christopher (neural)"
+	VOICENAME_CORA__NEURAL        VoiceName = "Cora (neural)"
+	VOICENAME_DAVIS__NEURAL       VoiceName = "Davis (neural)"
+	VOICENAME_ELIZABETH__NEURAL   VoiceName = "Elizabeth (neural)"
+	VOICENAME_EMMA__NEURAL        VoiceName = "Emma (neural)"
+	VOICENAME_ERIC__NEURAL        VoiceName = "Eric (neural)"
+	VOICENAME_GUY__NEURAL         VoiceName = "Guy (neural)"
+	VOICENAME_JACOB__NEURAL       VoiceName = "Jacob (neural)"
+	VOICENAME_JANE__NEURAL        VoiceName = "Jane (neural)"
+	VOICENAME_JASON__NEURAL       VoiceName = "Jason (neural)"
+	VOICENAME_JENNY__NEURAL       VoiceName = "Jenny (neural)"
+	VOICENAME_MICHELLE__NEURAL    VoiceName = "Michelle (neural)"
+	VOICENAME_MONICA__NEURAL      VoiceName = "Monica (neural)"
+	VOICENAME_NANCY__NEURAL       VoiceName = "Nancy (neural)"
+	VOICENAME_ROGER__NEURAL       VoiceName = "Roger (neural)"
+	VOICENAME_SARA__NEURAL        VoiceName = "Sara (neural)"
+	VOICENAME_STEFFAN__NEURAL     VoiceName = "Steffan (neural)"
+	VOICENAME_TONY__NEURAL        VoiceName = "Tony (neural)"
+	VOICENAME_ANNETTE__NEURAL     VoiceName = "Annette (neural)"
+	VOICENAME_CARLY__NEURAL       VoiceName = "Carly (neural)"
+	VOICENAME_DARREN__NEURAL      VoiceName = "Darren (neural)"
+	VOICENAME_DUNCAN__NEURAL      VoiceName = "Duncan (neural)"
+	VOICENAME_ELSIE__NEURAL       VoiceName = "Elsie (neural)"
+	VOICENAME_FREYA__NEURAL       VoiceName = "Freya (neural)"
+	VOICENAME_JOANNE__NEURAL      VoiceName = "Joanne (neural)"
+	VOICENAME_KEN__NEURAL         VoiceName = "Ken (neural)"
+	VOICENAME_KIM__NEURAL         VoiceName = "Kim (neural)"
+	VOICENAME_NATASHA__NEURAL     VoiceName = "Natasha (neural)"
+	VOICENAME_NEIL__NEURAL        VoiceName = "Neil (neural)"
+	VOICENAME_TIM__NEURAL         VoiceName = "Tim (neural)"
+	VOICENAME_TINA__NEURAL        VoiceName = "Tina (neural)"
+	VOICENAME_WILLIAM__NEURAL     VoiceName = "William (neural)"
+	VOICENAME_ABBI__NEURAL        VoiceName = "Abbi (neural)"
+	VOICENAME_ALFIE__NEURAL       VoiceName = "Alfie (neural)"
+	VOICENAME_BELLA__NEURAL       VoiceName = "Bella (neural)"
+	VOICENAME_ELLIOT__NEURAL      VoiceName = "Elliot (neural)"
+	VOICENAME_ETHAN__NEURAL       VoiceName = "Ethan (neural)"
+	VOICENAME_HOLLIE__NEURAL      VoiceName = "Hollie (neural)"
+	VOICENAME_LIBBY__NEURAL       VoiceName = "Libby (neural)"
+	VOICENAME_NOAH__NEURAL        VoiceName = "Noah (neural)"
+	VOICENAME_OLIVER__NEURAL      VoiceName = "Oliver (neural)"
+	VOICENAME_OLIVIA__NEURAL      VoiceName = "Olivia (neural)"
+	VOICENAME_RYAN__NEURAL        VoiceName = "Ryan (neural)"
+	VOICENAME_SONIA__NEURAL       VoiceName = "Sonia (neural)"
+	VOICENAME_THOMAS__NEURAL      VoiceName = "Thomas (neural)"
+	VOICENAME_CLARA__NEURAL       VoiceName = "Clara (neural)"
+	VOICENAME_LIAM__NEURAL        VoiceName = "Liam (neural)"
+	VOICENAME_NEERJA__NEURAL      VoiceName = "Neerja (neural)"
+	VOICENAME_PRABHAT__NEURAL     VoiceName = "Prabhat (neural)"
+	VOICENAME_CONNOR__NEURAL      VoiceName = "Connor (neural)"
+	VOICENAME_EMILY__NEURAL       VoiceName = "Emily (neural)"
+	VOICENAME_ANGELO__NEURAL      VoiceName = "Angelo (neural)"
+	VOICENAME_BLESSICA__NEURAL    VoiceName = "Blessica (neural)"
+	VOICENAME_HARRI__NEURAL       VoiceName = "Harri (neural)"
+	VOICENAME_NOORA__NEURAL       VoiceName = "Noora (neural)"
+	VOICENAME_SELMA__NEURAL       VoiceName = "Selma (neural)"
+	VOICENAME_ALAIN__NEURAL       VoiceName = "Alain (neural)"
+	VOICENAME_BRIGITTE__NEURAL    VoiceName = "Brigitte (neural)"
+	VOICENAME_CELESTE__NEURAL     VoiceName = "Celeste (neural)"
+	VOICENAME_CLAUDE__NEURAL      VoiceName = "Claude (neural)"
+	VOICENAME_CORALIE__NEURAL     VoiceName = "Coralie (neural)"
+	VOICENAME_DENISE__NEURAL      VoiceName = "Denise (neural)"
+	VOICENAME_HENRI__NEURAL       VoiceName = "Henri (neural)"
+	VOICENAME_JACQUELINE__NEURAL  VoiceName = "Jacqueline (neural)"
+	VOICENAME_JEROME__NEURAL      VoiceName = "Jerome (neural)"
+	VOICENAME_JOSEPHINE__NEURAL   VoiceName = "Josephine (neural)"
+	VOICENAME_MAURICE__NEURAL     VoiceName = "Maurice (neural)"
+	VOICENAME_VIVIENNE__NEURAL    VoiceName = "Vivienne (neural)"
+	VOICENAME_YVES__NEURAL        VoiceName = "Yves (neural)"
+	VOICENAME_YVETTE__NEURAL      VoiceName = "Yvette (neural)"
+	VOICENAME_ANTOINE__NEURAL     VoiceName = "Antoine (neural)"
+	VOICENAME_JEAN__NEURAL        VoiceName = "Jean (neural)"
+	VOICENAME_SYLVIE__NEURAL      VoiceName = "Sylvie (neural)"
+	VOICENAME_THIERRY__NEURAL     VoiceName = "Thierry (neural)"
+	VOICENAME_ARIANE__NEURAL      VoiceName = "Ariane (neural)"
+	VOICENAME_FABRICE__NEURAL     VoiceName = "Fabrice (neural)"
+	VOICENAME_AMALA__NEURAL       VoiceName = "Amala (neural)"
+	VOICENAME_BERND__NEURAL       VoiceName = "Bernd (neural)"
+	VOICENAME_CHRISTOPH__NEURAL   VoiceName = "Christoph (neural)"
+	VOICENAME_CONRAD__NEURAL      VoiceName = "Conrad (neural)"
+	VOICENAME_ELKE__NEURAL        VoiceName = "Elke (neural)"
+	VOICENAME_KASPER__NEURAL      VoiceName = "Kasper (neural)"
+	VOICENAME_KATJA__NEURAL       VoiceName = "Katja (neural)"
+	VOICENAME_KILLIAN__NEURAL     VoiceName = "Killian (neural)"
+	VOICENAME_KLARISSA__NEURAL    VoiceName = "Klarissa (neural)"
+	VOICENAME_KLAUS__NEURAL       VoiceName = "Klaus (neural)"
+	VOICENAME_LOUISA__NEURAL      VoiceName = "Louisa (neural)"
+	VOICENAME_MAJA__NEURAL        VoiceName = "Maja (neural)"
+	VOICENAME_RALF__NEURAL        VoiceName = "Ralf (neural)"
+	VOICENAME_SERAPHINA__NEURAL   VoiceName = "Seraphina (neural)"
+	VOICENAME_TANJA__NEURAL       VoiceName = "Tanja (neural)"
+	VOICENAME_INGRID__NEURAL      VoiceName = "Ingrid (neural)"
+	VOICENAME_JONAS__NEURAL       VoiceName = "Jonas (neural)"
+	VOICENAME_JAN__NEURAL         VoiceName = "Jan (neural)"
+	VOICENAME_LENI__NEURAL        VoiceName = "Leni (neural)"
+	VOICENAME_ATHINA__NEURAL      VoiceName = "Athina (neural)"
+	VOICENAME_NESTORAS__NEURAL    VoiceName = "Nestoras (neural)"
+	VOICENAME_DHWANI__NEURAL      VoiceName = "Dhwani (neural)"
+	VOICENAME_NIRANJAN__NEURAL    VoiceName = "Niranjan (neural)"
+	VOICENAME_AVRI__NEURAL        VoiceName = "Avri (neural)"
+	VOICENAME_HILA__NEURAL        VoiceName = "Hila (neural)"
+	VOICENAME_MADHUR__NEURAL      VoiceName = "Madhur (neural)"
+	VOICENAME_SWARA__NEURAL       VoiceName = "Swara (neural)"
+	VOICENAME_NOEMI__NEURAL       VoiceName = "Noemi (neural)"
+	VOICENAME_TAMAS__NEURAL       VoiceName = "Tamas (neural)"
+	VOICENAME_GUDRUN__NEURAL      VoiceName = "Gudrun (neural)"
+	VOICENAME_GUNNAR__NEURAL      VoiceName = "Gunnar (neural)"
+	VOICENAME_ARDI__NEURAL        VoiceName = "Ardi (neural)"
+	VOICENAME_GADIS__NEURAL       VoiceName = "Gadis (neural)"
+	VOICENAME_BENIGNO__NEURAL     VoiceName = "Benigno (neural)"
+	VOICENAME_CALIMERO__NEURAL    VoiceName = "Calimero (neural)"
+	VOICENAME_CATALDO__NEURAL     VoiceName = "Cataldo (neural)"
+	VOICENAME_DIEGO__NEURAL       VoiceName = "Diego (neural)"
+	VOICENAME_ELSA__NEURAL        VoiceName = "Elsa (neural)"
+	VOICENAME_FABIOLA__NEURAL     VoiceName = "Fabiola (neural)"
+	VOICENAME_FIAMMA__NEURAL      VoiceName = "Fiamma (neural)"
+	VOICENAME_GIANNI__NEURAL      VoiceName = "Gianni (neural)"
+	VOICENAME_GIUSEPPE__NEURAL    VoiceName = "Giuseppe (neural)"
+	VOICENAME_IMELDA__NEURAL      VoiceName = "Imelda (neural)"
+	VOICENAME_IRMA__NEURAL        VoiceName = "Irma (neural)"
+	VOICENAME_ISABELLA__NEURAL    VoiceName = "Isabella (neural)"
+	VOICENAME_LISANDRO__NEURAL    VoiceName = "Lisandro (neural)"
+	VOICENAME_PALMIRA__NEURAL     VoiceName = "Palmira (neural)"
+	VOICENAME_PIERINA__NEURAL     VoiceName = "Pierina (neural)"
+	VOICENAME_RINALDO__NEURAL     VoiceName = "Rinaldo (neural)"
+	VOICENAME_AOI__NEURAL         VoiceName = "Aoi (neural)"
+	VOICENAME_DAICHI__NEURAL      VoiceName = "Daichi (neural)"
+	VOICENAME_KEITA__NEURAL       VoiceName = "Keita (neural)"
+	VOICENAME_MAYU__NEURAL        VoiceName = "Mayu (neural)"
+	VOICENAME_NANAMI__NEURAL      VoiceName = "Nanami (neural)"
+	VOICENAME_NAOKI__NEURAL       VoiceName = "Naoki (neural)"
+	VOICENAME_SHIORI__NEURAL      VoiceName = "Shiori (neural)"
+	VOICENAME_GAGAN__NEURAL       VoiceName = "Gagan (neural)"
+	VOICENAME_SAPNA__NEURAL       VoiceName = "Sapna (neural)"
+	VOICENAME_BONG_JIN__NEURAL    VoiceName = "BongJin (neural)"
+	VOICENAME_GOOK_MIN__NEURAL    VoiceName = "GookMin (neural)"
+	VOICENAME_HYUNSU__NEURAL      VoiceName = "Hyunsu (neural)"
+	VOICENAME_IN_JOON__NEURAL     VoiceName = "InJoon (neural)"
+	VOICENAME_JI_MIN__NEURAL      VoiceName = "JiMin (neural)"
+	VOICENAME_SEO_HYEON__NEURAL   VoiceName = "SeoHyeon (neural)"
+	VOICENAME_SOON_BOK__NEURAL    VoiceName = "SoonBok (neural)"
+	VOICENAME_SUN_HI__NEURAL      VoiceName = "SunHi (neural)"
+	VOICENAME_YU_JIN__NEURAL      VoiceName = "YuJin (neural)"
+	VOICENAME_OSMAN__NEURAL       VoiceName = "Osman (neural)"
+	VOICENAME_YASMIN__NEURAL      VoiceName = "Yasmin (neural)"
+	VOICENAME_MIDHUN__NEURAL      VoiceName = "Midhun (neural)"
+	VOICENAME_SOBHANA__NEURAL     VoiceName = "Sobhana (neural)"
+	VOICENAME_FINN__NEURAL        VoiceName = "Finn (neural)"
+	VOICENAME_ISELIN__NEURAL      VoiceName = "Iselin (neural)"
+	VOICENAME_PERNILLE__NEURAL    VoiceName = "Pernille (neural)"
+	VOICENAME_AGNIESZKA__NEURAL   VoiceName = "Agnieszka (neural)"
+	VOICENAME_MAREK__NEURAL       VoiceName = "Marek (neural)"
+	VOICENAME_ZOFIA__NEURAL       VoiceName = "Zofia (neural)"
+	VOICENAME_DUARTE__NEURAL      VoiceName = "Duarte (neural)"
+	VOICENAME_FERNANDA__NEURAL    VoiceName = "Fernanda (neural)"
+	VOICENAME_RAQUEL__NEURAL      VoiceName = "Raquel (neural)"
+	VOICENAME_ANTONIO__NEURAL     VoiceName = "Antonio (neural)"
+	VOICENAME_BRENDA__NEURAL      VoiceName = "Brenda (neural)"
+	VOICENAME_DONATO__NEURAL      VoiceName = "Donato (neural)"
+	VOICENAME_ELZA__NEURAL        VoiceName = "Elza (neural)"
+	VOICENAME_FABIO__NEURAL       VoiceName = "Fabio (neural)"
+	VOICENAME_FRANCISCA__NEURAL   VoiceName = "Francisca (neural)"
+	VOICENAME_GIOVANNA__NEURAL    VoiceName = "Giovanna (neural)"
+	VOICENAME_HUMBERTO__NEURAL    VoiceName = "Humberto (neural)"
+	VOICENAME_JULIO__NEURAL       VoiceName = "Julio (neural)"
+	VOICENAME_LEILA__NEURAL       VoiceName = "Leila (neural)"
+	VOICENAME_LETICIA__NEURAL     VoiceName = "Leticia (neural)"
+	VOICENAME_MANUELA__NEURAL     VoiceName = "Manuela (neural)"
+	VOICENAME_NICOLAU__NEURAL     VoiceName = "Nicolau (neural)"
+	VOICENAME_THALITA__NEURAL     VoiceName = "Thalita (neural)"
+	VOICENAME_VALERIO__NEURAL     VoiceName = "Valerio (neural)"
+	VOICENAME_YARA__NEURAL        VoiceName = "Yara (neural)"
+	VOICENAME_ALINA__NEURAL       VoiceName = "Alina (neural)"
+	VOICENAME_EMIL__NEURAL        VoiceName = "Emil (neural)"
+	VOICENAME_DARIYA__NEURAL      VoiceName = "Dariya (neural)"
+	VOICENAME_DMITRY__NEURAL      VoiceName = "Dmitry (neural)"
+	VOICENAME_SVETLANA__NEURAL    VoiceName = "Svetlana (neural)"
+	VOICENAME_LUKAS__NEURAL       VoiceName = "Lukas (neural)"
+	VOICENAME_VIKTORIA__NEURAL    VoiceName = "Viktoria (neural)"
+	VOICENAME_PETRA__NEURAL       VoiceName = "Petra (neural)"
+	VOICENAME_ROK__NEURAL         VoiceName = "Rok (neural)"
+	VOICENAME_ABRIL__NEURAL       VoiceName = "Abril (neural)"
+	VOICENAME_ALONSO__NEURAL      VoiceName = "Alonso (neural)"
+	VOICENAME_ALVARO__NEURAL      VoiceName = "Alvaro (neural)"
+	VOICENAME_ARNAU__NEURAL       VoiceName = "Arnau (neural)"
+	VOICENAME_DARIO__NEURAL       VoiceName = "Dario (neural)"
+	VOICENAME_ELIAS__NEURAL       VoiceName = "Elias (neural)"
+	VOICENAME_ELVIRA__NEURAL      VoiceName = "Elvira (neural)"
+	VOICENAME_ESTRELLA__NEURAL    VoiceName = "Estrella (neural)"
+	VOICENAME_IRENE__NEURAL       VoiceName = "Irene (neural)"
+	VOICENAME_LAIA__NEURAL        VoiceName = "Laia (neural)"
+	VOICENAME_LIA__NEURAL         VoiceName = "Lia (neural)"
+	VOICENAME_NIL__NEURAL         VoiceName = "Nil (neural)"
+	VOICENAME_PALOMA__NEURAL      VoiceName = "Paloma (neural)"
+	VOICENAME_SAUL__NEURAL        VoiceName = "Saul (neural)"
+	VOICENAME_TEO__NEURAL         VoiceName = "Teo (neural)"
+	VOICENAME_TRIANA__NEURAL      VoiceName = "Triana (neural)"
+	VOICENAME_VERA__NEURAL        VoiceName = "Vera (neural)"
+	VOICENAME_XIMENA__NEURAL      VoiceName = "Ximena (neural)"
+	VOICENAME_BEATRIZ__NEURAL     VoiceName = "Beatriz (neural)"
+	VOICENAME_CANDELA__NEURAL     VoiceName = "Candela (neural)"
+	VOICENAME_CARLOTA__NEURAL     VoiceName = "Carlota (neural)"
+	VOICENAME_CECILIO__NEURAL     VoiceName = "Cecilio (neural)"
+	VOICENAME_DALIA__NEURAL       VoiceName = "Dalia (neural)"
+	VOICENAME_GERARDO__NEURAL     VoiceName = "Gerardo (neural)"
+	VOICENAME_JORGE__NEURAL       VoiceName = "Jorge (neural)"
+	VOICENAME_LARISSA__NEURAL     VoiceName = "Larissa (neural)"
+	VOICENAME_LIBERTO__NEURAL     VoiceName = "Liberto (neural)"
+	VOICENAME_LUCIANO__NEURAL     VoiceName = "Luciano (neural)"
+	VOICENAME_MARINA__NEURAL      VoiceName = "Marina (neural)"
+	VOICENAME_NURIA__NEURAL       VoiceName = "Nuria (neural)"
+	VOICENAME_PELAYO__NEURAL      VoiceName = "Pelayo (neural)"
+	VOICENAME_RENATA__NEURAL      VoiceName = "Renata (neural)"
+	VOICENAME_YAGO__NEURAL        VoiceName = "Yago (neural)"
+	VOICENAME_HILLEVI__NEURAL     VoiceName = "Hillevi (neural)"
+	VOICENAME_MATTIAS__NEURAL     VoiceName = "Mattias (neural)"
+	VOICENAME_SOFIE__NEURAL       VoiceName = "Sofie (neural)"
+	VOICENAME_PALLAVI__NEURAL     VoiceName = "Pallavi (neural)"
+	VOICENAME_VALLUVAR__NEURAL    VoiceName = "Valluvar (neural)"
+	VOICENAME_MOHAN__NEURAL       VoiceName = "Mohan (neural)"
+	VOICENAME_SHRUTI__NEURAL      VoiceName = "Shruti (neural)"
+	VOICENAME_ACHARA__NEURAL      VoiceName = "Achara (neural)"
+	VOICENAME_NIWAT__NEURAL       VoiceName = "Niwat (neural)"
+	VOICENAME_PREMWADEE__NEURAL   VoiceName = "Premwadee (neural)"
+	VOICENAME_AHMET__NEURAL       VoiceName = "Ahmet (neural)"
+	VOICENAME_EMEL__NEURAL        VoiceName = "Emel (neural)"
+	VOICENAME_OSTAP__NEURAL       VoiceName = "Ostap (neural)"
+	VOICENAME_POLINA__NEURAL      VoiceName = "Polina (neural)"
+	VOICENAME_HOAI_MY__NEURAL     VoiceName = "HoaiMy (neural)"
+	VOICENAME_NAM_MINH__NEURAL    VoiceName = "NamMinh (neural)"
+	VOICENAME_ALED__NEURAL        VoiceName = "Aled (neural)"
+	VOICENAME_NIA__NEURAL         VoiceName = "Nia (neural)"
+	VOICENAME_MOUNA__NEURAL       VoiceName = "Mouna (neural)"
+	VOICENAME_JAMAL__NEURAL       VoiceName = "Jamal (neural)"
+	VOICENAME_UZMA__NEURAL        VoiceName = "Uzma (neural)"
+	VOICENAME_ASAD__NEURAL        VoiceName = "Asad (neural)"
+)
+
+// All allowed values of VoiceName enum
+var AllowedVoiceNameEnumValues = []VoiceName{
+	"Zeina",
+	"Aisha (beta)",
+	"Farooq (beta)",
+	"Hussein (beta)",
+	"Amal (beta)",
+	"Sayan (beta)",
+	"Sushmita (beta)",
+	"Darina",
+	"Conchita",
+	"Zhiyu",
+	"Liu (beta)",
+	"Wang (beta)",
+	"Zhang (beta)",
+	"Lin (beta)",
+	"Akemi (beta)",
+	"Chen (beta)",
+	"Huang (beta)",
+	"Fang",
+	"Chao",
+	"Ming",
+	"Aneta",
+	"Naja",
+	"Mads",
+	"Ruben",
+	"Lotte",
+	"Joanna",
+	"Ivy",
+	"Kendra",
+	"Kimberly",
+	"Salli",
+	"Joey",
+	"Justin",
+	"Matthew",
+	"Russell",
+	"Nicole",
+	"Brian",
+	"Amy",
+	"Emma",
+	"Aditi",
+	"Raveena",
+	"Geraint",
+	"Evelin (beta)",
+	"Celine",
+	"Lea",
+	"Mathieu",
+	"Chantal",
+	"Vicki",
+	"Hans",
+	"Marlene",
+	"Sophia (beta)",
+	"Dinesh (beta)",
+	"Leela (beta)",
+	"Abigail",
+	"Meira",
+	"Idan",
+	"Yosef",
+	"Aadita",
+	"Aarushi (beta)",
+	"Akash (beta)",
+	"Daman (beta)",
+	"Divya (beta)",
+	"Agota",
+	"Dora",
+	"Karl",
+	"Indah (beta)",
+	"Arif (beta)",
+	"Reza (beta)",
+	"Nurul (beta)",
+	"Gianna (beta)",
+	"Carla",
+	"Bianca",
+	"Giorgio",
+	"Takumi",
+	"Mizuki",
+	"Shashank (beta)",
+	"Namratha (beta)",
+	"Seoyeon",
+	"Sumi (beta)",
+	"Jina (beta)",
+	"Himchan (beta)",
+	"Minho (beta)",
+	"Ameera",
+	"Nurin",
+	"Nijat",
+	"Fuaad",
+	"Vishnu (beta)",
+	"Kirti (beta)",
+	"Liv",
+	"Ewa",
+	"Maja",
+	"Jacek",
+	"Jan",
+	"Cristiano",
+	"Ines",
+	"Abrielle (beta)",
+	"Henriques (beta)",
+	"Jeraldo (beta)",
+	"Jacinda (beta)",
+	"Camila",
+	"Ricardo",
+	"Vitoria",
+	"Carmen",
+	"Maxim",
+	"Tatyana",
+	"Natalia",
+	"Miguel",
+	"Linda",
+	"Enrique",
+	"Gabriela (beta)",
+	"Lupe",
+	"Penelope",
+	"Mia",
+	"Astrid",
+	"Ganesh (beta)",
+	"Shruti (beta)",
+	"Vijay (beta)",
+	"Samantha (beta)",
+	"Natchaya (beta)",
+	"Filiz",
+	"Ulyana",
+	"Lien (beta)",
+	"Quan (beta)",
+	"Mai (beta)",
+	"Tuan (beta)",
+	"Gwyneth",
+	"Hamed (neural)",
+	"Salma (neural)",
+	"Shakir (neural)",
+	"Zariyah (neural)",
+	"Bashkar (neural)",
+	"Tanishaa (neural)",
+	"Borislav (neural)",
+	"Kalina (neural)",
+	"Alba (neural)",
+	"Enric (neural)",
+	"Joana (neural)",
+	"Xiaochen (neural)",
+	"Xiaohan (neural)",
+	"Xiaomeng (neural)",
+	"Xiaomo (neural)",
+	"Xiaoqiu (neural)",
+	"Xiaorou (neural)",
+	"Xiaorui (neural)",
+	"Xiaoxiao (neural)",
+	"Xiaoyan (neural)",
+	"Xiaoyi (neural)",
+	"Xiaozhen (neural)",
+	"Yunfeng (neural)",
+	"Yunhao (neural)",
+	"Yunjian (neural)",
+	"Yunjie (neural)",
+	"Yunxi (neural)",
+	"Yunxia (neural)",
+	"Yunyang (neural)",
+	"Yunye (neural)",
+	"Yunze (neural)",
+	"HiuGaai (neural)",
+	"HiuMaan (neural)",
+	"HsiaoChen (neural)",
+	"HsiaoYu (neural)",
+	"WanLung (neural)",
+	"YunJhe (neural)",
+	"Gabrijela (neural)",
+	"Srecko (neural)",
+	"Antonin (neural)",
+	"Vlasta (neural)",
+	"Christel (neural)",
+	"Jeppe (neural)",
+	"Colette (neural)",
+	"Fenna (neural)",
+	"Maarten (neural)",
+	"Amber (neural)",
+	"Andrew (neural)",
+	"Aria (neural)",
+	"Ashley (neural)",
+	"Ava (neural)",
+	"Brandon (neural)",
+	"Brian (neural)",
+	"Christopher (neural)",
+	"Cora (neural)",
+	"Davis (neural)",
+	"Elizabeth (neural)",
+	"Emma (neural)",
+	"Eric (neural)",
+	"Guy (neural)",
+	"Jacob (neural)",
+	"Jane (neural)",
+	"Jason (neural)",
+	"Jenny (neural)",
+	"Michelle (neural)",
+	"Monica (neural)",
+	"Nancy (neural)",
+	"Roger (neural)",
+	"Sara (neural)",
+	"Steffan (neural)",
+	"Tony (neural)",
+	"Annette (neural)",
+	"Carly (neural)",
+	"Darren (neural)",
+	"Duncan (neural)",
+	"Elsie (neural)",
+	"Freya (neural)",
+	"Joanne (neural)",
+	"Ken (neural)",
+	"Kim (neural)",
+	"Natasha (neural)",
+	"Neil (neural)",
+	"Tim (neural)",
+	"Tina (neural)",
+	"William (neural)",
+	"Abbi (neural)",
+	"Alfie (neural)",
+	"Bella (neural)",
+	"Elliot (neural)",
+	"Ethan (neural)",
+	"Hollie (neural)",
+	"Libby (neural)",
+	"Noah (neural)",
+	"Oliver (neural)",
+	"Olivia (neural)",
+	"Ryan (neural)",
+	"Sonia (neural)",
+	"Thomas (neural)",
+	"Clara (neural)",
+	"Liam (neural)",
+	"Neerja (neural)",
+	"Prabhat (neural)",
+	"Connor (neural)",
+	"Emily (neural)",
+	"Angelo (neural)",
+	"Blessica (neural)",
+	"Harri (neural)",
+	"Noora (neural)",
+	"Selma (neural)",
+	"Alain (neural)",
+	"Brigitte (neural)",
+	"Celeste (neural)",
+	"Claude (neural)",
+	"Coralie (neural)",
+	"Denise (neural)",
+	"Henri (neural)",
+	"Jacqueline (neural)",
+	"Jerome (neural)",
+	"Josephine (neural)",
+	"Maurice (neural)",
+	"Vivienne (neural)",
+	"Yves (neural)",
+	"Yvette (neural)",
+	"Antoine (neural)",
+	"Jean (neural)",
+	"Sylvie (neural)",
+	"Thierry (neural)",
+	"Ariane (neural)",
+	"Fabrice (neural)",
+	"Amala (neural)",
+	"Bernd (neural)",
+	"Christoph (neural)",
+	"Conrad (neural)",
+	"Elke (neural)",
+	"Kasper (neural)",
+	"Katja (neural)",
+	"Killian (neural)",
+	"Klarissa (neural)",
+	"Klaus (neural)",
+	"Louisa (neural)",
+	"Maja (neural)",
+	"Ralf (neural)",
+	"Seraphina (neural)",
+	"Tanja (neural)",
+	"Ingrid (neural)",
+	"Jonas (neural)",
+	"Jan (neural)",
+	"Leni (neural)",
+	"Athina (neural)",
+	"Nestoras (neural)",
+	"Dhwani (neural)",
+	"Niranjan (neural)",
+	"Avri (neural)",
+	"Hila (neural)",
+	"Madhur (neural)",
+	"Swara (neural)",
+	"Noemi (neural)",
+	"Tamas (neural)",
+	"Gudrun (neural)",
+	"Gunnar (neural)",
+	"Ardi (neural)",
+	"Gadis (neural)",
+	"Benigno (neural)",
+	"Calimero (neural)",
+	"Cataldo (neural)",
+	"Diego (neural)",
+	"Elsa (neural)",
+	"Fabiola (neural)",
+	"Fiamma (neural)",
+	"Gianni (neural)",
+	"Giuseppe (neural)",
+	"Imelda (neural)",
+	"Irma (neural)",
+	"Isabella (neural)",
+	"Lisandro (neural)",
+	"Palmira (neural)",
+	"Pierina (neural)",
+	"Rinaldo (neural)",
+	"Aoi (neural)",
+	"Daichi (neural)",
+	"Keita (neural)",
+	"Mayu (neural)",
+	"Nanami (neural)",
+	"Naoki (neural)",
+	"Shiori (neural)",
+	"Gagan (neural)",
+	"Sapna (neural)",
+	"BongJin (neural)",
+	"GookMin (neural)",
+	"Hyunsu (neural)",
+	"InJoon (neural)",
+	"JiMin (neural)",
+	"SeoHyeon (neural)",
+	"SoonBok (neural)",
+	"SunHi (neural)",
+	"YuJin (neural)",
+	"Osman (neural)",
+	"Yasmin (neural)",
+	"Midhun (neural)",
+	"Sobhana (neural)",
+	"Finn (neural)",
+	"Iselin (neural)",
+	"Pernille (neural)",
+	"Agnieszka (neural)",
+	"Marek (neural)",
+	"Zofia (neural)",
+	"Duarte (neural)",
+	"Fernanda (neural)",
+	"Raquel (neural)",
+	"Antonio (neural)",
+	"Brenda (neural)",
+	"Donato (neural)",
+	"Elza (neural)",
+	"Fabio (neural)",
+	"Francisca (neural)",
+	"Giovanna (neural)",
+	"Humberto (neural)",
+	"Julio (neural)",
+	"Leila (neural)",
+	"Leticia (neural)",
+	"Manuela (neural)",
+	"Nicolau (neural)",
+	"Thalita (neural)",
+	"Valerio (neural)",
+	"Yara (neural)",
+	"Alina (neural)",
+	"Emil (neural)",
+	"Dariya (neural)",
+	"Dmitry (neural)",
+	"Svetlana (neural)",
+	"Lukas (neural)",
+	"Viktoria (neural)",
+	"Petra (neural)",
+	"Rok (neural)",
+	"Abril (neural)",
+	"Alonso (neural)",
+	"Alvaro (neural)",
+	"Arnau (neural)",
+	"Dario (neural)",
+	"Elias (neural)",
+	"Elvira (neural)",
+	"Estrella (neural)",
+	"Irene (neural)",
+	"Laia (neural)",
+	"Lia (neural)",
+	"Nil (neural)",
+	"Paloma (neural)",
+	"Saul (neural)",
+	"Teo (neural)",
+	"Triana (neural)",
+	"Vera (neural)",
+	"Ximena (neural)",
+	"Beatriz (neural)",
+	"Candela (neural)",
+	"Carlota (neural)",
+	"Cecilio (neural)",
+	"Dalia (neural)",
+	"Gerardo (neural)",
+	"Jorge (neural)",
+	"Larissa (neural)",
+	"Liberto (neural)",
+	"Luciano (neural)",
+	"Marina (neural)",
+	"Nuria (neural)",
+	"Pelayo (neural)",
+	"Renata (neural)",
+	"Yago (neural)",
+	"Hillevi (neural)",
+	"Mattias (neural)",
+	"Sofie (neural)",
+	"Pallavi (neural)",
+	"Valluvar (neural)",
+	"Mohan (neural)",
+	"Shruti (neural)",
+	"Achara (neural)",
+	"Niwat (neural)",
+	"Premwadee (neural)",
+	"Ahmet (neural)",
+	"Emel (neural)",
+	"Ostap (neural)",
+	"Polina (neural)",
+	"HoaiMy (neural)",
+	"NamMinh (neural)",
+	"Aled (neural)",
+	"Nia (neural)",
+	"Mouna (neural)",
+	"Jamal (neural)",
+	"Uzma (neural)",
+	"Asad (neural)",
+}
+
+func (v *VoiceName) UnmarshalJSON(src []byte) error {
+	var value string
+	err := json.Unmarshal(src, &value)
+	if err != nil {
+		return err
+	}
+	enumTypeValue := VoiceName(value)
+	for _, existing := range AllowedVoiceNameEnumValues {
+		if existing == enumTypeValue {
+			*v = enumTypeValue
+			return nil
+		}
+	}
+
+	return fmt.Errorf("%+v is not a valid VoiceName", value)
+}
+
+// NewVoiceNameFromValue returns a pointer to a valid VoiceName
+// for the value passed as argument, or an error if the value passed is not allowed by the enum
+func NewVoiceNameFromValue(v string) (*VoiceName, error) {
+	ev := VoiceName(v)
+	if ev.IsValid() {
+		return &ev, nil
+	} else {
+		return nil, fmt.Errorf("invalid value '%v' for VoiceName: valid values are %v", v, AllowedVoiceNameEnumValues)
+	}
+}
+
+// IsValid return true if the value is valid for the enum, false otherwise
+func (v VoiceName) IsValid() bool {
+	for _, existing := range AllowedVoiceNameEnumValues {
+		if existing == v {
+			return true
+		}
+	}
+	return false
+}
+
+// Ptr returns reference to VoiceName value
+func (v VoiceName) Ptr() *VoiceName {
+	return &v
+}
+
+type NullableVoiceName struct {
+	value *VoiceName
+	isSet bool
+}
+
+func (v NullableVoiceName) Get() *VoiceName {
+	return v.value
+}
+
+func (v *NullableVoiceName) Set(val *VoiceName) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoiceName) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoiceName) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoiceName(val *VoiceName) *NullableVoiceName {
+	return &NullableVoiceName{value: val, isSet: true}
+}
+
+func (v NullableVoiceName) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoiceName) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice_options.go b/pkg/infobip/models/voice/voice_options.go
new file mode 100644
index 0000000..fdb672c
--- /dev/null
+++ b/pkg/infobip/models/voice/voice_options.go
@@ -0,0 +1,166 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the VoiceOptions type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &VoiceOptions{}
+
+// VoiceOptions struct for VoiceOptions
+type VoiceOptions struct {
+	// Name of the voice in which the text would be synthesized.
+	Name *string
+	// Gender in which the text would be synthesized.
+	Gender *string
+}
+
+// NewVoiceOptions instantiates a new VoiceOptions object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVoiceOptions() *VoiceOptions {
+	this := VoiceOptions{}
+	return &this
+}
+
+// NewVoiceOptionsWithDefaults instantiates a new VoiceOptions object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVoiceOptionsWithDefaults() *VoiceOptions {
+	this := VoiceOptions{}
+
+	return &this
+}
+
+// GetName returns the Name field value if set, zero value otherwise.
+func (o *VoiceOptions) GetName() string {
+	if o == nil || IsNil(o.Name) {
+		var ret string
+		return ret
+	}
+	return *o.Name
+}
+
+// GetNameOk returns a tuple with the Name field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceOptions) GetNameOk() (*string, bool) {
+	if o == nil || IsNil(o.Name) {
+		return nil, false
+	}
+	return o.Name, true
+}
+
+// HasName returns a boolean if a field has been set.
+func (o *VoiceOptions) HasName() bool {
+	if o != nil && !IsNil(o.Name) {
+		return true
+	}
+
+	return false
+}
+
+// SetName gets a reference to the given string and assigns it to the Name field.
+func (o *VoiceOptions) SetName(v string) {
+	o.Name = &v
+}
+
+// GetGender returns the Gender field value if set, zero value otherwise.
+func (o *VoiceOptions) GetGender() string {
+	if o == nil || IsNil(o.Gender) {
+		var ret string
+		return ret
+	}
+	return *o.Gender
+}
+
+// GetGenderOk returns a tuple with the Gender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceOptions) GetGenderOk() (*string, bool) {
+	if o == nil || IsNil(o.Gender) {
+		return nil, false
+	}
+	return o.Gender, true
+}
+
+// HasGender returns a boolean if a field has been set.
+func (o *VoiceOptions) HasGender() bool {
+	if o != nil && !IsNil(o.Gender) {
+		return true
+	}
+
+	return false
+}
+
+// SetGender gets a reference to the given string and assigns it to the Gender field.
+func (o *VoiceOptions) SetGender(v string) {
+	o.Gender = &v
+}
+
+func (o VoiceOptions) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o VoiceOptions) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Name) {
+		toSerialize["name"] = o.Name
+	}
+	if !IsNil(o.Gender) {
+		toSerialize["gender"] = o.Gender
+	}
+	return toSerialize, nil
+}
+
+type NullableVoiceOptions struct {
+	value *VoiceOptions
+	isSet bool
+}
+
+func (v NullableVoiceOptions) Get() *VoiceOptions {
+	return v.value
+}
+
+func (v *NullableVoiceOptions) Set(val *VoiceOptions) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoiceOptions) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoiceOptions) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoiceOptions(val *VoiceOptions) *NullableVoiceOptions {
+	return &NullableVoiceOptions{value: val, isSet: true}
+}
+
+func (v NullableVoiceOptions) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoiceOptions) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice_preferences.go b/pkg/infobip/models/voice/voice_preferences.go
new file mode 100644
index 0000000..b0e6fdb
--- /dev/null
+++ b/pkg/infobip/models/voice/voice_preferences.go
@@ -0,0 +1,164 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the VoicePreferences type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &VoicePreferences{}
+
+// VoicePreferences Voice preferences.
+type VoicePreferences struct {
+	VoiceGender *Gender
+	VoiceName   *VoiceName
+}
+
+// NewVoicePreferences instantiates a new VoicePreferences object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVoicePreferences() *VoicePreferences {
+	this := VoicePreferences{}
+	return &this
+}
+
+// NewVoicePreferencesWithDefaults instantiates a new VoicePreferences object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVoicePreferencesWithDefaults() *VoicePreferences {
+	this := VoicePreferences{}
+
+	return &this
+}
+
+// GetVoiceGender returns the VoiceGender field value if set, zero value otherwise.
+func (o *VoicePreferences) GetVoiceGender() Gender {
+	if o == nil || IsNil(o.VoiceGender) {
+		var ret Gender
+		return ret
+	}
+	return *o.VoiceGender
+}
+
+// GetVoiceGenderOk returns a tuple with the VoiceGender field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoicePreferences) GetVoiceGenderOk() (*Gender, bool) {
+	if o == nil || IsNil(o.VoiceGender) {
+		return nil, false
+	}
+	return o.VoiceGender, true
+}
+
+// HasVoiceGender returns a boolean if a field has been set.
+func (o *VoicePreferences) HasVoiceGender() bool {
+	if o != nil && !IsNil(o.VoiceGender) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoiceGender gets a reference to the given Gender and assigns it to the VoiceGender field.
+func (o *VoicePreferences) SetVoiceGender(v Gender) {
+	o.VoiceGender = &v
+}
+
+// GetVoiceName returns the VoiceName field value if set, zero value otherwise.
+func (o *VoicePreferences) GetVoiceName() VoiceName {
+	if o == nil || IsNil(o.VoiceName) {
+		var ret VoiceName
+		return ret
+	}
+	return *o.VoiceName
+}
+
+// GetVoiceNameOk returns a tuple with the VoiceName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoicePreferences) GetVoiceNameOk() (*VoiceName, bool) {
+	if o == nil || IsNil(o.VoiceName) {
+		return nil, false
+	}
+	return o.VoiceName, true
+}
+
+// HasVoiceName returns a boolean if a field has been set.
+func (o *VoicePreferences) HasVoiceName() bool {
+	if o != nil && !IsNil(o.VoiceName) {
+		return true
+	}
+
+	return false
+}
+
+// SetVoiceName gets a reference to the given VoiceName and assigns it to the VoiceName field.
+func (o *VoicePreferences) SetVoiceName(v VoiceName) {
+	o.VoiceName = &v
+}
+
+func (o VoicePreferences) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o VoicePreferences) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.VoiceGender) {
+		toSerialize["voiceGender"] = o.VoiceGender
+	}
+	if !IsNil(o.VoiceName) {
+		toSerialize["voiceName"] = o.VoiceName
+	}
+	return toSerialize, nil
+}
+
+type NullableVoicePreferences struct {
+	value *VoicePreferences
+	isSet bool
+}
+
+func (v NullableVoicePreferences) Get() *VoicePreferences {
+	return v.value
+}
+
+func (v *NullableVoicePreferences) Set(val *VoicePreferences) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoicePreferences) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoicePreferences) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoicePreferences(val *VoicePreferences) *NullableVoicePreferences {
+	return &NullableVoicePreferences{value: val, isSet: true}
+}
+
+func (v NullableVoicePreferences) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoicePreferences) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/voice_response_details.go b/pkg/infobip/models/voice/voice_response_details.go
new file mode 100644
index 0000000..aa2996b
--- /dev/null
+++ b/pkg/infobip/models/voice/voice_response_details.go
@@ -0,0 +1,202 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the VoiceResponseDetails type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &VoiceResponseDetails{}
+
+// VoiceResponseDetails Array of sent messages, one object per every message.
+type VoiceResponseDetails struct {
+	// The message destination address.
+	To     *string
+	Status *SingleMessageStatus
+	// The ID that uniquely identifies the message sent.
+	MessageId *string
+}
+
+// NewVoiceResponseDetails instantiates a new VoiceResponseDetails object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewVoiceResponseDetails() *VoiceResponseDetails {
+	this := VoiceResponseDetails{}
+	return &this
+}
+
+// NewVoiceResponseDetailsWithDefaults instantiates a new VoiceResponseDetails object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewVoiceResponseDetailsWithDefaults() *VoiceResponseDetails {
+	this := VoiceResponseDetails{}
+
+	return &this
+}
+
+// GetTo returns the To field value if set, zero value otherwise.
+func (o *VoiceResponseDetails) GetTo() string {
+	if o == nil || IsNil(o.To) {
+		var ret string
+		return ret
+	}
+	return *o.To
+}
+
+// GetToOk returns a tuple with the To field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceResponseDetails) GetToOk() (*string, bool) {
+	if o == nil || IsNil(o.To) {
+		return nil, false
+	}
+	return o.To, true
+}
+
+// HasTo returns a boolean if a field has been set.
+func (o *VoiceResponseDetails) HasTo() bool {
+	if o != nil && !IsNil(o.To) {
+		return true
+	}
+
+	return false
+}
+
+// SetTo gets a reference to the given string and assigns it to the To field.
+func (o *VoiceResponseDetails) SetTo(v string) {
+	o.To = &v
+}
+
+// GetStatus returns the Status field value if set, zero value otherwise.
+func (o *VoiceResponseDetails) GetStatus() SingleMessageStatus {
+	if o == nil || IsNil(o.Status) {
+		var ret SingleMessageStatus
+		return ret
+	}
+	return *o.Status
+}
+
+// GetStatusOk returns a tuple with the Status field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceResponseDetails) GetStatusOk() (*SingleMessageStatus, bool) {
+	if o == nil || IsNil(o.Status) {
+		return nil, false
+	}
+	return o.Status, true
+}
+
+// HasStatus returns a boolean if a field has been set.
+func (o *VoiceResponseDetails) HasStatus() bool {
+	if o != nil && !IsNil(o.Status) {
+		return true
+	}
+
+	return false
+}
+
+// SetStatus gets a reference to the given SingleMessageStatus and assigns it to the Status field.
+func (o *VoiceResponseDetails) SetStatus(v SingleMessageStatus) {
+	o.Status = &v
+}
+
+// GetMessageId returns the MessageId field value if set, zero value otherwise.
+func (o *VoiceResponseDetails) GetMessageId() string {
+	if o == nil || IsNil(o.MessageId) {
+		var ret string
+		return ret
+	}
+	return *o.MessageId
+}
+
+// GetMessageIdOk returns a tuple with the MessageId field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *VoiceResponseDetails) GetMessageIdOk() (*string, bool) {
+	if o == nil || IsNil(o.MessageId) {
+		return nil, false
+	}
+	return o.MessageId, true
+}
+
+// HasMessageId returns a boolean if a field has been set.
+func (o *VoiceResponseDetails) HasMessageId() bool {
+	if o != nil && !IsNil(o.MessageId) {
+		return true
+	}
+
+	return false
+}
+
+// SetMessageId gets a reference to the given string and assigns it to the MessageId field.
+func (o *VoiceResponseDetails) SetMessageId(v string) {
+	o.MessageId = &v
+}
+
+func (o VoiceResponseDetails) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o VoiceResponseDetails) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.To) {
+		toSerialize["to"] = o.To
+	}
+	if !IsNil(o.Status) {
+		toSerialize["status"] = o.Status
+	}
+	if !IsNil(o.MessageId) {
+		toSerialize["messageId"] = o.MessageId
+	}
+	return toSerialize, nil
+}
+
+type NullableVoiceResponseDetails struct {
+	value *VoiceResponseDetails
+	isSet bool
+}
+
+func (v NullableVoiceResponseDetails) Get() *VoiceResponseDetails {
+	return v.value
+}
+
+func (v *NullableVoiceResponseDetails) Set(val *VoiceResponseDetails) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableVoiceResponseDetails) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableVoiceResponseDetails) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableVoiceResponseDetails(val *VoiceResponseDetails) *NullableVoiceResponseDetails {
+	return &NullableVoiceResponseDetails{value: val, isSet: true}
+}
+
+func (v NullableVoiceResponseDetails) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableVoiceResponseDetails) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/web_rtc_endpoint.go b/pkg/infobip/models/voice/web_rtc_endpoint.go
new file mode 100644
index 0000000..c30db63
--- /dev/null
+++ b/pkg/infobip/models/voice/web_rtc_endpoint.go
@@ -0,0 +1,163 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the WebRtcEndpoint type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &WebRtcEndpoint{}
+
+// WebRtcEndpoint struct for WebRtcEndpoint
+type WebRtcEndpoint struct {
+	Type CallEndpointType
+	// The identity used to present a user on the Infobip WebRTC platform. Must be unique.
+	Identity string
+	// A human-readable name for a given identity.
+	DisplayName *string
+}
+
+type _WebRtcEndpoint WebRtcEndpoint
+
+// NewWebRtcEndpoint instantiates a new WebRtcEndpoint object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+func NewWebRtcEndpoint(identity string) *WebRtcEndpoint {
+	this := WebRtcEndpoint{}
+	this.Type = "WEBRTC"
+	this.Identity = identity
+	return &this
+}
+
+// NewWebRtcEndpointWithDefaults instantiates a new WebRtcEndpoint object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewWebRtcEndpointWithDefaults() *WebRtcEndpoint {
+	this := WebRtcEndpoint{}
+	this.Type = "WEBRTC"
+	return &this
+}
+
+// GetIdentity returns the Identity field value
+func (o *WebRtcEndpoint) GetIdentity() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.Identity
+}
+
+// GetIdentityOk returns a tuple with the Identity field value
+// and a boolean to check if the value has been set.
+func (o *WebRtcEndpoint) GetIdentityOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.Identity, true
+}
+
+// SetIdentity sets field value
+func (o *WebRtcEndpoint) SetIdentity(v string) {
+	o.Identity = v
+}
+
+// GetDisplayName returns the DisplayName field value if set, zero value otherwise.
+func (o *WebRtcEndpoint) GetDisplayName() string {
+	if o == nil || IsNil(o.DisplayName) {
+		var ret string
+		return ret
+	}
+	return *o.DisplayName
+}
+
+// GetDisplayNameOk returns a tuple with the DisplayName field value if set, nil otherwise
+// and a boolean to check if the value has been set.
+func (o *WebRtcEndpoint) GetDisplayNameOk() (*string, bool) {
+	if o == nil || IsNil(o.DisplayName) {
+		return nil, false
+	}
+	return o.DisplayName, true
+}
+
+// HasDisplayName returns a boolean if a field has been set.
+func (o *WebRtcEndpoint) HasDisplayName() bool {
+	if o != nil && !IsNil(o.DisplayName) {
+		return true
+	}
+
+	return false
+}
+
+// SetDisplayName gets a reference to the given string and assigns it to the DisplayName field.
+func (o *WebRtcEndpoint) SetDisplayName(v string) {
+	o.DisplayName = &v
+}
+
+func (o WebRtcEndpoint) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o WebRtcEndpoint) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	if !IsNil(o.Type) {
+		toSerialize["type"] = o.Type
+	}
+	toSerialize["identity"] = o.Identity
+	if !IsNil(o.DisplayName) {
+		toSerialize["displayName"] = o.DisplayName
+	}
+	return toSerialize, nil
+}
+
+type NullableWebRtcEndpoint struct {
+	value *WebRtcEndpoint
+	isSet bool
+}
+
+func (v NullableWebRtcEndpoint) Get() *WebRtcEndpoint {
+	return v.value
+}
+
+func (v *NullableWebRtcEndpoint) Set(val *WebRtcEndpoint) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableWebRtcEndpoint) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableWebRtcEndpoint) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableWebRtcEndpoint(val *WebRtcEndpoint) *NullableWebRtcEndpoint {
+	return &NullableWebRtcEndpoint{value: val, isSet: true}
+}
+
+func (v NullableWebRtcEndpoint) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableWebRtcEndpoint) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/models/voice/while_do.go b/pkg/infobip/models/voice/while_do.go
new file mode 100644
index 0000000..e9bdcfc
--- /dev/null
+++ b/pkg/infobip/models/voice/while_do.go
@@ -0,0 +1,150 @@
+/*
+Infobip Client API Libraries OpenAPI Specification
+
+OpenAPI specification containing public endpoints supported in client API libraries.
+
+Contact: support@infobip.com
+*/
+
+// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
+
+package voice
+
+import (
+	"encoding/json"
+
+	. "github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+)
+
+// checks if the WhileDo type satisfies the MappedNullable interface at compile time
+var _ MappedNullable = &WhileDo{}
+
+// WhileDo While-Do action executes the do field block of code as long as a specified condition is true in the while field. As with Repeat-While, comparison is done using equal (==) or not equal (! =) operators. Make sure not to provide a condition that causes an infinite loop.
+type WhileDo struct {
+	// The expression to evaluate.
+	While string
+	// Array of actions to execute if none of the conditions above are met.
+	Do []map[string]interface{}
+}
+
+type _WhileDo WhileDo
+
+// NewWhileDo instantiates a new WhileDo object
+// This constructor will assign default values to properties that have it defined,
+// and makes sure properties required by API are set, but the set of arguments
+// will change when the set of required properties is changed
+
+func NewWhileDo(while string, do []map[string]interface{}) *WhileDo {
+	this := WhileDo{}
+	this.While = while
+	this.Do = do
+	return &this
+}
+
+// NewWhileDoWithDefaults instantiates a new WhileDo object
+// This constructor will only assign default values to properties that have it defined,
+// but it doesn't guarantee that properties required by API are set
+func NewWhileDoWithDefaults() *WhileDo {
+	this := WhileDo{}
+
+	return &this
+}
+
+// GetWhile returns the While field value
+func (o *WhileDo) GetWhile() string {
+	if o == nil {
+		var ret string
+		return ret
+	}
+
+	return o.While
+}
+
+// GetWhileOk returns a tuple with the While field value
+// and a boolean to check if the value has been set.
+func (o *WhileDo) GetWhileOk() (*string, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return &o.While, true
+}
+
+// SetWhile sets field value
+func (o *WhileDo) SetWhile(v string) {
+	o.While = v
+}
+
+// GetDo returns the Do field value
+func (o *WhileDo) GetDo() []map[string]interface{} {
+	if o == nil {
+		var ret []map[string]interface{}
+		return ret
+	}
+
+	return o.Do
+}
+
+// GetDoOk returns a tuple with the Do field value
+// and a boolean to check if the value has been set.
+func (o *WhileDo) GetDoOk() ([]map[string]interface{}, bool) {
+	if o == nil {
+		return nil, false
+	}
+	return o.Do, true
+}
+
+// SetDo sets field value
+func (o *WhileDo) SetDo(v []map[string]interface{}) {
+	o.Do = v
+}
+
+func (o WhileDo) MarshalJSON() ([]byte, error) {
+	toSerialize, err := o.ToMap()
+	if err != nil {
+		return []byte{}, err
+	}
+	return json.Marshal(toSerialize)
+}
+
+func (o WhileDo) ToMap() (map[string]interface{}, error) {
+	toSerialize := map[string]interface{}{}
+	toSerialize["while"] = o.While
+	toSerialize["do"] = o.Do
+	return toSerialize, nil
+}
+
+type NullableWhileDo struct {
+	value *WhileDo
+	isSet bool
+}
+
+func (v NullableWhileDo) Get() *WhileDo {
+	return v.value
+}
+
+func (v *NullableWhileDo) Set(val *WhileDo) {
+	v.value = val
+	v.isSet = true
+}
+
+func (v NullableWhileDo) IsSet() bool {
+	return v.isSet
+}
+
+func (v *NullableWhileDo) Unset() {
+	v.value = nil
+	v.isSet = false
+}
+
+func NewNullableWhileDo(val *WhileDo) *NullableWhileDo {
+	return &NullableWhileDo{value: val, isSet: true}
+}
+
+func (v NullableWhileDo) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.value)
+}
+
+func (v *NullableWhileDo) UnmarshalJSON(src []byte) error {
+	v.isSet = true
+	return json.Unmarshal(src, &v.value)
+}
diff --git a/pkg/infobip/time.go b/pkg/infobip/time.go
index e648789..0a2502c 100644
--- a/pkg/infobip/time.go
+++ b/pkg/infobip/time.go
@@ -11,6 +11,7 @@ Contact: support@infobip.com
 package infobip
 
 import (
+	"fmt"
 	"strings"
 	"time"
 )
@@ -21,11 +22,17 @@ type Time struct {
 
 const INFOBIP_TIME_FORMAT = "2006-01-02T15:04:05.000-0700"
 
+var SUPPORTED_DATE_FORMATS = []string{
+	INFOBIP_TIME_FORMAT,       // Default Infobip format
+	"2006-01-02",              // yyyy-MM-dd
+	"2006-01-02T15:04:05.000", // yyyy-MM-ddTHH:mm:ss.SSS (no timezone)
+	"2006-01-02T15:04:05Z",    // yyyy-MM-ddTHH:mm:ssZ (UTC timezone)
+}
+
 func TimeNow() Time {
 	s := time.Now().Format(INFOBIP_TIME_FORMAT)
 	t, _ := time.Parse(INFOBIP_TIME_FORMAT, s)
-	ibtime := Time{t}
-	return ibtime
+	return Time{t}
 }
 
 func (ibtime Time) MarshalJSON() ([]byte, error) {
@@ -35,15 +42,18 @@ func (ibtime Time) MarshalJSON() ([]byte, error) {
 
 func (ibtime *Time) UnmarshalJSON(data []byte) error {
 	s := strings.Trim(string(data), `"`)
-	t, err := time.Parse(INFOBIP_TIME_FORMAT, s)
-	if err != nil {
-		return err
+	var parsedTime time.Time
+	var err error
+	for _, format := range SUPPORTED_DATE_FORMATS {
+		parsedTime, err = time.Parse(format, s)
+		if err == nil {
+			*ibtime = Time{parsedTime}
+			return nil
+		}
 	}
-	*ibtime = Time{t}
-	return nil
+	return fmt.Errorf("unsupported date format: %s", s)
 }
 
 func (ibtime Time) String() string {
-	s := ibtime.T.Format(INFOBIP_TIME_FORMAT)
-	return s
+	return ibtime.T.Format(INFOBIP_TIME_FORMAT)
 }
diff --git a/pkg/infobip/utils.go b/pkg/infobip/utils.go
index e416564..2cf4636 100644
--- a/pkg/infobip/utils.go
+++ b/pkg/infobip/utils.go
@@ -7,7 +7,6 @@ Contact: support@infobip.com
 */
 
 // Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
-
 package infobip
 
 import (
diff --git a/tests/api_test.go b/tests/api_test.go
index a823e1e..f79ca9b 100644
--- a/tests/api_test.go
+++ b/tests/api_test.go
@@ -60,6 +60,49 @@ func SetUpSuccessRequest(requestType string, endpoint string, expectedResponse s
 	)
 }
 
+func SetUpGetRequestWithFileContent(endpoint string, expectedResponseContent []byte, statusCode int) {
+	httpmock.RegisterResponder("GET", "https://"+configuration.Host+endpoint,
+		func(req *http.Request) (*http.Response, error) {
+			resp := httpmock.NewBytesResponse(statusCode, expectedResponseContent)
+
+			resp.Header.Add("Content-Type", "audio/vnd.wave")
+			resp.Header.Add("server", givenRequestHeaders["server"])
+			resp.Header.Add("x-request-id", givenRequestHeaders["x-request-id"])
+			resp.Header.Add("User-Agent", configuration.UserAgent)
+
+			return resp, nil
+		},
+	)
+}
+
+func SetUpGetRequest(url string, givenResponse []byte, statusCode int) {
+	httpmock.RegisterResponder("GET", "https://"+configuration.Host+url,
+		func(req *http.Request) (*http.Response, error) {
+			resp := httpmock.NewBytesResponse(statusCode, givenResponse)
+			resp.Header.Set("Content-Type", "audio/vnd.wave")
+			resp.Header.Add("Server", givenRequestHeaders["server"])
+			resp.Header.Add("X-Request-Id", givenRequestHeaders["x-request-id"])
+			resp.Header.Add("User-Agent", configuration.UserAgent)
+
+			return resp, nil
+		},
+	)
+}
+
+func SetUpGetRequestOctet(url string, givenResponse []byte, statusCode int) {
+	httpmock.RegisterResponder("GET", "https://"+configuration.Host+url,
+		func(req *http.Request) (*http.Response, error) {
+			resp := httpmock.NewBytesResponse(statusCode, givenResponse)
+			resp.Header.Set("Content-Type", "application/octet-stream")
+			resp.Header.Add("Server", givenRequestHeaders["server"])
+			resp.Header.Add("X-Request-Id", givenRequestHeaders["x-request-id"])
+			resp.Header.Add("User-Agent", configuration.UserAgent)
+
+			return resp, nil
+		},
+	)
+}
+
 func ValidateExpectedRequestBodiesMatches(t *testing.T, expectedRequest string, actualRequest string) {
 	require.JSONEq(t, expectedRequest, actualRequest)
 }
diff --git a/tests/call_routing_api_test.go b/tests/call_routing_api_test.go
new file mode 100644
index 0000000..fc49fa1
--- /dev/null
+++ b/tests/call_routing_api_test.go
@@ -0,0 +1,531 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"testing"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldGetCallRoutes(t *testing.T) {
+	givenId := "f8fc8aca-786d-4943-9af2-e7ec01b5e80d"
+	givenName := "SIP endpoint route"
+	givenDestinationsValueUsername := "41793026834"
+	givenDestinationsValueSipTrunkId := "string"
+	givenDestinationsValueCustomHeadersString := "string"
+	givenDestinationsValueType := voice.CALLROUTINGENDPOINTTYPE_SIP
+	givenDestinationsConnectTimeout := int32(30)
+	givenDestinationsRecordingRecordingType := voice.CALLROUTINGRECORDINGTYPE_AUDIO
+	givenDestinationsRecordingRecordingCompositionEnabled := true
+	givenDestinationsRecordingCustomDataString := "string"
+	givenDestinationsRecordingFilePrefix := "string"
+	givenDestinationsType := voice.CALLROUTINGDESTINATIONTYPE_ENDPOINT
+
+	givenSecondId := "f8fc8aca-786d-4943-9af2-e7ec01b5e80d"
+	givenSecondName := "Phone endpoint route"
+	givenSecondDestinationsValuePhoneNumber := "41793026834"
+	givenSecondDestinationsValueType := voice.CALLROUTINGENDPOINTTYPE_PHONE
+	givenSecondDestinationsConnectTimeout := int32(30)
+	givenSecondDestinationsRecordingRecordingType := voice.CALLROUTINGRECORDINGTYPE_AUDIO
+	givenSecondDestinationsRecordingRecordingCompositionEnabled := true
+	givenSecondDestinationsRecordingCustomDataString := "string"
+	givenSecondDestinationsRecordingFilePrefix := "string"
+	givenSecondDestinationsType := voice.CALLROUTINGDESTINATIONTYPE_ENDPOINT
+
+	givenPagingPage := int32(0)
+	givenPagingSize := int32(20)
+	givenPagingTotalPages := int32(1)
+	givenPagingTotalResults := int64(2)
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "id": "%s",
+                "name": "%s",
+                "destinations": [
+                    {
+                        "value": {
+                            "username": "%s",
+                            "sipTrunkId": "%s",
+                            "customHeaders": {
+                                "string": "%s"
+                            },
+                            "type": "%s"
+                        },
+                        "connectTimeout": %d,
+                        "recording": {
+                            "recordingType": "%s",
+                            "recordingComposition": {
+                                "enabled": %t
+                            },
+                            "customData": {
+                                "string": "%s"
+                            },
+                            "filePrefix": "%s"
+                        },
+                        "type": "%s"
+                    }
+                ]
+            },
+            {
+                "id": "%s",
+                "name": "%s",
+                "destinations": [
+                    {
+                        "value": {
+                            "phoneNumber": "%s",
+                            "type": "%s"
+                        },
+                        "connectTimeout": %d,
+                        "recording": {
+                            "recordingType": "%s",
+                            "recordingComposition": {
+                                "enabled": %t
+                            },
+                            "customData": {
+                                "string": "%s"
+                            },
+                            "filePrefix": "%s"
+                        },
+                        "type": "%s"
+                    }
+                ]
+            }
+        ],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenId, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType, givenSecondId, givenSecondName, givenSecondDestinationsValuePhoneNumber, givenSecondDestinationsValueType, givenSecondDestinationsConnectTimeout, givenSecondDestinationsRecordingRecordingType, givenSecondDestinationsRecordingRecordingCompositionEnabled, givenSecondDestinationsRecordingCustomDataString, givenSecondDestinationsRecordingFilePrefix, givenSecondDestinationsType, givenPagingPage, givenPagingSize, givenPagingTotalPages, givenPagingTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/callrouting/1/routes", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		CallRoutingAPI.
+		GetCallRoutes(context.Background()).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 2, len(response.GetResults()))
+
+	firstResult := response.GetResults()[0]
+	assert.Equal(t, givenId, firstResult.GetId())
+	assert.Equal(t, givenName, firstResult.GetName())
+	assert.Equal(t, 1, len(firstResult.GetDestinations()))
+
+	firstDestination := firstResult.GetDestinations()[0].CallRoutingEndpointDestination
+	firstDestinationValue := firstDestination.GetValue().CallRoutingSipEndpoint
+	assert.Equal(t, givenDestinationsValueUsername, firstDestinationValue.GetUsername())
+	assert.Equal(t, givenDestinationsValueSipTrunkId, firstDestinationValue.GetSipTrunkId())
+	assert.Equal(t, givenDestinationsValueCustomHeadersString, firstDestinationValue.GetCustomHeaders()["string"])
+	assert.Equal(t, givenDestinationsValueType, firstDestinationValue.Type)
+	assert.Equal(t, givenDestinationsConnectTimeout, firstDestination.GetConnectTimeout())
+	assert.Equal(t, givenDestinationsRecordingRecordingType, firstDestination.GetRecording().RecordingType)
+	assert.Equal(t, givenDestinationsRecordingRecordingCompositionEnabled, firstDestination.GetRecording().RecordingComposition.GetEnabled())
+	assert.Equal(t, &givenDestinationsRecordingFilePrefix, firstDestination.GetRecording().FilePrefix)
+	assert.Equal(t, givenDestinationsType, firstDestination.Type)
+
+	secondResult := response.GetResults()[1]
+	assert.Equal(t, givenSecondId, secondResult.GetId())
+	assert.Equal(t, givenSecondName, secondResult.GetName())
+	assert.Equal(t, 1, len(secondResult.GetDestinations()))
+	secondDestination := secondResult.GetDestinations()[0].CallRoutingEndpointDestination
+	secondDestinationValue := secondDestination.GetValue().CallRoutingPhoneEndpoint
+	assert.Equal(t, givenSecondDestinationsValuePhoneNumber, secondDestinationValue.GetPhoneNumber())
+	assert.Equal(t, givenSecondDestinationsValueType, secondDestinationValue.Type)
+	assert.Equal(t, givenSecondDestinationsConnectTimeout, secondDestination.GetConnectTimeout())
+	assert.Equal(t, givenSecondDestinationsRecordingRecordingType, secondDestination.GetRecording().RecordingType)
+	assert.Equal(t, givenSecondDestinationsRecordingRecordingCompositionEnabled, secondDestination.GetRecording().RecordingComposition.GetEnabled())
+	assert.Equal(t, &givenSecondDestinationsRecordingFilePrefix, secondDestination.GetRecording().FilePrefix)
+	assert.Equal(t, givenSecondDestinationsType, secondDestination.Type)
+
+	paging := response.GetPaging()
+	assert.Equal(t, givenPagingPage, paging.GetPage())
+	assert.Equal(t, givenPagingSize, paging.GetSize())
+	assert.Equal(t, givenPagingTotalPages, paging.GetTotalPages())
+	assert.Equal(t, givenPagingTotalResults, paging.GetTotalResults())
+}
+
+func TestShouldPostCallRoute(t *testing.T) {
+	givenId := "f8fc8aca-786d-4943-9af2-e7ec01b5e80d"
+	givenName := "SIP endpoint route"
+	givenDestinationsValueUsername := "41793026834"
+	givenDestinationsValueSipTrunkId := "string"
+	givenDestinationsValueCustomHeadersString := "string"
+	givenDestinationsValueType := voice.CALLROUTINGENDPOINTTYPE_SIP
+	givenDestinationsConnectTimeout := int32(30)
+	givenDestinationsRecordingRecordingType := voice.CALLROUTINGRECORDINGTYPE_AUDIO
+	givenDestinationsRecordingRecordingCompositionEnabled := true
+	givenDestinationsRecordingCustomDataString := "string"
+	givenDestinationsRecordingFilePrefix := "string"
+	givenDestinationsType := voice.CALLROUTINGDESTINATIONTYPE_ENDPOINT
+
+	expectedRequest := fmt.Sprintf(`{
+       "name": "%s",
+       "destinations": [
+           {
+               "value": {
+                   "username": "%s",
+                   "sipTrunkId": "%s",
+                   "customHeaders": {
+                       "string": "%s"
+                   },
+                   "type": "%s"
+               },
+               "connectTimeout": %d,
+               "recording": {
+                   "recordingType": "%s",
+                   "recordingComposition": {
+                       "enabled": %t
+                   },
+                   "customData": {
+                       "string": "%s"
+                   },
+                   "filePrefix": "%s"
+               },
+               "type": "%s"
+           }
+       ]
+   }`, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType)
+
+	sipEndpoint := voice.NewCallRoutingSipEndpoint(givenDestinationsValueSipTrunkId)
+	sipEndpoint.SetUsername(givenDestinationsValueUsername)
+	sipEndpoint.SetCustomHeaders(map[string]string{"string": givenDestinationsValueCustomHeadersString})
+	callRoutingEndpoint := voice.CallRoutingSipEndpointAsCallRoutingEndpoint(sipEndpoint)
+	destination := voice.NewCallRoutingEndpointDestination(callRoutingEndpoint)
+
+	destination.SetConnectTimeout(givenDestinationsConnectTimeout)
+	recording := voice.NewCallRoutingRecording(givenDestinationsRecordingRecordingType)
+	recordingComposition := voice.NewCallRoutingRecordingComposition(givenDestinationsRecordingRecordingCompositionEnabled)
+	recording.SetRecordingComposition(*recordingComposition)
+	recording.SetCustomData(map[string]string{"string": givenDestinationsRecordingCustomDataString})
+	recording.SetFilePrefix(givenDestinationsRecordingFilePrefix)
+	destination.SetRecording(*recording)
+	destinations := []voice.CallRoutingDestination{voice.CallRoutingEndpointDestinationAsCallRoutingDestination(destination)}
+	request := voice.NewCallRoutingRouteRequest(givenName, destinations)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "destinations": [
+           {
+               "value": {
+                   "username": "%s",
+                   "sipTrunkId": "%s",
+                   "customHeaders": {
+                       "string": "%s"
+                   },
+                   "type": "%s"
+               },
+               "connectTimeout": %d,
+               "recording": {
+                   "recordingType": "%s",
+                   "recordingComposition": {
+                       "enabled": %t
+                   },
+                   "customData": {
+                       "string": "%s"
+                   },
+                   "filePrefix": "%s"
+               },
+               "type": "%s"
+           }
+       ]
+   }`, givenId, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/callrouting/1/routes", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		CallRoutingAPI.
+		CreateCallRoute(context.Background()).
+		CallRoutingRouteRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetDestinations()))
+	destinationResponse := response.GetDestinations()[0].CallRoutingEndpointDestination
+	destinationResponseValue := destinationResponse.GetValue().CallRoutingSipEndpoint
+	assert.Equal(t, givenDestinationsValueUsername, destinationResponseValue.GetUsername())
+	assert.Equal(t, givenDestinationsValueSipTrunkId, destinationResponseValue.GetSipTrunkId())
+	assert.Equal(t, givenDestinationsValueCustomHeadersString, destinationResponseValue.GetCustomHeaders()["string"])
+	assert.Equal(t, givenDestinationsValueType, destinationResponseValue.Type)
+	assert.Equal(t, givenDestinationsConnectTimeout, destinationResponse.GetConnectTimeout())
+	assert.Equal(t, givenDestinationsRecordingRecordingType, destinationResponse.GetRecording().RecordingType)
+	assert.Equal(t, givenDestinationsRecordingRecordingCompositionEnabled, destinationResponse.GetRecording().RecordingComposition.GetEnabled())
+	assert.Equal(t, &givenDestinationsRecordingFilePrefix, destinationResponse.GetRecording().FilePrefix)
+	assert.Equal(t, givenDestinationsType, destinationResponse.Type)
+}
+
+func TestShouldGetCallRoute(t *testing.T) {
+	givenId := "f8fc8aca-786d-4943-9af2-e7ec01b5e80d"
+	givenName := "SIP endpoint route"
+	givenDestinationsValueUsername := "41793026834"
+	givenDestinationsValueSipTrunkId := "string"
+	givenDestinationsValueCustomHeadersString := "string"
+	givenDestinationsValueType := voice.CALLROUTINGENDPOINTTYPE_SIP
+	givenDestinationsConnectTimeout := int32(30)
+	givenDestinationsRecordingRecordingType := voice.CALLROUTINGRECORDINGTYPE_AUDIO
+	givenDestinationsRecordingRecordingCompositionEnabled := true
+	givenDestinationsRecordingCustomDataString := "string"
+	givenDestinationsRecordingFilePrefix := "string"
+	givenDestinationsType := voice.CALLROUTINGDESTINATIONTYPE_ENDPOINT
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "destinations": [
+           {
+               "value": {
+                   "username": "%s",
+                   "sipTrunkId": "%s",
+                   "customHeaders": {
+                       "string": "%s"
+                   },
+                   "type": "%s"
+               },
+               "connectTimeout": %d,
+               "recording": {
+                   "recordingType": "%s",
+                   "recordingComposition": {
+                       "enabled": %t
+                   },
+                   "customData": {
+                       "string": "%s"
+                   },
+                   "filePrefix": "%s"
+               },
+               "type": "%s"
+           }
+       ]
+   }`, givenId, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/callrouting/1/routes/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		CallRoutingAPI.
+		GetCallRoute(context.Background(), givenId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetDestinations()))
+	destinationResponse := response.GetDestinations()[0].CallRoutingEndpointDestination
+	destinationResponseValue := destinationResponse.GetValue().CallRoutingSipEndpoint
+	assert.Equal(t, givenDestinationsValueUsername, destinationResponseValue.GetUsername())
+	assert.Equal(t, givenDestinationsValueSipTrunkId, destinationResponseValue.GetSipTrunkId())
+	assert.Equal(t, givenDestinationsValueCustomHeadersString, destinationResponseValue.GetCustomHeaders()["string"])
+	assert.Equal(t, givenDestinationsValueType, destinationResponseValue.Type)
+	assert.Equal(t, givenDestinationsConnectTimeout, destinationResponse.GetConnectTimeout())
+	assert.Equal(t, givenDestinationsRecordingRecordingType, destinationResponse.GetRecording().RecordingType)
+	assert.Equal(t, givenDestinationsRecordingRecordingCompositionEnabled, destinationResponse.GetRecording().RecordingComposition.GetEnabled())
+	assert.Equal(t, &givenDestinationsRecordingFilePrefix, destinationResponse.GetRecording().FilePrefix)
+	assert.Equal(t, givenDestinationsType, destinationResponse.Type)
+}
+
+func TestShouldPutCallRoute(t *testing.T) {
+	givenId := "f8fc8aca-786d-4943-9af2-e7ec01b5e80d"
+	givenName := "SIP endpoint route"
+	givenDestinationsValueUsername := "41793026834"
+	givenDestinationsValueSipTrunkId := "string"
+	givenDestinationsValueCustomHeadersString := "string"
+	givenDestinationsValueType := voice.CALLROUTINGENDPOINTTYPE_SIP
+	givenDestinationsConnectTimeout := int32(30)
+	givenDestinationsRecordingRecordingType := voice.CALLROUTINGRECORDINGTYPE_AUDIO
+	givenDestinationsRecordingRecordingCompositionEnabled := true
+	givenDestinationsRecordingCustomDataString := "string"
+	givenDestinationsRecordingFilePrefix := "string"
+	givenDestinationsType := voice.CALLROUTINGDESTINATIONTYPE_ENDPOINT
+
+	expectedRequest := fmt.Sprintf(`{
+        "name": "%s",
+        "destinations": [
+            {
+                "value": {
+                    "username": "%s",
+                    "sipTrunkId": "%s",
+                    "customHeaders": {
+                        "string": "%s"
+                    },
+                    "type": "%s"
+                },
+                "connectTimeout": %d,
+                "recording": {
+                    "recordingType": "%s",
+                    "recordingComposition": {
+                        "enabled": %t
+                    },
+                    "customData": {
+                        "string": "%s"
+                    },
+                    "filePrefix": "%s"
+                },
+                "type": "%s"
+            }
+        ]
+    }`, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType)
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "destinations": [
+            {
+                "value": {
+                    "username": "%s",
+                    "sipTrunkId": "%s",
+                    "customHeaders": {
+                        "string": "%s"
+                    },
+                    "type": "%s"
+                },
+                "connectTimeout": %d,
+                "recording": {
+                    "recordingType": "%s",
+                    "recordingComposition": {
+                        "enabled": %t
+                    },
+                    "customData": {
+                        "string": "%s"
+                    },
+                    "filePrefix": "%s"
+                },
+                "type": "%s"
+            }
+        ]
+    }`, givenId, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/callrouting/1/routes/%s", givenId), givenResponse, 200)
+
+	sipEndpoint := voice.NewCallRoutingSipEndpoint(givenDestinationsValueSipTrunkId)
+	sipEndpoint.SetUsername(givenDestinationsValueUsername)
+	sipEndpoint.SetCustomHeaders(map[string]string{"string": givenDestinationsValueCustomHeadersString})
+	callRoutingEndpoint := voice.CallRoutingSipEndpointAsCallRoutingEndpoint(sipEndpoint)
+	destination := voice.NewCallRoutingEndpointDestination(callRoutingEndpoint)
+	destination.SetConnectTimeout(givenDestinationsConnectTimeout)
+	recording := voice.NewCallRoutingRecording(givenDestinationsRecordingRecordingType)
+	recordingComposition := voice.NewCallRoutingRecordingComposition(givenDestinationsRecordingRecordingCompositionEnabled)
+	recording.SetRecordingComposition(*recordingComposition)
+	recording.SetCustomData(map[string]string{"string": givenDestinationsRecordingCustomDataString})
+	recording.SetFilePrefix(givenDestinationsRecordingFilePrefix)
+	destination.SetRecording(*recording)
+	destinations := []voice.CallRoutingDestination{voice.CallRoutingEndpointDestinationAsCallRoutingDestination(destination)}
+	request := voice.NewCallRoutingRouteRequest(givenName, destinations)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.
+		CallRoutingAPI.
+		UpdateCallRoute(context.Background(), givenId).
+		CallRoutingRouteRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetDestinations()))
+	destinationResponse := response.GetDestinations()[0].CallRoutingEndpointDestination
+	destinationResponseValue := destinationResponse.GetValue().CallRoutingSipEndpoint
+	assert.Equal(t, givenDestinationsValueUsername, destinationResponseValue.GetUsername())
+	assert.Equal(t, givenDestinationsValueSipTrunkId, destinationResponseValue.GetSipTrunkId())
+	assert.Equal(t, givenDestinationsValueCustomHeadersString, destinationResponseValue.GetCustomHeaders()["string"])
+	assert.Equal(t, givenDestinationsValueType, destinationResponseValue.Type)
+	assert.Equal(t, givenDestinationsConnectTimeout, destinationResponse.GetConnectTimeout())
+	assert.Equal(t, givenDestinationsRecordingRecordingType, destinationResponse.GetRecording().RecordingType)
+	assert.Equal(t, givenDestinationsRecordingRecordingCompositionEnabled, destinationResponse.GetRecording().RecordingComposition.GetEnabled())
+	assert.Equal(t, &givenDestinationsRecordingFilePrefix, destinationResponse.GetRecording().FilePrefix)
+	assert.Equal(t, givenDestinationsType, destinationResponse.Type)
+}
+
+func TestShouldDeleteCallRoute(t *testing.T) {
+	givenId := "f8fc8aca-786d-4943-9af2-e7ec01b5e80d"
+	givenName := "SIP endpoint route"
+	givenDestinationsValueUsername := "41793026834"
+	givenDestinationsValueSipTrunkId := "string"
+	givenDestinationsValueCustomHeadersString := "string"
+	givenDestinationsValueType := voice.CALLROUTINGENDPOINTTYPE_SIP
+	givenDestinationsConnectTimeout := int32(30)
+	givenDestinationsRecordingRecordingType := voice.CALLROUTINGRECORDINGTYPE_AUDIO
+	givenDestinationsRecordingRecordingCompositionEnabled := true
+	givenDestinationsRecordingCustomDataString := "string"
+	givenDestinationsRecordingFilePrefix := "string"
+	givenDestinationsType := voice.CALLROUTINGDESTINATIONTYPE_ENDPOINT
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "destinations": [
+            {
+                "value": {
+                    "username": "%s",
+                    "sipTrunkId": "%s",
+                    "customHeaders": {
+                        "string": "%s"
+                    },
+                    "type": "%s"
+                },
+                "connectTimeout": %d,
+                "recording": {
+                    "recordingType": "%s",
+                    "recordingComposition": {
+                        "enabled": %t
+                    },
+                    "customData": {
+                        "string": "%s"
+                    },
+                    "filePrefix": "%s"
+                },
+                "type": "%s"
+            }
+        ]
+    }`, givenId, givenName, givenDestinationsValueUsername, givenDestinationsValueSipTrunkId, givenDestinationsValueCustomHeadersString, givenDestinationsValueType, givenDestinationsConnectTimeout, givenDestinationsRecordingRecordingType, givenDestinationsRecordingRecordingCompositionEnabled, givenDestinationsRecordingCustomDataString, givenDestinationsRecordingFilePrefix, givenDestinationsType)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/callrouting/1/routes/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		CallRoutingAPI.
+		DeleteCallRoute(context.Background(), givenId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetDestinations()))
+	destinationResponse := response.GetDestinations()[0].CallRoutingEndpointDestination
+	destinationResponseValue := destinationResponse.GetValue().CallRoutingSipEndpoint
+	assert.Equal(t, givenDestinationsValueUsername, destinationResponseValue.GetUsername())
+	assert.Equal(t, givenDestinationsValueSipTrunkId, destinationResponseValue.GetSipTrunkId())
+	assert.Equal(t, givenDestinationsValueCustomHeadersString, destinationResponseValue.GetCustomHeaders()["string"])
+	assert.Equal(t, givenDestinationsValueType, destinationResponseValue.Type)
+	assert.Equal(t, givenDestinationsConnectTimeout, destinationResponse.GetConnectTimeout())
+	assert.Equal(t, givenDestinationsRecordingRecordingType, destinationResponse.GetRecording().RecordingType)
+	assert.Equal(t, givenDestinationsRecordingRecordingCompositionEnabled, destinationResponse.GetRecording().RecordingComposition.GetEnabled())
+	assert.Equal(t, &givenDestinationsRecordingFilePrefix, destinationResponse.GetRecording().FilePrefix)
+	assert.Equal(t, givenDestinationsType, destinationResponse.Type)
+}
diff --git a/tests/calls_api_test.go b/tests/calls_api_test.go
new file mode 100644
index 0000000..9dac52e
--- /dev/null
+++ b/tests/calls_api_test.go
@@ -0,0 +1,5072 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+	"testing"
+	"time"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldApplicationTransfer(t *testing.T) {
+	givenStatus := voice.ACTIONSTATUS_PENDING
+	givenTimeout := int32(20)
+	givenCustomDataField := "custom"
+	givenCustomDataFieldValue := "data"
+	givenEntityId := "entityId"
+	givenDestinationApplicationId := "61c060db2675060027d8c7a6"
+	givenDestinationCallsConfigurationId := "dc5942707c704551a00cd2ea"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenDestinationApplicationId,
+	}
+	givenCustomData := map[string]string{
+		givenCustomDataField: givenCustomDataFieldValue,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+		"destinationCallsConfigurationId": "%s",
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "timeout": %d,
+        "customData": {
+            "%s": "%s"
+        }
+    }`, givenDestinationCallsConfigurationId, givenDestinationApplicationId, givenEntityId, givenTimeout, givenCustomDataField, givenCustomDataFieldValue)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/application-transfer", givenDestinationApplicationId), givenResponse, 200)
+
+	request := voice.ApplicationTransferRequest{
+		DestinationCallsConfigurationId: givenDestinationCallsConfigurationId,
+		Platform:                        &givenPlatform,
+		Timeout:                         &givenTimeout,
+		CustomData:                      &givenCustomData,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ApplicationTransfer(context.Background(), givenDestinationApplicationId).ApplicationTransferRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldApplicationTransferAccept(t *testing.T) {
+	givenCallId := "123"
+	givenTransferId := "1234"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/application-transfer/%s/accept", givenCallId, givenTransferId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.ApplicationTransferAccept(context.Background(), givenCallId, givenTransferId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldApplicationTransferReject(t *testing.T) {
+	givenCallId := "123"
+	givenTransferId := "1234"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/application-transfer/%s/reject", givenCallId, givenTransferId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.ApplicationTransferReject(context.Background(), givenCallId, givenTransferId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldGetCalls(t *testing.T) {
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenEntityId := "entityId"
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId,
+	}
+	givenFrom := "44790123456"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenUserMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenParentCallId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenDetectionResult := voice.DETECTIONRESULT_HUMAN
+	givenRingDuration := int32(3)
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+	givenPage := int32(0)
+	givenPageSize := int32(1)
+	givenPageTotalPages := int32(0)
+	givenPageTotalResults := int64(0)
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "id": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "from": "%s",
+                "to": "%s",
+                "direction": "%s",
+                "state": "%s",
+                "media": {
+                    "audio": {
+                        "muted": %t,
+                        "userMuted": %t,
+                        "deaf": %t
+                    },
+                    "video": {
+                        "camera": %t,
+                        "screenShare": %t
+                    }
+                },
+                "startTime": "%s",
+                "answerTime": "%s",
+                "endTime": "%s",
+                "parentCallId": "%s",
+                "machineDetection": {
+                    "detectionResult": "%s"
+                },
+                "ringDuration": %d,
+                "platform": {
+                    "applicationId": "%s",
+                    "entityId": "%s"
+                },
+                "conferenceId": "%s",
+                "customData": {
+                    "key1": "%s",
+                    "key2": "%s"
+                }
+            }
+        ],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenUserMuted, givenDeaf, givenCamera, givenScreenShare, givenStartTime, givenAnswerTime, givenEndTime, givenParentCallId, givenDetectionResult, givenRingDuration, givenApplicationId, givenEntityId, givenConferenceId, givenKey1, givenKey2, givenPage, givenPageSize, givenPageTotalPages, givenPageTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/calls", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCalls(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenPage, response.GetPaging().Page)
+	assert.Equal(t, givenPageSize, response.GetPaging().Size)
+	assert.Equal(t, givenPageTotalPages, response.GetPaging().TotalPages)
+	assert.Equal(t, givenPageTotalResults, response.GetPaging().TotalResults)
+	assert.Len(t, response.GetResults(), 1)
+
+	result := response.GetResults()[0]
+	assert.Equal(t, givenCallId, result.GetId())
+	assert.Equal(t, givenType, result.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, result.GetFrom())
+	assert.Equal(t, givenTo, result.GetTo())
+	assert.Equal(t, givenDirection, result.GetDirection())
+	assert.Equal(t, givenCallState, result.GetState())
+	resultMedia := result.GetMedia()
+	resultAudio := resultMedia.GetAudio()
+	resultVideo := resultMedia.GetVideo()
+	assert.Equal(t, givenMuted, resultAudio.GetMuted())
+	assert.Equal(t, givenUserMuted, resultAudio.GetUserMuted())
+	assert.Equal(t, givenDeaf, resultAudio.GetDeaf())
+	assert.Equal(t, givenCamera, resultVideo.GetCamera())
+	assert.Equal(t, givenScreenShare, resultVideo.GetScreenShare())
+	assert.Equal(t, ibTimeStartTime, result.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, result.GetAnswerTime())
+	assert.Equal(t, ibTimeEndTime, result.GetEndTime())
+	assert.Equal(t, givenParentCallId, result.GetParentCallId())
+	assert.Equal(t, &givenDetectionResult, result.GetMachineDetection().DetectionResult)
+	assert.Equal(t, givenRingDuration, result.GetRingDuration())
+	assert.Equal(t, givenPlatform, result.GetPlatform())
+	assert.Equal(t, givenConferenceId, result.GetConferenceId())
+	assert.Equal(t, givenKey1, result.GetCustomData()["key1"])
+	assert.Equal(t, givenKey2, result.GetCustomData()["key2"])
+}
+
+func TestShouldCreateCall(t *testing.T) {
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenFrom := "44790123456"
+	givenConnectTimeout := int32(0)
+	givenRecordingType := voice.RECORDINGTYPE_AUDIO
+	givenMaxDuration := int32(28800)
+	givenEntityId := "entityId"
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId,
+	}
+	givenParentCallId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenCallsConfigurationId := "dc5942707c704551a00cd2ea"
+
+	expectedRequest := fmt.Sprintf(`{
+		"callsConfigurationId": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "from": "%s",
+        "connectTimeout": %d,
+        "recording": {
+            "recordingType": "%s"
+        },
+        "maxDuration": %d,
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "parentCallId": "%s"
+    }`, givenCallsConfigurationId, givenPhoneNumber, givenType, givenFrom, givenConnectTimeout, givenRecordingType, givenMaxDuration, givenApplicationId, givenEntityId, givenParentCallId)
+
+	givenCallId := "string"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenUserMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenDetectionResult := voice.DETECTIONRESULT_HUMAN
+	givenRingDuration := int32(3)
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "from": "%s",
+        "to": "%s",
+        "direction": "%s",
+        "state": "%s",
+        "media": {
+            "audio": {
+                "muted": %t,
+                "userMuted": %t,
+                "deaf": %t
+            },
+            "video": {
+                "camera": %t,
+                "screenShare": %t
+            }
+        },
+        "startTime": "%s",
+        "answerTime": "%s",
+        "endTime": "%s",
+        "parentCallId": "%s",
+        "machineDetection": {
+            "detectionResult": "%s"
+        },
+        "ringDuration": %d,
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "conferenceId": "%s",
+        "customData": {
+            "key1": "%s",
+            "key2": "%s"
+        }
+    }`, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenUserMuted, givenDeaf, givenCamera, givenScreenShare, givenStartTime, givenAnswerTime, givenEndTime, givenParentCallId, givenDetectionResult, givenRingDuration, givenApplicationId, givenEntityId, givenConferenceId, givenKey1, givenKey2)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/calls", givenResponse, 201)
+
+	request := voice.CallRequest{
+		CallsConfigurationId: givenCallsConfigurationId,
+		Endpoint:             voice.PhoneEndpointAsCallEndpoint(voice.NewPhoneEndpoint(givenPhoneNumber)),
+		From:                 givenFrom,
+		ConnectTimeout:       &givenConnectTimeout,
+		Recording: &voice.CallRecordingRequest{
+			RecordingType: givenRecordingType,
+		},
+		MaxDuration:  &givenMaxDuration,
+		Platform:     &givenPlatform,
+		ParentCallId: &givenParentCallId,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateCall(context.Background()).CallRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenCallId, response.GetId())
+	assert.Equal(t, givenType, response.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, response.GetFrom())
+	assert.Equal(t, givenTo, response.GetTo())
+	assert.Equal(t, givenDirection, response.GetDirection())
+	assert.Equal(t, givenCallState, response.GetState())
+	resultMedia := response.GetMedia()
+	resultAudio := resultMedia.GetAudio()
+	resultVideo := resultMedia.GetVideo()
+	assert.Equal(t, givenMuted, resultAudio.GetMuted())
+	assert.Equal(t, givenUserMuted, resultAudio.GetUserMuted())
+	assert.Equal(t, givenDeaf, resultAudio.GetDeaf())
+	assert.Equal(t, givenCamera, resultVideo.GetCamera())
+	assert.Equal(t, givenScreenShare, resultVideo.GetScreenShare())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, response.GetAnswerTime())
+	assert.Equal(t, ibTimeEndTime, response.GetEndTime())
+	assert.Equal(t, givenParentCallId, response.GetParentCallId())
+	assert.Equal(t, &givenDetectionResult, response.GetMachineDetection().DetectionResult)
+	assert.Equal(t, givenRingDuration, response.GetRingDuration())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	assert.Equal(t, givenConferenceId, response.GetConferenceId())
+	assert.Equal(t, givenKey1, response.GetCustomData()["key1"])
+	assert.Equal(t, givenKey2, response.GetCustomData()["key2"])
+}
+
+func TestShouldGetCall(t *testing.T) {
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+	givenFrom := "44790123456"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenUserMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenParentCallId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenDetectionResult := voice.DETECTIONRESULT_HUMAN
+	givenRingDuration := int32(3)
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "from": "%s",
+        "to": "%s",
+        "direction": "%s",
+        "state": "%s",
+        "media": {
+            "audio": {
+                "muted": %t,
+                "userMuted": %t,
+                "deaf": %t
+            },
+            "video": {
+                "camera": %t,
+                "screenShare": %t
+            }
+        },
+        "startTime": "%s",
+        "answerTime": "%s",
+        "endTime": "%s",
+        "parentCallId": "%s",
+        "machineDetection": {
+            "detectionResult": "%s"
+        },
+        "ringDuration": %d,
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "conferenceId": "%s",
+        "customData": {
+            "key1": "%s",
+            "key2": "%s"
+        }
+    }`, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenUserMuted, givenDeaf, givenCamera, givenScreenShare, givenStartTime, givenAnswerTime, givenEndTime, givenParentCallId, givenDetectionResult, givenRingDuration, givenApplicationId, givenEntityId, givenConferenceId, givenKey1, givenKey2)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/calls/%s", givenCallId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCall(context.Background(), givenCallId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenCallId, response.GetId())
+	assert.Equal(t, givenType, response.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, response.GetFrom())
+	assert.Equal(t, givenTo, response.GetTo())
+	assert.Equal(t, givenDirection, response.GetDirection())
+	assert.Equal(t, givenCallState, response.GetState())
+	assert.Equal(t, givenMuted, response.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenUserMuted, response.GetMedia().Audio.GetUserMuted())
+	assert.Equal(t, givenDeaf, response.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenCamera, response.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenScreenShare, response.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, response.GetAnswerTime())
+	assert.Equal(t, ibTimeEndTime, response.GetEndTime())
+	assert.Equal(t, givenParentCallId, response.GetParentCallId())
+	assert.Equal(t, &givenDetectionResult, response.GetMachineDetection().DetectionResult)
+	assert.Equal(t, givenRingDuration, response.GetRingDuration())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	assert.Equal(t, givenConferenceId, response.GetConferenceId())
+	assert.Equal(t, givenKey1, response.GetCustomData()["key1"])
+	assert.Equal(t, givenKey2, response.GetCustomData()["key2"])
+}
+
+func TestShouldGetCallsHistory(t *testing.T) {
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenFrom := "44790123456"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenUserMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenParentCallId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenDetectionResult := voice.DETECTIONRESULT_HUMAN
+	givenDuration := int64(5)
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenHasCameraVideo := false
+	givenHasScreenShareVideo := false
+	givenErrorCodeId := int32(2)
+	givenErrorCodeName := "NORMAL_HANGUP"
+	givenErrorCodeDescription := "The call has ended with hangup initiated by caller, callee or API"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+	givenPage := int32(0)
+	givenPageSize := int32(1)
+	givenPageTotalPages := int32(0)
+	givenPageTotalResults := int64(0)
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "callId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "from": "%s",
+                "to": "%s",
+                "direction": "%s",
+                "state": "%s",
+                "media": {
+                    "audio": {
+                        "muted": %t,
+                        "userMuted": %t,
+                        "deaf": %t
+                    },
+                    "video": {
+                        "camera": %t,
+                        "screenShare": %t
+                    }
+                },
+                "startTime": "%s",
+                "answerTime": "%s",
+                "endTime": "%s",
+                "parentCallId": "%s",
+                "machineDetection": {
+                    "detectionResult": "%s"
+                },
+                "platform": {
+                    "applicationId": "%s",
+                    "entityId": "%s"
+                },
+                "conferenceIds": [
+                    "%s"
+                ],
+                "duration": %d,
+                "hasCameraVideo": %t,
+                "hasScreenshareVideo": %t,
+                "errorCode": {
+                    "id": %d,
+                    "name": "%s",
+                    "description": "%s"
+                },
+                "customData": {
+                    "key1": "%s",
+                    "key2": "%s"
+                }
+            }
+        ],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenUserMuted, givenDeaf, givenCamera, givenScreenShare, givenStartTime, givenAnswerTime, givenEndTime, givenParentCallId, givenDetectionResult, givenApplicationId, givenEntityId, givenConferenceId, givenDuration, givenHasCameraVideo, givenHasScreenShareVideo, givenErrorCodeId, givenErrorCodeName, givenErrorCodeDescription, givenKey1, givenKey2, givenPage, givenPageSize, givenPageTotalPages, givenPageTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/calls/history", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallsHistory(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenPage, response.GetPaging().Page)
+	assert.Equal(t, givenPageSize, response.GetPaging().Size)
+	assert.Equal(t, givenPageTotalPages, response.GetPaging().TotalPages)
+	assert.Equal(t, givenPageTotalResults, response.GetPaging().TotalResults)
+	assert.Len(t, response.GetResults(), 1)
+
+	result := response.GetResults()[0]
+	assert.Equal(t, givenCallId, result.GetCallId())
+	assert.Equal(t, givenType, result.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, result.GetFrom())
+	assert.Equal(t, givenTo, result.GetTo())
+	assert.Equal(t, givenDirection, result.GetDirection())
+	assert.Equal(t, givenCallState, result.GetState())
+	assert.Equal(t, ibTimeStartTime, result.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, result.GetAnswerTime())
+	assert.Equal(t, ibTimeEndTime, result.GetEndTime())
+	assert.Equal(t, givenParentCallId, result.GetParentCallId())
+	assert.Equal(t, &givenDetectionResult, result.GetMachineDetection().DetectionResult)
+	assert.Equal(t, givenPlatform, result.GetPlatform())
+	assert.Equal(t, givenConferenceId, result.GetConferenceIds()[0])
+	assert.Equal(t, givenDuration, result.GetDuration())
+	assert.Equal(t, givenHasCameraVideo, result.GetHasCameraVideo())
+	assert.Equal(t, givenHasScreenShareVideo, result.GetHasScreenshareVideo())
+	assert.Equal(t, &givenErrorCodeId, result.GetErrorCode().Id)
+	assert.Equal(t, &givenErrorCodeName, result.GetErrorCode().Name)
+	assert.Equal(t, &givenErrorCodeDescription, result.GetErrorCode().Description)
+	assert.Equal(t, givenKey1, result.GetCustomData()["key1"])
+	assert.Equal(t, givenKey2, result.GetCustomData()["key2"])
+}
+
+func TestShouldGetCallHistory(t *testing.T) {
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenFrom := "44790123456"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenUserMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenParentCallId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenDetectionResult := voice.DETECTIONRESULT_HUMAN
+	givenDuration := int64(5)
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenHasCameraVideo := false
+	givenHasScreenShareVideo := false
+	givenErrorCodeId := int32(2)
+	givenErrorCodeName := "NORMAL_HANGUP"
+	givenErrorCodeDescription := "The call has ended with hangup initiated by caller, callee or API"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+	givenDialogId := "dialogId"
+	givenSender := "sender"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "callId": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "from": "%s",
+        "to": "%s",
+        "direction": "%s",
+        "state": "%s",
+        "media": {
+            "audio": {
+                "muted": %t,
+                "userMuted": %t,
+                "deaf": %t
+            },
+            "video": {
+                "camera": %t,
+                "screenShare": %t
+            }
+        },
+        "startTime": "%s",
+        "answerTime": "%s",
+        "endTime": "%s",
+        "parentCallId": "%s",
+        "machineDetection": {
+            "detectionResult": "%s"
+        },
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "conferenceIds": [
+            "%s"
+        ],
+        "duration": %d,
+        "hasCameraVideo": %t,
+        "hasScreenshareVideo": %t,
+        "errorCode": {
+            "id": %d,
+            "name": "%s",
+            "description": "%s"
+        },
+        "customData": {
+            "key1": "%s",
+            "key2": "%s"
+        },
+        "dialogId": "%s",
+        "sender": "%s"
+    }`, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenUserMuted, givenDeaf, givenCamera, givenScreenShare, givenStartTime, givenAnswerTime, givenEndTime, givenParentCallId, givenDetectionResult, givenApplicationId, givenEntityId, givenConferenceId, givenDuration, givenHasCameraVideo, givenHasScreenShareVideo, givenErrorCodeId, givenErrorCodeName, givenErrorCodeDescription, givenKey1, givenKey2, givenDialogId, givenSender)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/calls/%s/history", givenCallId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallHistory(context.Background(), givenCallId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenCallId, response.GetCallId())
+	assert.Equal(t, givenType, response.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, response.GetFrom())
+	assert.Equal(t, givenTo, response.GetTo())
+	assert.Equal(t, givenDirection, response.GetDirection())
+	assert.Equal(t, givenCallState, response.GetState())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, response.GetAnswerTime())
+	assert.Equal(t, ibTimeEndTime, response.GetEndTime())
+	assert.Equal(t, givenParentCallId, response.GetParentCallId())
+	assert.Equal(t, &givenDetectionResult, response.GetMachineDetection().DetectionResult)
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	assert.Equal(t, givenConferenceId, response.GetConferenceIds()[0])
+	assert.Equal(t, givenDuration, response.GetDuration())
+	assert.Equal(t, givenHasCameraVideo, response.GetHasCameraVideo())
+	assert.Equal(t, givenHasScreenShareVideo, response.GetHasScreenshareVideo())
+	assert.Equal(t, &givenErrorCodeId, response.GetErrorCode().Id)
+	assert.Equal(t, &givenErrorCodeName, response.GetErrorCode().Name)
+	assert.Equal(t, &givenErrorCodeDescription, response.GetErrorCode().Description)
+	assert.Equal(t, givenKey1, response.GetCustomData()["key1"])
+	assert.Equal(t, givenKey2, response.GetCustomData()["key2"])
+	assert.Equal(t, givenDialogId, response.GetDialogId())
+	assert.Equal(t, givenSender, response.GetSender())
+}
+
+func TestShouldConnectCalls(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId1 := "d6d6058c-5077-49f9-a030-2fc40e8ca195"
+	givenCallId2 := "6539fcb4-4b2a-4ac9-a43a-d60807af29b0"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "participants": [
+            {
+                "callId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "state": "%s",
+                "joinTime": "%s",
+                "media": {
+                    "audio": {
+                        "muted": %t,
+                        "deaf": %t
+                    },
+                    "video": {
+                        "camera": %t,
+                        "screenShare": %t
+                    }
+                }
+            },
+            {
+                "callId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "state": "%s",
+                "joinTime": "%s",
+                "media": {
+                    "audio": {
+                        "muted": %t,
+                        "deaf": %t
+                    },
+                    "video": {
+                        "camera": %t,
+                        "screenShare": %t
+                    }
+                }
+            }
+        ],
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        }
+    }`, givenId, givenName, givenCallId1, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenCallId2, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId)
+
+	expectedRequest := fmt.Sprintf(`{
+        "callIds": [
+            "%s",
+            "%s"
+        ]
+    }`, givenCallId1, givenCallId2)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/connect", givenResponse, 200)
+
+	request := voice.ConnectRequest{
+		CallIds: []string{givenCallId1, givenCallId2},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ConnectCalls(context.Background()).ConnectRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.NotNil(t, response.GetParticipants())
+	assert.Len(t, response.GetParticipants(), 2)
+
+	participant := response.GetParticipants()[0]
+	assert.NotNil(t, participant.GetEndpoint())
+	assert.Equal(t, givenType, participant.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant.GetState())
+	assert.Equal(t, ibTimeJoinTime, participant.GetJoinTime())
+	assert.NotNil(t, participant.GetMedia())
+	assert.NotNil(t, participant.GetMedia().Audio)
+	assert.Equal(t, givenAudioMuted, participant.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant.GetMedia().Audio.GetDeaf())
+	assert.NotNil(t, participant.GetMedia().Video)
+	assert.Equal(t, givenVideoCamera, participant.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant.GetMedia().Video.GetScreenShare())
+
+	participant2 := response.GetParticipants()[1]
+	assert.NotNil(t, participant2.GetEndpoint())
+	assert.Equal(t, givenType, participant2.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant2.GetState())
+	assert.Equal(t, ibTimeJoinTime, participant2.GetJoinTime())
+	assert.NotNil(t, participant2.GetMedia())
+	assert.NotNil(t, participant2.GetMedia().Audio)
+	assert.Equal(t, givenAudioMuted, participant2.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant2.GetMedia().Audio.GetDeaf())
+	assert.NotNil(t, participant2.GetMedia().Video)
+	assert.Equal(t, givenVideoCamera, participant2.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant2.GetMedia().Video.GetScreenShare())
+
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+}
+
+func TestShouldConnectWithNewCall(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenFrom := "44790123456"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenUserMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenParentCallId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenDetectionResult := voice.DETECTIONRESULT_HUMAN
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "conference": {
+            "id": "%s",
+            "name": "%s",
+            "participants": [
+                {
+                    "callId": "%s",
+                    "endpoint": {
+                        "phoneNumber": "%s",
+                        "type": "%s"
+                    },
+                    "state": "%s",
+                    "joinTime": "%s",
+                    "media": {
+                        "audio": {
+                            "muted": %t,
+                            "userMuted": %t,
+                            "deaf": %t
+                        },
+                        "video": {
+                            "camera": %t,
+                            "screenShare": %t
+                        }
+                    }
+                }
+            ],
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            }
+        },
+        "call": {
+            "id": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "from": "%s",
+            "to": "%s",
+            "direction": "%s",
+            "state": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "userMuted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            },
+            "startTime": "%s",
+            "answerTime": "%s",
+            "endTime": "%s",
+            "parentCallId": "%s",
+            "machineDetection": {
+                "detectionResult": "%s"
+            },
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "conferenceId": "%s",
+            "customData": {
+                "key1": "%s",
+                "key2": "%s"
+            }
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenUserMuted, givenDeaf, givenCamera, givenScreenShare, givenStartTime, givenAnswerTime, givenEndTime, givenParentCallId, givenDetectionResult, givenApplicationId, givenEntityId, givenConferenceId, givenKey1, givenKey2)
+
+	givenConnectOnEarlyMedia := false
+
+	expectedRequest := fmt.Sprintf(`{
+        "callRequest": {
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "from": "%s"
+        },
+        "connectOnEarlyMedia": %t
+    }`, givenPhoneNumber, givenType, givenFrom, givenConnectOnEarlyMedia)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/connect", givenId), givenResponse, 200)
+
+	request := voice.ConnectWithNewCallRequest{
+		CallRequest: &voice.ActionCallRequest{
+			Endpoint: voice.PhoneEndpointAsCallEndpoint(voice.NewPhoneEndpoint(givenPhoneNumber)),
+			From:     givenFrom,
+		},
+		ConnectOnEarlyMedia: &givenConnectOnEarlyMedia,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ConnectWithNewCall(context.Background(), givenId).ConnectWithNewCallRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+
+	conference := response.GetConference()
+	assert.NotNil(t, conference)
+	assert.Equal(t, givenId, conference.GetId())
+	assert.Equal(t, givenName, conference.GetName())
+
+	participants := conference.GetParticipants()
+	assert.NotNil(t, participants)
+	assert.Len(t, participants, 1)
+
+	participant := participants[0]
+	assert.Equal(t, givenCallId, participant.GetCallId())
+	assert.NotNil(t, participant.GetEndpoint())
+	assert.Equal(t, givenType, participant.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant.GetState())
+	assert.Equal(t, ibTimeJoinTime, participant.GetJoinTime())
+	assert.NotNil(t, participant.GetMedia())
+	assert.NotNil(t, participant.GetMedia().Audio)
+	assert.Equal(t, givenAudioMuted, participant.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserMuted, participant.GetMedia().Audio.GetUserMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant.GetMedia().Audio.GetDeaf())
+	assert.NotNil(t, participant.GetMedia().Video)
+	assert.Equal(t, givenVideoCamera, participant.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, givenPlatform, conference.GetPlatform())
+
+	call := response.GetCall()
+	assert.NotNil(t, call)
+	assert.Equal(t, givenType, call.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, call.GetFrom())
+	assert.Equal(t, givenTo, call.GetTo())
+	assert.Equal(t, givenDirection, call.GetDirection())
+	assert.Equal(t, givenCallState, call.GetState())
+	assert.NotNil(t, call.GetMedia().Audio)
+	assert.Equal(t, givenMuted, call.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenUserMuted, call.GetMedia().Audio.GetUserMuted())
+	assert.Equal(t, givenDeaf, call.GetMedia().Audio.GetDeaf())
+	assert.NotNil(t, call.GetMedia().Video)
+	assert.Equal(t, givenCamera, call.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenScreenShare, call.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, ibTimeStartTime, call.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, call.GetAnswerTime())
+	assert.Equal(t, ibTimeEndTime, call.GetEndTime())
+	assert.Equal(t, givenParentCallId, call.GetParentCallId())
+	assert.Equal(t, &givenDetectionResult, call.GetMachineDetection().DetectionResult)
+	assert.Equal(t, givenPlatform, call.GetPlatform())
+	assert.Equal(t, givenConferenceId, call.GetConferenceId())
+	assert.NotNil(t, call.GetCustomData())
+	assert.Equal(t, givenKey1, call.GetCustomData()["key1"])
+	assert.Equal(t, givenKey2, call.GetCustomData()["key2"])
+}
+
+func TestShouldPreAnswerCall(t *testing.T) {
+	givenCallId := "123"
+	givenCustomData := map[string]string{"custom": "data"}
+	givenCallPreRequest := voice.PreAnswerRequest{
+		CustomData: &givenCustomData,
+	}
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenRequest := fmt.Sprintf(`{
+		"customData": {
+			"custom": "data"
+		}
+	}`)
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/pre-answer", givenCallId), givenResponse, 200)
+
+	actualRequest, _ := json.Marshal(givenCallPreRequest)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.PreAnswerCall(context.Background(), givenCallId).PreAnswerRequest(givenCallPreRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldAnswerCall(t *testing.T) {
+	givenCallId := "123"
+	givenRecordingType := voice.RECORDINGTYPE_AUDIO
+	givenStatus := voice.ACTIONSTATUS_PENDING
+	givenCustomDataField := "custom"
+	givenCustomDataFieldValue := "data"
+	givenCustomData := map[string]string{givenCustomDataField: givenCustomDataFieldValue}
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "recording": {
+            "recordingType": "%s"
+        },
+        "customData": {
+            "%s": "%s"
+        }
+    }`, givenRecordingType, givenCustomDataField, givenCustomDataFieldValue)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/answer", givenCallId), givenResponse, 200)
+
+	request := voice.AnswerRequest{
+		Recording: &voice.CallRecordingRequest{
+			RecordingType: givenRecordingType,
+		},
+		CustomData: &givenCustomData,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.AnswerCall(context.Background(), givenCallId).AnswerRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldHangupCall(t *testing.T) {
+	givenErrorCode := voice.ERRORCODE_NORMAL_HANGUP
+	givenCallId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "44790123456"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenFrom := "44790123456"
+	givenTo := "44790123456"
+	givenDirection := voice.CALLDIRECTION_OUTBOUND
+	givenState := voice.CALLSTATE_CALLING
+	givenAudioMuted := false
+	givenAudioDeaf := false
+	givenVideoCamera := false
+	givenVideoScreenShare := false
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2021-08-24T15:00:00.000+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+	givenRingDuration := int32(2)
+	givenEntityId := "entityId"
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenKey2 := "value2"
+	givenKey1 := "value1"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "from": "%s",
+        "to": "%s",
+        "direction": "%s",
+        "state": "%s",
+        "media": {
+            "audio": {
+                "muted": %t,
+                "deaf": %t
+            },
+            "video": {
+                "camera": %t,
+                "screenShare": %t
+            }
+        },
+        "startTime": "%s",
+        "answerTime": "%s",
+        "ringDuration": %d,
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "conferenceId": "%s",
+        "customData": {
+            "key2": "%s",
+            "key1": "%s"
+        }
+    }`, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenState, givenAudioMuted, givenAudioDeaf, givenVideoCamera, givenVideoScreenShare, givenStartTime, givenAnswerTime, givenRingDuration, givenApplicationId, givenEntityId, givenConferenceId, givenKey2, givenKey1)
+
+	expectedRequest := fmt.Sprintf(`{
+        "errorCode": "%s"
+    }`, givenErrorCode)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/hangup", givenCallId), givenResponse, 200)
+
+	request := voice.HangupRequest{
+		ErrorCode: &givenErrorCode,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.HangupCall(context.Background(), givenCallId).HangupRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenCallId, response.GetId())
+	assert.Equal(t, givenFrom, response.GetFrom())
+	assert.Equal(t, givenTo, response.GetTo())
+	assert.Equal(t, givenDirection, response.GetDirection())
+	assert.Equal(t, givenState, response.GetState())
+	assert.Equal(t, givenAudioMuted, response.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioDeaf, response.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, response.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, response.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, ibTimeAnswerTime, response.GetAnswerTime())
+	assert.Equal(t, givenRingDuration, response.GetRingDuration())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	assert.Equal(t, givenConferenceId, response.GetConferenceId())
+	assert.Equal(t, givenKey2, response.GetCustomData()["key2"])
+	assert.Equal(t, givenKey1, response.GetCustomData()["key1"])
+}
+
+func TestShouldCallPlayFile(t *testing.T) {
+	givenCallId := "123"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+	givenLoopCount := int32(0)
+	givenContentType := voice.PLAYCONTENTTYPE_FILE
+	givenFileId := "100"
+
+	givenResponse := fmt.Sprintf(`{
+      "status": "%s"
+  }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+      "loopCount": %d,
+      "content": {
+          "fileId": "%s",
+          "type": "%s"
+      }
+  }`, givenLoopCount, givenFileId, givenContentType)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/play", givenCallId), givenResponse, 200)
+
+	filePlayContent := voice.NewFilePlayContent(givenFileId)
+
+	request := voice.PlayRequest{
+		LoopCount: &givenLoopCount,
+		Content:   voice.FilePlayContentAsPlayContent(filePlayContent),
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallPlayFile(context.Background(), givenCallId).PlayRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCallStopPlayingFile(t *testing.T) {
+	givenCallId := "123"
+	givenCustomData := map[string]string{"custom": "data"}
+	givenCallsStopPlayRequest := voice.StopPlayRequest{
+		CustomData: &givenCustomData,
+	}
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenRequest := fmt.Sprintf(`{
+		"customData": {
+			"custom": "data"
+		}
+	}`)
+
+	actualRequest, _ := json.Marshal(givenCallsStopPlayRequest)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/stop-play", givenCallId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.CallStopPlayingFile(context.Background(), givenCallId).StopPlayRequest(givenCallsStopPlayRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCallSayText(t *testing.T) {
+	givenCallId := "123"
+	givenText := "string"
+	givenLanguage := voice.LANGUAGE_AR
+	givenSpeechRate := 0.5
+	givenLoopCount := int32(0)
+	givenCallsGender := voice.GENDER_FEMALE
+	givenVoiceName := voice.VOICENAME_DARINA
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "text": "%s",
+        "language": "%s",
+        "speechRate": %f,
+        "loopCount": %d,
+        "preferences": {
+            "voiceGender": "%s",
+            "voiceName": "%s"
+        }
+    }`, givenText, givenLanguage, givenSpeechRate, givenLoopCount, givenCallsGender, givenVoiceName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/say", givenCallId), givenResponse, 200)
+
+	request := voice.CallSayRequest{
+		Text:       givenText,
+		Language:   givenLanguage,
+		SpeechRate: &givenSpeechRate,
+		LoopCount:  &givenLoopCount,
+		Preferences: &voice.VoicePreferences{
+			VoiceGender: &givenCallsGender,
+			VoiceName:   &givenVoiceName,
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallSayText(context.Background(), givenCallId).CallSayRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCallSendDtmf(t *testing.T) {
+	givenCallId := "123"
+	givenDtmf := "3"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "dtmf": "%s"
+    }`, givenDtmf)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/send-dtmf", givenCallId), givenResponse, 200)
+
+	request := voice.DtmfSendRequest{
+		Dtmf: givenDtmf,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallSendDtmf(context.Background(), givenCallId).DtmfSendRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCallCaptureDtmf(t *testing.T) {
+	givenCallId := "123"
+	givenMaxLength := int32(0)
+	givenTimeout := int32(0)
+	givenTerminator := "string"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "maxLength": %d,
+        "timeout": %d,
+        "terminator": "%s"
+    }`, givenMaxLength, givenTimeout, givenTerminator)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/capture/dtmf", givenCallId), givenResponse, 200)
+
+	request := voice.DtmfCaptureRequest{
+		MaxLength:  givenMaxLength,
+		Timeout:    givenTimeout,
+		Terminator: &givenTerminator,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallCaptureDtmf(context.Background(), givenCallId).DtmfCaptureRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCaptureSpeech(t *testing.T) {
+	givenCallId := "123"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedLanguage := voice.TRANSCRIPTIONLANGUAGE_EN_GB
+	expectedTimeout := int32(30)
+	expectedMaxSilence := int32(3)
+	expectedKeyPhrase1 := "phrase"
+	expectedKeyPhrase2 := "word"
+	expectedRequest := fmt.Sprintf(`{
+        "language": "%s",
+        "timeout": %d,
+        "maxSilence": %d,
+        "keyPhrases": [
+            "%s",
+            "%s"
+        ]
+    }`, expectedLanguage, expectedTimeout, expectedMaxSilence, expectedKeyPhrase1, expectedKeyPhrase2)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/capture/speech", givenCallId), givenResponse, 200)
+
+	request := voice.SpeechCaptureRequest{
+		Language:   expectedLanguage,
+		Timeout:    expectedTimeout,
+		MaxSilence: &expectedMaxSilence,
+		KeyPhrases: []string{expectedKeyPhrase1, expectedKeyPhrase2},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallCaptureSpeech(context.Background(), givenCallId).SpeechCaptureRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCallStartRecording(t *testing.T) {
+	givenCallId := "123"
+	givenFilePrefix := "filePrefix"
+	givenCustomDataField := "custom"
+	givenCustomDataFieldValue := "data"
+	givenCustomData := map[string]string{givenCustomDataField: givenCustomDataFieldValue}
+	givenRecordingType := voice.RECORDINGTYPE_AUDIO
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "recording": {
+            "recordingType": "%s",
+            "customData": {
+                "%s": "%s"
+            },
+            "filePrefix": "%s"
+        }
+    }`, givenRecordingType, givenCustomDataField, givenCustomDataFieldValue, givenFilePrefix)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/start-recording", givenCallId), givenResponse, 200)
+
+	request := voice.RecordingStartRequest{
+		Recording: &voice.RecordingRequest{
+			RecordingType: givenRecordingType,
+			CustomData:    &givenCustomData,
+			FilePrefix:    &givenFilePrefix,
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallStartRecording(context.Background(), givenCallId).RecordingStartRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCallStopRecording(t *testing.T) {
+	givenCallId := "123"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/stop-recording", givenCallId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.CallStopRecording(context.Background(), givenCallId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldStartMediaStream(t *testing.T) {
+	givenCallId := "123"
+	givenMediaStreamConfigId := "string"
+	givenReplaceMedia := true
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "mediaStream": {
+            "audioProperties": {
+                "mediaStreamConfigId": "%s",
+                "replaceMedia": %t
+            }
+        }
+    }`, givenMediaStreamConfigId, givenReplaceMedia)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/start-media-stream", givenCallId), givenResponse, 200)
+
+	givenMediaStreamProperties := &voice.MediaStreamAudioProperties{
+		MediaStreamConfigId: givenMediaStreamConfigId,
+		ReplaceMedia:        &givenReplaceMedia,
+	}
+
+	request := voice.StartMediaStreamRequest{
+		MediaStream: voice.MediaStream{
+			AudioProperties: givenMediaStreamProperties,
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.StartMediaStream(context.Background(), givenCallId).StartMediaStreamRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldStopMediaStream(t *testing.T) {
+	givenCallId := "123"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/stop-media-stream", givenCallId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.StopMediaStream(context.Background(), givenCallId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldGetConferences(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenPage := int32(0)
+	givenPageSize := int32(1)
+	givenPageTotalPages := int32(0)
+	givenPageTotalResults := int64(0)
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [{
+            "id": "%s",
+            "name": "%s",
+            "participants": [{
+                "callId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "state": "%s",
+                "joinTime": "%s",
+                "media": {
+                    "audio": {
+                        "muted": %t,
+                        "userMuted": %t,
+                        "deaf": %t
+                    },
+                    "video": {
+                        "camera": %t,
+                        "screenShare": %t
+                    }
+                }
+            }],
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            }
+        }],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId, givenPage, givenPageSize, givenPageTotalPages, givenPageTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/conferences", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetConferences(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.Results[0].GetId())
+	assert.Equal(t, givenName, response.Results[0].GetName())
+	assert.Equal(t, givenCallId, response.Results[0].Participants[0].GetCallId())
+	assert.Equal(t, givenType, response.Results[0].Participants[0].Endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenState, response.Results[0].Participants[0].GetState())
+	assert.Equal(t, ibTimeJoinTime, response.Results[0].Participants[0].GetJoinTime())
+	assert.Equal(t, givenAudioMuted, response.Results[0].Participants[0].Media.Audio.GetMuted())
+	assert.Equal(t, givenAudioUserMuted, response.Results[0].Participants[0].Media.Audio.GetUserMuted())
+	assert.Equal(t, givenAudioUserDeaf, response.Results[0].Participants[0].Media.Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, response.Results[0].Participants[0].Media.Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, response.Results[0].Participants[0].Media.Video.GetScreenShare())
+	assert.Equal(t, givenPlatform, response.Results[0].GetPlatform())
+	assert.Equal(t, givenPage, response.Paging.GetPage())
+	assert.Equal(t, givenPageSize, response.Paging.GetSize())
+	assert.Equal(t, givenPageTotalPages, response.Paging.GetTotalPages())
+	assert.Equal(t, givenPageTotalResults, response.Paging.GetTotalResults())
+}
+
+func TestShouldCreateConference(t *testing.T) {
+	givenRecordingType := voice.RECORDINGTYPE_AUDIO
+	givenCompositionEnabled := false
+	givenMaxDuration := int32(28800)
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenCustomDataField := "custom"
+	givenCustomDataFieldValue := "data"
+	givenCustomData := map[string]string{givenCustomDataField: givenCustomDataFieldValue}
+	givenFilePrefix := "filePrefix"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+	givenCallsConfigurationId := "dc5942707c704551a00cd2ea"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "participants": [{
+            "callId": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "state": "%s",
+            "joinTime": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "userMuted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            }
+        }],
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId)
+
+	expectedRequest := fmt.Sprintf(`{
+        "name": "%s",
+		"callsConfigurationId": "%s",
+        "recording": {
+            "recordingType": "%s",
+            "conferenceComposition": {
+                "enabled": %t
+            },
+            "customData": {
+                "%s": "%s"
+            },
+            "filePrefix": "%s"
+        },
+        "maxDuration": %d,
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        }
+    }`, givenName, givenCallsConfigurationId, givenRecordingType, givenCompositionEnabled, givenCustomDataField, givenCustomDataFieldValue, givenFilePrefix, givenMaxDuration, givenApplicationId, givenEntityId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/conferences", givenResponse, 201)
+
+	request := voice.ConferenceRequest{
+		Name:                 &givenName,
+		CallsConfigurationId: givenCallsConfigurationId,
+		Recording: &voice.ConferenceRecordingRequest{
+			RecordingType: givenRecordingType,
+			ConferenceComposition: &voice.ConferenceComposition{
+				Enabled: &givenCompositionEnabled,
+			},
+			CustomData: &givenCustomData,
+			FilePrefix: &givenFilePrefix,
+		},
+		MaxDuration: &givenMaxDuration,
+		Platform:    &givenPlatform,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateConference(context.Background()).ConferenceRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenCallId, response.Participants[0].GetCallId())
+	assert.Equal(t, givenType, response.Participants[0].Endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenState, response.Participants[0].GetState())
+	assert.Equal(t, ibTimeJoinTime, response.Participants[0].GetJoinTime())
+	assert.Equal(t, givenAudioMuted, response.Participants[0].Media.Audio.GetMuted())
+	assert.Equal(t, givenAudioUserMuted, response.Participants[0].Media.Audio.GetUserMuted())
+	assert.Equal(t, givenAudioUserDeaf, response.Participants[0].Media.Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, response.Participants[0].Media.Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, response.Participants[0].Media.Video.GetScreenShare())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+}
+
+func TestShouldGetConference(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "participants": [{
+            "callId": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "state": "%s",
+            "joinTime": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "userMuted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            }
+        }],
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/conferences/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetConference(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetParticipants()))
+	participant := response.GetParticipants()[0]
+	assert.Equal(t, givenCallId, participant.GetCallId())
+	assert.Equal(t, givenType, participant.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant.GetState())
+	assert.Equal(t, ibTimeJoinTime, participant.GetJoinTime())
+	assert.Equal(t, givenAudioMuted, participant.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserMuted, participant.GetMedia().Audio.GetUserMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, participant.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+}
+
+func TestShouldGetConferencesHistory(t *testing.T) {
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenApplicationId := "61c060db2675060027d8c7a6"
+
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenDuration := int64(55)
+
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+
+	givenLeaveTime := "2021-08-24T15:00:00.000+0000"
+	givenLeaveTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenLeaveTime)
+	ibTimeLeaveTime := infobip.Time{
+		T: givenLeaveTimeDateTime,
+	}
+	givenCallId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenFileName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenFilesDuration := int64(3)
+
+	givenFilesStartTime := "2021-08-24T15:00:00.000+0000"
+	givenFilesStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenFilesStartTime)
+
+	ibTimeFilesStartTime := infobip.Time{
+		T: givenFilesStartTimeDateTime,
+	}
+
+	givenFilesEndTime := "2021-08-24T15:00:00.000+0000"
+	givenFilesEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenFilesEndTime)
+	ibTimeFilesEndTime := infobip.Time{
+		T: givenFilesEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+	givenStatus := voice.RECORDINGSTATUS_SUCCESSFUL
+	givenReason := "string"
+	givenPage := int32(0)
+	givenPageSize := int32(1)
+	givenPageTotalPages := int32(0)
+	givenPageTotalResults := int64(0)
+	givenErrorCodeId := int32(10000)
+	givenErrorCodeName := "NORMAL_HANGUP"
+	givenErrorCodeDescription := "The call has ended with hangup initiated by caller, callee or API"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+	sftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [{
+            "conferenceId": "%s",
+            "name": "%s",
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "startTime": "%s",
+            "endTime": "%s",
+            "duration": %d,
+            "sessions": [{
+                "callId": "%s",
+                "joinTime": "%s",
+                "leaveTime": "%s"
+            }],
+            "recording": {
+                "composedFiles": [{
+                    "id": "%s",
+                    "name": "%s",
+                    "fileFormat": "%s",
+                    "size": %d,
+                    "sftpUploadStatus": "%s",
+                    "creationTime": "%s",
+                    "expirationTime": "%s",
+                    "duration": %d,
+                    "startTime": "%s",
+                    "endTime": "%s"
+                }],
+                "callRecordings": [{
+                    "callId": "%s",
+                    "endpoint": {
+                        "phoneNumber": "%s",
+                        "type": "%s"
+                    },
+                    "direction": "%s",
+                    "files": [{
+                        "id": "%s",
+                        "name": "%s",
+                        "fileFormat": "%s",
+                        "size": %d,
+                        "sftpUploadStatus": "%s",
+                        "creationTime": "%s",
+                        "expirationTime": "%s",
+                        "duration": %d,
+                        "startTime": "%s",
+                        "endTime": "%s",
+                        "location": "%s"
+                    }],
+                    "status": "%s",
+                    "reason": "%s"
+                }]
+            },
+            "errorCode": {
+                "id": %d,
+                "name": "%s",
+                "description": "%s"
+            }
+        }],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenConferenceId, givenName, givenApplicationId, givenEntityId, givenStartTime, givenEndTime, givenDuration, givenCallId, givenJoinTime, givenLeaveTime, givenFileId, givenFileName, givenFileFormat, givenSize, sftpUploadStatus, givenCreationTime, givenExpirationTime, givenFilesDuration, givenFilesStartTime, givenFilesEndTime, givenCallId, givenPhoneNumber, givenType, givenDirection, givenFileId, givenFileName, givenFileFormat, givenSize, sftpUploadStatus, givenCreationTime, givenExpirationTime, givenFilesDuration, givenFilesStartTime, givenFilesEndTime, givenLocation, givenStatus, givenReason, givenErrorCodeId, givenErrorCodeName, givenErrorCodeDescription, givenPage, givenPageSize, givenPageTotalPages, givenPageTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/conferences/history", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetConferencesHistory(context.Background()).Name(givenName).CallId(givenCallId).ApplicationId(givenApplicationId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response.GetResults()))
+	result := response.GetResults()[0]
+	assert.Equal(t, givenConferenceId, result.GetConferenceId())
+	assert.Equal(t, givenName, result.GetName())
+	assert.Equal(t, givenPlatform, result.GetPlatform())
+	assert.Equal(t, ibTimeStartTime, result.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, result.GetEndTime())
+	assert.Equal(t, givenDuration, result.GetDuration())
+	assert.Equal(t, 1, len(result.GetSessions()))
+	session := result.GetSessions()[0]
+	assert.Equal(t, givenCallId, session.GetCallId())
+	assert.Equal(t, ibTimeJoinTime, session.GetJoinTime())
+	assert.Equal(t, ibTimeLeaveTime, session.GetLeaveTime())
+	recording := result.GetRecording()
+	assert.Equal(t, 1, len(recording.GetComposedFiles()))
+	file := recording.GetComposedFiles()[0]
+	assert.Equal(t, givenFileId, file.GetId())
+	assert.Equal(t, givenFileName, file.GetName())
+	assert.Equal(t, givenFileFormat, file.GetFileFormat())
+	assert.Equal(t, givenSize, file.GetSize())
+	assert.Equal(t, sftpUploadStatus, file.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, file.GetCreationTime())
+	assert.Equal(t, givenFilesDuration, file.GetDuration())
+	assert.Equal(t, ibTimeFilesStartTime, file.GetStartTime())
+	assert.Equal(t, ibTimeFilesEndTime, file.GetEndTime())
+	assert.Equal(t, 1, len(recording.GetCallRecordings()))
+	callRecording := recording.GetCallRecordings()[0]
+	assert.Equal(t, givenCallId, callRecording.GetCallId())
+	assert.Equal(t, givenType, callRecording.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenDirection, callRecording.GetDirection())
+	assert.Equal(t, 1, len(callRecording.GetFiles()))
+	callRecordingFile := callRecording.GetFiles()[0]
+	assert.Equal(t, givenFileId, callRecordingFile.GetId())
+	assert.Equal(t, givenFileName, callRecordingFile.GetName())
+	assert.Equal(t, givenFileFormat, callRecordingFile.GetFileFormat())
+	assert.Equal(t, givenSize, callRecordingFile.GetSize())
+	assert.Equal(t, sftpUploadStatus, callRecordingFile.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, callRecordingFile.GetCreationTime())
+	assert.Equal(t, givenFilesDuration, callRecordingFile.GetDuration())
+	assert.Equal(t, ibTimeFilesStartTime, callRecordingFile.GetStartTime())
+	assert.Equal(t, ibTimeFilesEndTime, callRecordingFile.GetEndTime())
+	assert.Equal(t, givenLocation, callRecordingFile.GetLocation())
+	assert.Equal(t, givenStatus, callRecording.GetStatus())
+	assert.Equal(t, givenReason, callRecording.GetReason())
+	errorCode := result.GetErrorCode()
+	assert.Equal(t, givenErrorCodeId, errorCode.GetId())
+	assert.Equal(t, givenErrorCodeName, errorCode.GetName())
+	assert.Equal(t, givenErrorCodeDescription, errorCode.GetDescription())
+	paging := response.GetPaging()
+	assert.Equal(t, givenPage, paging.GetPage())
+	assert.Equal(t, givenPageSize, paging.GetSize())
+	assert.Equal(t, givenPageTotalPages, paging.GetTotalPages())
+	assert.Equal(t, givenPageTotalResults, paging.GetTotalResults())
+}
+
+func TestShouldAddNewConferenceCall(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+	givenTime := "2021-08-24T15:00:00.000+0000"
+	givenTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenTime)
+	ibTimeTime := infobip.Time{
+		T: givenTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenFrom := "44790123456"
+	givenTo := "44790987654"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenCallState := voice.CALLSTATE_CALLING
+	givenMuted := true
+	givenDeaf := true
+	givenCamera := true
+	givenScreenShare := true
+	givenRingDuration := int32(3)
+	givenConferenceId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenKey1 := "value1"
+	givenKey2 := "value2"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+	givenConnectOnEarlyMedia := false
+
+	givenResponse := fmt.Sprintf(`{
+        "conference": {
+            "id": "%s",
+            "name": "%s",
+            "participants": [{
+                "callId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "state": "%s",
+                "joinTime": "%s",
+                "media": {
+                    "audio": {
+                        "muted": %t,
+                        "deaf": %t
+                    },
+                    "video": {
+                        "camera": %t,
+                        "screenShare": %t
+                    }
+                }
+            }],
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            }
+        },
+        "call": {
+            "id": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "from": "%s",
+            "to": "%s",
+            "direction": "%s",
+            "state": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            },
+            "startTime": "%s",
+            "answerTime": "%s",
+            "ringDuration": %d,
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "conferenceId": "%s",
+            "customData": {
+                "key1": "%s",
+                "key2": "%s"
+            }
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenTime, givenAudioMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId, givenCallId, givenPhoneNumber, givenType, givenFrom, givenTo, givenDirection, givenCallState, givenMuted, givenDeaf, givenCamera, givenScreenShare, givenTime, givenTime, givenRingDuration, givenApplicationId, givenEntityId, givenConferenceId, givenKey1, givenKey2)
+
+	expectedRequest := fmt.Sprintf(`{
+        "callRequest": {
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "from": "%s"
+        },
+        "connectOnEarlyMedia": %t
+    }`, givenPhoneNumber, givenType, givenFrom, givenConnectOnEarlyMedia)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/call", givenId), givenResponse, 200)
+
+	request := voice.AddNewCallRequest{
+		CallRequest: voice.ActionCallRequest{
+			Endpoint: voice.PhoneEndpointAsCallEndpoint(voice.NewPhoneEndpoint(givenPhoneNumber)),
+			From:     givenFrom,
+		},
+		ConnectOnEarlyMedia: &givenConnectOnEarlyMedia,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.AddNewConferenceCall(context.Background(), givenConferenceId).AddNewCallRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, &givenId, response.GetConference().Id)
+	assert.Equal(t, &givenName, response.GetConference().Name)
+	assert.Equal(t, 1, len(response.GetConference().Participants))
+	participant := response.Conference.GetParticipants()[0]
+	assert.Equal(t, givenCallId, participant.GetCallId())
+	assert.Equal(t, givenType, participant.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant.GetState())
+	assert.Equal(t, ibTimeTime, participant.GetJoinTime())
+	assert.Equal(t, givenAudioMuted, participant.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, participant.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, &givenPlatform, response.GetConference().Platform)
+	call := response.GetCall()
+	assert.Equal(t, givenCallId, call.GetId())
+	assert.Equal(t, givenType, call.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenFrom, call.GetFrom())
+	assert.Equal(t, givenTo, call.GetTo())
+	assert.Equal(t, givenDirection, call.GetDirection())
+	assert.Equal(t, givenCallState, call.GetState())
+	assert.Equal(t, givenAudioMuted, call.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserDeaf, call.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, call.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, call.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, ibTimeTime, call.GetStartTime())
+	assert.Equal(t, ibTimeTime, call.GetAnswerTime())
+	assert.Equal(t, givenRingDuration, call.GetRingDuration())
+	assert.Equal(t, givenPlatform, call.GetPlatform())
+	assert.Equal(t, givenConferenceId, call.GetConferenceId())
+	assert.Equal(t, map[string]string{"key1": givenKey1, "key2": givenKey2}, call.GetCustomData())
+}
+
+func TestShouldAddExistingConferenceCall(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+	givenConnectOnEarlyMedia := false
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "participants": [{
+            "callId": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "state": "%s",
+            "joinTime": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "userMuted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            }
+        }],
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId)
+
+	expectedRequest := fmt.Sprintf(`{
+        "connectOnEarlyMedia": %t
+    }`, givenConnectOnEarlyMedia)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/calls/1/conferences/%s/call/%s", givenId, givenCallId), givenResponse, 200)
+
+	request := voice.AddExistingCallRequest{
+		ConnectOnEarlyMedia: &givenConnectOnEarlyMedia,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.AddExistingConferenceCall(context.Background(), givenId, givenCallId).AddExistingCallRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetParticipants()))
+	participant := response.GetParticipants()[0]
+	assert.Equal(t, givenCallId, participant.GetCallId())
+	assert.Equal(t, givenType, participant.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant.GetState())
+	assert.Equal(t, ibTimeJoinTime, participant.GetJoinTime())
+	assert.Equal(t, givenAudioMuted, participant.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserMuted, participant.GetMedia().Audio.GetUserMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, participant.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+}
+
+func TestShouldRemoveConferenceCall(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenCallId := "string"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/conferences/%s/call/%s", givenId, givenCallId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.RemoveConferenceCall(context.Background(), givenId, givenCallId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldHangupConference(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenName := "Example conference"
+	givenCallId := "string"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenState := voice.PARTICIPANTSTATE_JOINING
+	givenJoinTime := "2021-08-24T15:00:00.000+0000"
+	givenJoinTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenJoinTime)
+	ibTimeJoinTime := infobip.Time{
+		T: givenJoinTimeDateTime,
+	}
+	givenAudioMuted := true
+	givenAudioUserMuted := true
+	givenAudioUserDeaf := true
+	givenVideoCamera := true
+	givenVideoScreenShare := true
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		ApplicationId: &givenApplicationId,
+		EntityId:      &givenEntityId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "participants": [{
+            "callId": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "state": "%s",
+            "joinTime": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "userMuted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            }
+        }],
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        }
+    }`, givenId, givenName, givenCallId, givenPhoneNumber, givenType, givenState, givenJoinTime, givenAudioMuted, givenAudioUserMuted, givenAudioUserDeaf, givenVideoCamera, givenVideoScreenShare, givenApplicationId, givenEntityId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/hangup", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.HangupConference(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, 1, len(response.GetParticipants()))
+	participant := response.GetParticipants()[0]
+	assert.Equal(t, givenCallId, participant.GetCallId())
+	assert.Equal(t, givenType, participant.GetEndpoint().PhoneEndpoint.Type)
+	assert.Equal(t, givenState, participant.GetState())
+	assert.Equal(t, ibTimeJoinTime, participant.GetJoinTime())
+	assert.Equal(t, givenAudioMuted, participant.GetMedia().Audio.GetMuted())
+	assert.Equal(t, givenAudioUserMuted, participant.GetMedia().Audio.GetUserMuted())
+	assert.Equal(t, givenAudioUserDeaf, participant.GetMedia().Audio.GetDeaf())
+	assert.Equal(t, givenVideoCamera, participant.GetMedia().Video.GetCamera())
+	assert.Equal(t, givenVideoScreenShare, participant.GetMedia().Video.GetScreenShare())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+}
+
+func TestShouldConferencePlayFile(t *testing.T) {
+	givenId := "123"
+	givenLoopCount := int32(1)
+	givenContentType := voice.PLAYCONTENTTYPE_FILE
+	givenFileId := "100"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "loopCount": %d,
+        "content": {
+            "type": "%s",
+            "fileId": "%s"
+        }
+    }`, givenLoopCount, givenContentType, givenFileId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/play", givenId), givenResponse, 200)
+
+	request := voice.ConferencePlayRequest{
+		LoopCount: &givenLoopCount,
+		Content:   voice.FilePlayContentAsPlayContent(voice.NewFilePlayContent(givenFileId)),
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ConferencePlayFile(context.Background(), givenId).ConferencePlayRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldConferenceSayText(t *testing.T) {
+	givenId := "123"
+	givenText := "string"
+	givenLanguage := voice.LANGUAGE_AR
+	givenSpeechRate := 0.5
+	givenLoopCount := int32(0)
+	givenCallsGender := voice.GENDER_FEMALE
+	givenVoiceName := voice.VOICENAME_ABIGAIL
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "text": "%s",
+        "language": "%s",
+        "speechRate": %f,
+        "loopCount": %d,
+        "preferences": {
+            "voiceGender": "%s",
+            "voiceName": "%s"
+        }
+    }`, givenText, givenLanguage, givenSpeechRate, givenLoopCount, givenCallsGender, givenVoiceName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/say", givenId), givenResponse, 200)
+
+	request := voice.SayRequest{
+		Text:       givenText,
+		Language:   givenLanguage,
+		SpeechRate: &givenSpeechRate,
+		LoopCount:  &givenLoopCount,
+		Preferences: &voice.VoicePreferences{
+			VoiceGender: &givenCallsGender,
+			VoiceName:   &givenVoiceName,
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ConferenceSayText(context.Background(), givenId).SayRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldConferenceStopPlayingFile(t *testing.T) {
+	givenId := "123"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/stop-play", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.ConferenceStopPlayingFile(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldConferenceStartRecording(t *testing.T) {
+	givenId := "123"
+	givenRecordingType := voice.RECORDINGTYPE_AUDIO
+	givenEnabled := false
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/start-recording", givenId), givenResponse, 200)
+
+	request := voice.ConferenceRecordingRequest{
+		RecordingType: givenRecordingType,
+		ConferenceComposition: &voice.ConferenceComposition{
+			Enabled: &givenEnabled,
+		},
+	}
+
+	response, _, err := infobipClient.CallsAPI.ConferenceStartRecording(context.Background(), givenId).ConferenceRecordingRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldConferenceStopRecording(t *testing.T) {
+	givenId := "123"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/stop-recording", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.ConferenceStopRecording(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldConferenceBroadcastWebRtcText(t *testing.T) {
+	givenStatus := voice.ACTIONSTATUS_PENDING
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedText := "This meeting will end in 5 minutes."
+	expectedRequest := fmt.Sprintf(`{
+        "text": "%s"
+    }`, expectedText)
+
+	givenConferenceId := "123"
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/conferences/%s/broadcast-webrtc-text", givenConferenceId), givenResponse, 200)
+
+	request := voice.ConferenceBroadcastWebrtcTextRequest{
+		Text: &expectedText,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ConferenceBroadcastWebrtcText(context.Background(), givenConferenceId).ConferenceBroadcastWebrtcTextRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldGetCallsFiles(t *testing.T) {
+	givenId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenCreationMethod := voice.CREATIONMETHOD_RECORDED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenExpirationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenExpirationTime)
+	ibTimeExpirationTime := infobip.Time{
+		T: givenExpirationTimeDateTime,
+	}
+
+	givenDuration := int64(3)
+	givenPage := int32(0)
+	givenPageSize := int32(1)
+	givenPageTotalPages := int32(0)
+	givenPageTotalResults := int64(0)
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [{
+            "id": "%s",
+            "name": "%s",
+            "fileFormat": "%s",
+            "size": %d,
+            "creationMethod": "%s",
+            "creationTime": "%s",
+            "expirationTime": "%s",
+            "duration": %d
+        }],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenId, givenName, givenFileFormat, givenSize, givenCreationMethod, givenCreationTime, givenExpirationTime, givenDuration, givenPage, givenPageSize, givenPageTotalPages, givenPageTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/files", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallsFiles(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response.GetResults()))
+	result := response.GetResults()[0]
+	assert.Equal(t, givenId, result.GetId())
+	assert.Equal(t, givenName, result.GetName())
+	assert.Equal(t, givenFileFormat, result.GetFileFormat())
+	assert.Equal(t, givenSize, result.GetSize())
+	assert.Equal(t, givenCreationMethod, result.GetCreationMethod())
+	assert.Equal(t, ibTimeCreationTime, result.GetCreationTime())
+	assert.Equal(t, ibTimeExpirationTime, result.GetExpirationTime())
+	assert.Equal(t, givenDuration, result.GetDuration())
+	paging := response.GetPaging()
+	assert.Equal(t, givenPage, paging.GetPage())
+	assert.Equal(t, givenPageSize, paging.GetSize())
+	assert.Equal(t, givenPageTotalPages, paging.GetTotalPages())
+	assert.Equal(t, givenPageTotalResults, paging.GetTotalResults())
+}
+
+func TestShouldUploadCallsAudioFile(t *testing.T) {
+	givenId := "string"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenCreationMethod := voice.CREATIONMETHOD_RECORDED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenExpirationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenExpirationTime)
+	ibTimeExpirationTime := infobip.Time{
+		T: givenExpirationTimeDateTime,
+	}
+
+	givenDuration := int64(3)
+
+	givenAttachmentText := "Test file text"
+	tempFile, err := ioutil.TempFile("", "attachment.txt")
+	assert.Nil(t, err)
+	defer os.Remove(tempFile.Name())
+	_, err = tempFile.WriteString(givenAttachmentText)
+	assert.Nil(t, err)
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "fileFormat": "%s",
+        "size": %d,
+        "creationMethod": "%s",
+        "creationTime": "%s",
+        "expirationTime": "%s",
+        "duration": %d
+    }`, givenId, givenName, givenFileFormat, givenSize, givenCreationMethod, givenCreationTime, givenExpirationTime, givenDuration)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/files", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.UploadCallsAudioFile(context.Background()).File(tempFile).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenFileFormat, response.GetFileFormat())
+	assert.Equal(t, givenSize, response.GetSize())
+	assert.Equal(t, givenCreationMethod, response.GetCreationMethod())
+	assert.Equal(t, ibTimeCreationTime, response.GetCreationTime())
+	assert.Equal(t, ibTimeExpirationTime, response.GetExpirationTime())
+	assert.Equal(t, givenDuration, response.GetDuration())
+}
+
+func TestShouldGetCallsFile(t *testing.T) {
+	givenId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenCreationMethod := voice.CREATIONMETHOD_RECORDED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenExpirationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenExpirationTime)
+	ibTimeExpirationTime := infobip.Time{
+		T: givenExpirationTimeDateTime,
+	}
+
+	givenDuration := int64(3)
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "fileFormat": "%s",
+        "size": %d,
+        "creationMethod": "%s",
+        "creationTime": "%s",
+        "expirationTime": "%s",
+        "duration": %d
+    }`, givenId, givenName, givenFileFormat, givenSize, givenCreationMethod, givenCreationTime, givenExpirationTime, givenDuration)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/files/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallsFile(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenFileFormat, response.GetFileFormat())
+	assert.Equal(t, givenSize, response.GetSize())
+	assert.Equal(t, givenCreationMethod, response.GetCreationMethod())
+	assert.Equal(t, ibTimeCreationTime, response.GetCreationTime())
+	assert.Equal(t, ibTimeExpirationTime, response.GetExpirationTime())
+	assert.Equal(t, givenDuration, response.GetDuration())
+}
+
+func TestShouldDeleteCallsFile(t *testing.T) {
+	givenId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenCreationMethod := voice.CREATIONMETHOD_RECORDED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenExpirationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenExpirationTime)
+	ibTimeExpirationTime := infobip.Time{
+		T: givenExpirationTimeDateTime,
+	}
+	givenDuration := int64(3)
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "fileFormat": "%s",
+        "size": %d,
+        "creationMethod": "%s",
+        "creationTime": "%s",
+        "expirationTime": "%s",
+        "duration": %d
+    }`, givenId, givenName, givenFileFormat, givenSize, givenCreationMethod, givenCreationTime, givenExpirationTime, givenDuration)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/files/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DeleteCallsFile(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenFileFormat, response.GetFileFormat())
+	assert.Equal(t, givenSize, response.GetSize())
+	assert.Equal(t, givenCreationMethod, response.GetCreationMethod())
+	assert.Equal(t, ibTimeCreationTime, response.GetCreationTime())
+	assert.Equal(t, ibTimeExpirationTime, response.GetExpirationTime())
+	assert.Equal(t, givenDuration, response.GetDuration())
+}
+
+func TestShouldGetCallRecordings(t *testing.T) {
+	givenId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenSftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenDuration := int64(3)
+
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+	givenStatus := voice.RECORDINGSTATUS_SUCCESSFUL
+	givenReason := "string"
+
+	givenResponse := fmt.Sprintf(`{
+        "callId": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "direction": "%s",
+        "files": [{
+            "id": "%s",
+            "name": "%s",
+            "fileFormat": "%s",
+            "size": %d,
+            "sftpUploadStatus": "%s",
+            "creationTime": "%s",
+            "expirationTime": "%s",
+            "duration": %d,
+            "startTime": "%s",
+            "endTime": "%s",
+            "location": "%s"
+        }],
+        "status": "%s",
+        "reason": "%s"
+    }`, givenId, givenPhoneNumber, givenType, givenDirection, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation, givenStatus, givenReason)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/recordings/calls/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallRecordings(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetCallId())
+	endpoint := response.GetEndpoint()
+	assert.Equal(t, givenType, endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenDirection, response.GetDirection())
+	files := response.GetFiles()
+	assert.Equal(t, 1, len(files))
+	file := files[0]
+	assert.Equal(t, givenFileId, file.GetId())
+	assert.Equal(t, givenName, file.GetName())
+	assert.Equal(t, givenFileFormat, file.GetFileFormat())
+	assert.Equal(t, givenSize, file.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, file.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, file.GetCreationTime())
+	assert.Equal(t, givenDuration, file.GetDuration())
+	assert.Equal(t, ibTimeStartTime, file.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, file.GetEndTime())
+	assert.Equal(t, givenLocation, file.GetLocation())
+	assert.Equal(t, givenStatus, response.GetStatus())
+	assert.Equal(t, givenReason, response.GetReason())
+}
+
+func TestShouldDeleteCallRecordings(t *testing.T) {
+	givenId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenSftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenDuration := int64(3)
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+	givenStatus := voice.RECORDINGSTATUS_SUCCESSFUL
+	givenReason := "string"
+
+	givenResponse := fmt.Sprintf(`{
+        "callId": "%s",
+        "endpoint": {
+            "phoneNumber": "%s",
+            "type": "%s"
+        },
+        "direction": "%s",
+        "files": [{
+            "id": "%s",
+            "name": "%s",
+            "fileFormat": "%s",
+            "size": %d,
+            "sftpUploadStatus": "%s",
+            "creationTime": "%s",
+            "expirationTime": "%s",
+            "duration": %d,
+            "startTime": "%s",
+            "endTime": "%s",
+            "location": "%s"
+        }],
+        "status": "%s",
+        "reason": "%s"
+    }`, givenId, givenPhoneNumber, givenType, givenDirection, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation, givenStatus, givenReason)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/recordings/calls/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DeleteCallRecordings(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetCallId())
+	endpoint := response.GetEndpoint()
+	assert.Equal(t, givenType, endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenDirection, response.GetDirection())
+	files := response.GetFiles()
+	assert.Equal(t, 1, len(files))
+	file := files[0]
+	assert.Equal(t, givenFileId, file.GetId())
+	assert.Equal(t, givenName, file.GetName())
+	assert.Equal(t, givenFileFormat, file.GetFileFormat())
+	assert.Equal(t, givenSize, file.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, file.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, file.GetCreationTime())
+	assert.Equal(t, givenDuration, file.GetDuration())
+	assert.Equal(t, ibTimeStartTime, file.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, file.GetEndTime())
+	assert.Equal(t, givenLocation, file.GetLocation())
+	assert.Equal(t, givenStatus, response.GetStatus())
+	assert.Equal(t, givenReason, response.GetReason())
+}
+
+func TestShouldGetConferencesRecordings(t *testing.T) {
+	givenConferenceId := "string"
+	givenConferenceName := "string"
+	givenApplicationId := "string"
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId,
+	}
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenDuration := int64(3)
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+	givenId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenStatus := voice.RECORDINGSTATUS_SUCCESSFUL
+	givenReason := "string"
+	givenPage := int32(0)
+	givenPageSize := int32(1)
+	givenPageTotalPages := int32(0)
+	givenPageTotalResults := int64(0)
+	givenSftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [{
+            "conferenceId": "%s",
+            "conferenceName": "%s",
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "composedFiles": [{
+                "id": "%s",
+                "name": "%s",
+                "fileFormat": "%s",
+                "size": %d,
+                "sftpUploadStatus": "%s",
+                "creationTime": "%s",
+                "expirationTime": "%s",
+                "duration": %d,
+                "startTime": "%s",
+                "endTime": "%s",
+                "location": "%s"
+            }],
+            "callRecordings": [{
+                "callId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                },
+                "direction": "%s",
+                "files": [{
+                    "id": "%s",
+                    "name": "%s",
+                    "fileFormat": "%s",
+                    "size": %d,
+                    "sftpUploadStatus": "%s",
+                    "creationTime": "%s",
+                    "expirationTime": "%s",
+                    "duration": %d,
+                    "startTime": "%s",
+                    "endTime": "%s",
+                    "location": "%s"
+                }],
+                "status": "%s",
+                "reason": "%s"
+            }]
+        }],
+        "paging": {
+            "page": %d,
+            "size": %d,
+            "totalPages": %d,
+            "totalResults": %d
+        }
+    }`, givenConferenceId, givenConferenceName, givenApplicationId, givenEntityId, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation, givenId, givenPhoneNumber, givenType, givenDirection, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation, givenStatus, givenReason, givenPage, givenPageSize, givenPageTotalPages, givenPageTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/recordings/conferences", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetConferencesRecordings(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response.GetResults()))
+	result := response.GetResults()[0]
+	assert.Equal(t, givenConferenceId, result.GetConferenceId())
+	assert.Equal(t, givenConferenceName, result.GetConferenceName())
+	assert.Equal(t, givenPlatform, result.GetPlatform())
+	composedFiles := result.GetComposedFiles()
+	assert.Equal(t, 1, len(composedFiles))
+	file := composedFiles[0]
+	assert.Equal(t, givenFileId, file.GetId())
+	assert.Equal(t, givenName, file.GetName())
+	assert.Equal(t, givenFileFormat, file.GetFileFormat())
+	assert.Equal(t, givenSize, file.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, file.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, file.GetCreationTime())
+	assert.Equal(t, givenDuration, file.GetDuration())
+	assert.Equal(t, ibTimeStartTime, file.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, file.GetEndTime())
+	assert.Equal(t, givenLocation, file.GetLocation())
+	callRecordings := result.GetCallRecordings()
+	assert.Equal(t, 1, len(callRecordings))
+	callRecording := callRecordings[0]
+	assert.Equal(t, givenId, callRecording.GetCallId())
+	endpoint := callRecording.GetEndpoint()
+	assert.Equal(t, givenType, endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenDirection, callRecording.GetDirection())
+	callRecordingsFiles := callRecording.GetFiles()
+	assert.Equal(t, 1, len(callRecordingsFiles))
+	callRecordingFile := callRecordingsFiles[0]
+	assert.Equal(t, givenFileId, callRecordingFile.GetId())
+	assert.Equal(t, givenName, callRecordingFile.GetName())
+	assert.Equal(t, givenFileFormat, callRecordingFile.GetFileFormat())
+	assert.Equal(t, givenSize, callRecordingFile.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, callRecordingFile.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, callRecordingFile.GetCreationTime())
+	assert.Equal(t, givenDuration, callRecordingFile.GetDuration())
+	assert.Equal(t, ibTimeStartTime, callRecordingFile.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, callRecordingFile.GetEndTime())
+	assert.Equal(t, givenLocation, callRecordingFile.GetLocation())
+	assert.Equal(t, givenStatus, callRecording.GetStatus())
+	assert.Equal(t, givenReason, callRecording.GetReason())
+	paging := response.GetPaging()
+	assert.Equal(t, givenPage, paging.GetPage())
+	assert.Equal(t, givenPageSize, paging.GetSize())
+	assert.Equal(t, givenPageTotalPages, paging.GetTotalPages())
+	assert.Equal(t, givenPageTotalResults, paging.GetTotalResults())
+}
+
+func TestShouldGetConferenceRecordings(t *testing.T) {
+	givenConferenceId := "string"
+	givenConferenceName := "string"
+	givenApplicationId := "string"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId,
+	}
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenSftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenDuration := int64(3)
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+	givenId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenStatus := voice.RECORDINGSTATUS_SUCCESSFUL
+	givenReason := "string"
+
+	givenResponse := fmt.Sprintf(`{
+        "conferenceId": "%s",
+        "conferenceName": "%s",
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "composedFiles": [{
+            "id": "%s",
+            "name": "%s",
+            "fileFormat": "%s",
+            "size": %d,
+            "creationTime": "%s",
+            "duration": %d,
+            "startTime": "%s",
+            "endTime": "%s"
+        }],
+        "callRecordings": [{
+            "callId": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "direction": "%s",
+            "files": [{
+                "id": "%s",
+                "name": "%s",
+                "fileFormat": "%s",
+                "size": %d,
+                "sftpUploadStatus": "%s",
+                "creationTime": "%s",
+                "expirationTime": "%s",
+                "duration": %d,
+                "startTime": "%s",
+                "endTime": "%s",
+                "location": "%s"
+            }],
+            "status": "%s",
+            "reason": "%s"
+        }]
+    }`, givenConferenceId, givenConferenceName, givenApplicationId, givenEntityId, givenFileId, givenName, givenFileFormat, givenSize, givenCreationTime, givenDuration, givenStartTime, givenEndTime, givenId, givenPhoneNumber, givenType, givenDirection, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation, givenStatus, givenReason)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/recordings/conferences/%s", givenConferenceId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetConferenceRecordings(context.Background(), givenConferenceId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenConferenceId, response.GetConferenceId())
+	assert.Equal(t, givenConferenceName, response.GetConferenceName())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	composedFiles := response.GetComposedFiles()
+	assert.Equal(t, 1, len(composedFiles))
+	file := composedFiles[0]
+	assert.Equal(t, givenFileId, file.GetId())
+	assert.Equal(t, givenName, file.GetName())
+	assert.Equal(t, givenFileFormat, file.GetFileFormat())
+	assert.Equal(t, givenSize, file.GetSize())
+	assert.Equal(t, ibTimeCreationTime, file.GetCreationTime())
+	assert.Equal(t, givenDuration, file.GetDuration())
+	assert.Equal(t, ibTimeStartTime, file.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, file.GetEndTime())
+	callRecordings := response.GetCallRecordings()
+	assert.Equal(t, 1, len(callRecordings))
+	callRecording := callRecordings[0]
+	assert.Equal(t, givenId, callRecording.GetCallId())
+	endpoint := callRecording.GetEndpoint()
+	assert.Equal(t, givenType, endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenDirection, callRecording.GetDirection())
+	callRecordingsFiles := callRecording.GetFiles()
+	assert.Equal(t, 1, len(callRecordingsFiles))
+	callRecordingFile := callRecordingsFiles[0]
+	assert.Equal(t, givenFileId, callRecordingFile.GetId())
+	assert.Equal(t, givenName, callRecordingFile.GetName())
+	assert.Equal(t, givenFileFormat, callRecordingFile.GetFileFormat())
+	assert.Equal(t, givenSize, callRecordingFile.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, callRecordingFile.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, callRecordingFile.GetCreationTime())
+	assert.Equal(t, givenDuration, callRecordingFile.GetDuration())
+	assert.Equal(t, ibTimeStartTime, callRecordingFile.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, callRecordingFile.GetEndTime())
+	assert.Equal(t, givenLocation, callRecordingFile.GetLocation())
+	assert.Equal(t, givenStatus, callRecording.GetStatus())
+	assert.Equal(t, givenReason, callRecording.GetReason())
+}
+
+func TestShouldDeleteConferenceRecordings(t *testing.T) {
+	givenConferenceId := "string"
+	givenConferenceName := "string"
+	givenApplicationId := "string"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId,
+	}
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenSftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenDuration := int64(3)
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+	givenId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenPhoneNumber := "41792030000"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenStatus := voice.RECORDINGSTATUS_SUCCESSFUL
+	givenReason := "string"
+
+	givenResponse := fmt.Sprintf(`{
+        "conferenceId": "%s",
+        "conferenceName": "%s",
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "composedFiles": [{
+            "id": "%s",
+            "name": "%s",
+            "fileFormat": "%s",
+            "size": %d,
+            "creationTime": "%s",
+            "duration": %d,
+            "startTime": "%s",
+            "endTime": "%s"
+        }],
+        "callRecordings": [{
+            "callId": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "direction": "%s",
+            "files": [{
+                "id": "%s",
+                "name": "%s",
+                "fileFormat": "%s",
+                "size": %d,
+                "sftpUploadStatus": "%s",
+                "creationTime": "%s",
+                "expirationTime": "%s",
+                "duration": %d,
+                "startTime": "%s",
+                "endTime": "%s",
+                "location": "%s"
+            }],
+            "status": "%s",
+            "reason": "%s"
+        }]
+    }`, givenConferenceId, givenConferenceName, givenApplicationId, givenEntityId, givenFileId, givenName, givenFileFormat, givenSize, givenCreationTime, givenDuration, givenStartTime, givenEndTime, givenId, givenPhoneNumber, givenType, givenDirection, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation, givenStatus, givenReason)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/recordings/conferences/%s", givenConferenceId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DeleteConferenceRecordings(context.Background(), givenConferenceId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenConferenceId, response.GetConferenceId())
+	assert.Equal(t, givenConferenceName, response.GetConferenceName())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	composedFiles := response.GetComposedFiles()
+	assert.Equal(t, 1, len(composedFiles))
+	file := composedFiles[0]
+	assert.Equal(t, givenFileId, file.GetId())
+	assert.Equal(t, givenName, file.GetName())
+	assert.Equal(t, givenFileFormat, file.GetFileFormat())
+	assert.Equal(t, givenSize, file.GetSize())
+	assert.Equal(t, ibTimeCreationTime, file.GetCreationTime())
+	assert.Equal(t, givenDuration, file.GetDuration())
+	assert.Equal(t, ibTimeStartTime, file.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, file.GetEndTime())
+	callRecordings := response.GetCallRecordings()
+	assert.Equal(t, 1, len(callRecordings))
+	callRecording := callRecordings[0]
+	assert.Equal(t, givenId, callRecording.GetCallId())
+	endpoint := callRecording.GetEndpoint()
+	assert.Equal(t, givenType, endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenDirection, callRecording.GetDirection())
+	callRecordingsFiles := callRecording.GetFiles()
+	assert.Equal(t, 1, len(callRecordingsFiles))
+	callRecordingFile := callRecordingsFiles[0]
+	assert.Equal(t, givenFileId, callRecordingFile.GetId())
+	assert.Equal(t, givenName, callRecordingFile.GetName())
+	assert.Equal(t, givenFileFormat, callRecordingFile.GetFileFormat())
+	assert.Equal(t, givenSize, callRecordingFile.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, callRecordingFile.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, callRecordingFile.GetCreationTime())
+	assert.Equal(t, givenDuration, callRecordingFile.GetDuration())
+	assert.Equal(t, ibTimeStartTime, callRecordingFile.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, callRecordingFile.GetEndTime())
+	assert.Equal(t, givenLocation, callRecordingFile.GetLocation())
+	assert.Equal(t, givenStatus, callRecording.GetStatus())
+	assert.Equal(t, givenReason, callRecording.GetReason())
+}
+
+func TestShouldDownloadCallsRecording(t *testing.T) {
+	givenId := "givenId"
+	givenResponse := "10101010"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/recordings/files/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DownloadRecordingFile(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+}
+
+func TestShouldDeleteCallsRecording(t *testing.T) {
+	givenFileId := "218eceba-c044-430d-9f26-8f1a7f0g2d03"
+	givenName := "Example file"
+	givenFileFormat := voice.FILEFORMAT_WAV
+	givenSize := int64(292190)
+	givenSftpUploadStatus := voice.SFTPUPLOADSTATUS_UPLOADED
+	givenCreationTime := "2021-08-24T15:00:00.000+0000"
+	givenCreationTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreationTime)
+	ibTimeCreationTime := infobip.Time{
+		T: givenCreationTimeDateTime,
+	}
+
+	givenExpirationTime := "2021-08-24T15:00:00.000+0000"
+	givenDuration := int64(3)
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEndTime := "2021-08-24T15:00:00.000+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenLocation := voice.RECORDINGFILELOCATION_SFTP
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "fileFormat": "%s",
+        "size": %d,
+        "sftpUploadStatus": "%s",
+        "creationTime": "%s",
+        "expirationTime": "%s",
+        "duration": %d,
+        "startTime": "%s",
+        "endTime": "%s",
+        "location": "%s"
+    }`, givenFileId, givenName, givenFileFormat, givenSize, givenSftpUploadStatus, givenCreationTime, givenExpirationTime, givenDuration, givenStartTime, givenEndTime, givenLocation)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/recordings/files/%s", givenFileId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DeleteRecordingFile(context.Background(), givenFileId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenFileId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenFileFormat, response.GetFileFormat())
+	assert.Equal(t, givenSize, response.GetSize())
+	assert.Equal(t, givenSftpUploadStatus, response.GetSftpUploadStatus())
+	assert.Equal(t, ibTimeCreationTime, response.GetCreationTime())
+	assert.Equal(t, givenDuration, response.GetDuration())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, ibTimeEndTime, response.GetEndTime())
+	assert.Equal(t, givenLocation, response.GetLocation())
+}
+
+func TestShouldComposeConferenceRecording(t *testing.T) {
+	givenConferenceId := "string"
+	givenDeleteCallRecordings := true
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "deleteCallRecordings": %t
+    }`, givenDeleteCallRecordings)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/recordings/conferences/%s/compose", givenConferenceId), givenResponse, 200)
+
+	request := voice.OnDemandComposition{
+		DeleteCallRecordings: &givenDeleteCallRecordings,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.ComposeConferenceRecording(context.Background(), givenConferenceId).OnDemandComposition(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCreateBulk(t *testing.T) {
+	givenBulkId := "46ab0413-448f-4153-ada9-b68b14242dc3"
+	givenApplicationId1 := "61c060db2675060027d8c7a6"
+	givenCallId1 := "7672f60c-3418-40d9-8d6c-d2bac7e9a2b7"
+	givenExternalId1 := "7672f60c-3418-40d9-8d6c-d2bac7e9a2b7"
+	givenFrom1 := "41793026834"
+	givenPhoneNumber1 := "41792036727"
+	givenType1 := voice.CALLENDPOINTTYPE_PHONE
+	givenStatus1 := voice.ACTIONSTATUS_COMPLETED
+	givenReason1 := "Created"
+	givenEntityId := "entityId"
+	givenRecordingType := "AUDIO"
+	givenMachineDetectionEnabled := true
+	givenMaxDuration := int32(28000)
+	givenConnectTimeout := int32(20000)
+	givenMaxCalls := int32(10)
+	givenTimeUnit := voice.TIMEUNIT_MINUTES
+	givenValidityPeriod := int32(60)
+	givenMinWaitPeriod := int32(5)
+	givenMaxWaitPeriod := int32(10)
+	givenMaxAttempts := int32(5)
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+	givenDays := "MONDAY"
+	givenHourFrom := int32(9)
+	givenMinuteFrom := int32(0)
+	givenHourTo := int32(17)
+	givenMinuteTo := int32(0)
+	givenKey2 := "value2"
+	givenKey1 := "value1"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId1,
+	}
+	givenCallsConfigurationId := "dc5942707c704551a00cd2ea"
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "calls": [{
+			"callsConfigurationId": "%s",
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "callId": "%s",
+            "externalId": "%s",
+            "from": "%s",
+            "endpoint": {
+                "phoneNumber": "%s",
+                "type": "%s"
+            },
+            "status": "%s",
+            "reason": "%s"
+        }]
+    }`, givenBulkId, givenCallsConfigurationId, givenApplicationId1, givenEntityId, givenCallId1, givenExternalId1, givenFrom1, givenPhoneNumber1, givenType1, givenStatus1, givenReason1)
+
+	expectedRequest := fmt.Sprintf(`{
+		"callsConfigurationId": "%s",
+        "bulkId": "%s",
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "items": [{
+            "from": "%s",
+            "callRequests": [{
+                "externalId": "%s",
+                "endpoint": {
+                    "phoneNumber": "%s",
+                    "type": "%s"
+                }
+            }],
+            "recording": {
+                "recordingType": "%s"
+            },
+            "machineDetection": {
+                "enabled": %t
+            },
+            "maxDuration": %d,
+            "connectTimeout": %d,
+            "callRate": {
+                "maxCalls": %d,
+                "timeUnit": "%s"
+            },
+            "validityPeriod": %d,
+            "retryOptions": {
+                "minWaitPeriod": %d,
+                "maxWaitPeriod": %d,
+                "maxAttempts": %d
+            },
+            "schedulingOptions": {
+                "startTime": "%s",
+                "callingTimeWindow": {
+                    "from": {
+                        "hour": %d,
+                        "minute": %d
+                    },
+                    "to": {
+                        "hour": %d,
+                        "minute": %d
+                    },
+                    "days": ["%s"]
+                }
+            },
+            "customData": {
+                "key2": "%s",
+                "key1": "%s"
+            }
+        }]
+    }`, givenCallsConfigurationId, givenBulkId, givenApplicationId1, givenEntityId, givenFrom1, givenExternalId1, givenPhoneNumber1, givenType1, givenRecordingType, givenMachineDetectionEnabled, givenMaxDuration, givenConnectTimeout, givenMaxCalls, givenTimeUnit, givenValidityPeriod, givenMinWaitPeriod, givenMaxWaitPeriod, givenMaxAttempts, givenStartTime, givenHourFrom, givenMinuteFrom, givenHourTo, givenMinuteTo, givenDays, givenKey2, givenKey1)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/bulks", givenResponse, 201)
+
+	request := voice.CallBulkRequest{
+		CallsConfigurationId: givenCallsConfigurationId,
+		BulkId:               &givenBulkId,
+		Platform:             &givenPlatform,
+		Items: []voice.BulkItem{{
+			From: givenFrom1,
+			CallRequests: []voice.BulkCallRequest{{
+				Endpoint:   voice.BulkPhoneEndpointAsBulkEndpoint(voice.NewBulkPhoneEndpoint(givenPhoneNumber1)),
+				ExternalId: &givenExternalId1,
+			}},
+			Recording: &voice.CallRecordingRequest{
+				RecordingType: voice.RECORDINGTYPE_AUDIO,
+			},
+			MachineDetection: &voice.MachineDetectionRequest{
+				Enabled: givenMachineDetectionEnabled,
+			},
+			MaxDuration:    &givenMaxDuration,
+			ConnectTimeout: &givenConnectTimeout,
+			CallRate: &voice.CallRate{
+				MaxCalls: &givenMaxCalls,
+				TimeUnit: &givenTimeUnit,
+			},
+			ValidityPeriod: &givenValidityPeriod,
+			RetryOptions: &voice.RetryOptions{
+				MinWaitPeriod: &givenMinWaitPeriod,
+				MaxWaitPeriod: &givenMaxWaitPeriod,
+				MaxAttempts:   &givenMaxAttempts,
+			},
+			SchedulingOptions: &voice.SchedulingOptions{
+				StartTime: &ibTimeStartTime,
+				CallingTimeWindow: &voice.DeliveryTimeWindow{
+					From: &voice.DeliveryTime{
+						Hour:   givenHourFrom,
+						Minute: givenMinuteFrom,
+					},
+					To: &voice.DeliveryTime{
+						Hour:   givenHourTo,
+						Minute: givenMinuteTo,
+					},
+					Days: []voice.DeliveryDay{voice.DELIVERYDAY_MONDAY},
+				},
+			},
+			CustomData: &map[string]string{
+				"key2": givenKey2,
+				"key1": givenKey1,
+			},
+		}},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateBulk(context.Background()).CallBulkRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	calls := response.GetCalls()
+	assert.Equal(t, 1, len(calls))
+	call1 := calls[0]
+	assert.Equal(t, givenPlatform, call1.GetPlatform())
+	assert.Equal(t, givenCallId1, call1.GetCallId())
+	assert.Equal(t, givenExternalId1, call1.GetExternalId())
+	assert.Equal(t, givenFrom1, call1.GetFrom())
+	assert.Equal(t, givenStatus1, call1.GetStatus())
+	assert.Equal(t, givenReason1, call1.GetReason())
+	assert.NotNil(t, call1.GetEndpoint())
+}
+
+func TestShouldGetBulkStatus(t *testing.T) {
+	givenBulkId := "46ab0413-448f-4153-ada9-b68b14242dc3"
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "startTime": "%s",
+        "status": "%s"
+    }`, givenBulkId, givenStartTime, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/bulks/%s", givenBulkId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetBulkStatus(context.Background(), givenBulkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldRescheduleBulk(t *testing.T) {
+	givenBulkId := "46ab0413-448f-4153-ada9-b68b14242dc3"
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "startTime": "%s",
+        "status": "%s"
+    }`, givenBulkId, givenStartTime, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+        "startTime": "%s"
+    }`, givenStartTime)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/bulks/%s/reschedule", givenBulkId), givenResponse, 200)
+
+	request := voice.RescheduleRequest{
+		StartTime: ibTimeStartTime,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.RescheduleBulk(context.Background(), givenBulkId).RescheduleRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldPauseBulk(t *testing.T) {
+	givenBulkId := "46ab0413-448f-4153-ada9-b68b14242dc3"
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "startTime": "%s",
+        "status": "%s"
+    }`, givenBulkId, givenStartTime, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/bulks/%s/pause", givenBulkId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.PauseBulk(context.Background(), givenBulkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldResumeBulk(t *testing.T) {
+	givenBulkId := "46ab0413-448f-4153-ada9-b68b14242dc3"
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "startTime": "%s",
+        "status": "%s"
+    }`, givenBulkId, givenStartTime, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/bulks/%s/resume", givenBulkId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.ResumeBulk(context.Background(), givenBulkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCancelBulk(t *testing.T) {
+	givenBulkId := "46ab0413-448f-4153-ada9-b68b14242dc3"
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "startTime": "%s",
+        "status": "%s"
+    }`, givenBulkId, givenStartTime, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/bulks/%s/cancel", givenBulkId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.CancelBulk(context.Background(), givenBulkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldPostDialogCall(t *testing.T) {
+	givenId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenApplicationId := "61c060db2675060027d8c7a6"
+	givenState := voice.DIALOGSTATE_ESTABLISHED
+	givenStartTime := "2021-08-24T15:00:00.000+0000"
+	givenStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenStartTime)
+	ibTimeStartTime := infobip.Time{
+		T: givenStartTimeDateTime,
+	}
+
+	givenEstablishTime := "2022-01-01T00:00:02.100+0000"
+	givenEstablishTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEstablishTime)
+	ibTimeEstablishTime := infobip.Time{
+		T: givenEstablishTimeDateTime,
+	}
+	givenEndTime := "2022-01-01T00:01:00.100+0000"
+	givenEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenEndTime)
+	ibTimeEndTime := infobip.Time{
+		T: givenEndTimeDateTime,
+	}
+	givenSecondId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenType := voice.CALLENDPOINTTYPE_PHONE
+	givenPhoneNumber := "44790123456"
+	givenDirection := voice.CALLDIRECTION_INBOUND
+	givenSecondState := voice.CALLSTATE_ESTABLISHED
+	givenMuted := false
+	givenDeaf := false
+	givenCamera := false
+	givenScreenShare := false
+	givenSecondStartTime := "2022-01-01T00:00:00.100+0000"
+	givenSecondStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSecondStartTime)
+	ibTimeSecondStartTime := infobip.Time{
+		T: givenSecondStartTimeDateTime,
+	}
+
+	givenAnswerTime := "2022-01-01T00:00:02.100+0000"
+	givenAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenAnswerTime)
+	ibTimeAnswerTime := infobip.Time{
+		T: givenAnswerTimeDateTime,
+	}
+	givenSecondEndTime := "2022-01-01T00:01:00.100+0000"
+	givenSecondEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSecondEndTime)
+	ibTimeSecondEndTime := infobip.Time{
+		T: givenSecondEndTimeDateTime,
+	}
+
+	givenRingDuration := int32(2)
+	givenDialogId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenThirdId := "3ad8805e-d401-424e-9b03-e02a2016a5e2"
+	givenSecondType := voice.CALLENDPOINTTYPE_PHONE
+	givenSecondPhoneNumber := "44790987654"
+	givenSecondDirection := voice.CALLDIRECTION_OUTBOUND
+	givenThirdState := voice.CALLSTATE_ESTABLISHED
+	givenSecondMuted := false
+	givenSecondDeaf := false
+	givenSecondCamera := false
+	givenThirdScreenShare := false
+	givenThirdStartTime := "2022-01-01T00:00:00.100+0000"
+	givenThirdStartTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenThirdStartTime)
+	ibTimeThirdStartTime := infobip.Time{
+		T: givenThirdStartTimeDateTime,
+	}
+	givenSecondAnswerTime := "2022-01-01T00:00:02.100+0000"
+	givenSecondAnswerTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSecondAnswerTime)
+	ibTimeSecondAnswerTime := infobip.Time{
+		T: givenSecondAnswerTimeDateTime,
+	}
+	givenThirdEndTime := "2022-01-01T00:01:00.100+0000"
+	givenThirdEndTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenThirdEndTime)
+	ibTimeThirdEndTime := infobip.Time{
+		T: givenThirdEndTimeDateTime,
+	}
+	givenSecondRingDuration := int32(2)
+	givenSecondDialogId := "034e622a-cc7e-456d-8a10-0ba43b11aa5e"
+	givenEntityId := "entityId"
+	givenPlatform := voice.Platform{
+		EntityId:      &givenEntityId,
+		ApplicationId: &givenApplicationId,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "platform": {
+            "applicationId": "%s",
+            "entityId": "%s"
+        },
+        "state": "%s",
+        "startTime": "%s",
+        "establishTime": "%s",
+        "endTime": "%s",
+        "parentCall": {
+            "id": "%s",
+            "endpoint": {
+                "type": "%s",
+                "phoneNumber": "%s"
+            },
+            "direction": "%s",
+            "state": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            },
+            "startTime": "%s",
+            "answerTime": "%s",
+            "endTime": "%s",
+            "ringDuration": %d,
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "dialogId": "%s"
+        },
+        "childCall": {
+            "id": "%s",
+            "endpoint": {
+                "type": "%s",
+                "phoneNumber": "%s"
+            },
+            "direction": "%s",
+            "state": "%s",
+            "media": {
+                "audio": {
+                    "muted": %t,
+                    "deaf": %t
+                },
+                "video": {
+                    "camera": %t,
+                    "screenShare": %t
+                }
+            },
+            "startTime": "%s",
+            "answerTime": "%s",
+            "endTime": "%s",
+            "ringDuration": %d,
+            "platform": {
+                "applicationId": "%s",
+                "entityId": "%s"
+            },
+            "dialogId": "%s"
+        }
+    }`, givenId, givenApplicationId, givenEntityId, givenState, givenStartTime, givenEstablishTime, givenEndTime, givenSecondId, givenType, givenPhoneNumber, givenDirection, givenSecondState, givenMuted, givenDeaf, givenCamera, givenScreenShare, givenSecondStartTime, givenAnswerTime, givenSecondEndTime, givenRingDuration, givenApplicationId, givenEntityId, givenDialogId, givenThirdId, givenSecondType, givenSecondPhoneNumber, givenSecondDirection, givenThirdState, givenSecondMuted, givenSecondDeaf, givenSecondCamera, givenThirdScreenShare, givenThirdStartTime, givenSecondAnswerTime, givenThirdEndTime, givenSecondRingDuration, givenApplicationId, givenEntityId, givenSecondDialogId)
+
+	givenParentCallId := "d8d84155-3831-43fb-91c9-bb897149a79d"
+	givenRequestType := voice.CALLENDPOINTTYPE_PHONE
+	givenRequestPhoneNumber := "44790987654"
+	givenFrom := "44790123456"
+	givenConnectTimeout := int32(60)
+	givenEnabled := true
+	givenKey2 := "value2"
+	givenKey1 := "value1"
+	givenRecordingType := voice.RECORDINGTYPE_AUDIO
+	givenRequestEnabled := false
+	givenMaxDuration := int32(3600)
+	givenChildCallHangup := false
+	givenCallRinging := false
+	givenFilePrefix := "filePrefix"
+	givenCustomDataField := "custom"
+	givenCustomDataFieldValue := "data"
+	givenCustomData := map[string]string{givenCustomDataField: givenCustomDataFieldValue}
+
+	expectedRequest := fmt.Sprintf(`{
+        "parentCallId": "%s",
+        "childCallRequest": {
+            "endpoint": {
+                "type": "%s",
+                "phoneNumber": "%s"
+            },
+            "from": "%s",
+            "connectTimeout": %d,
+            "machineDetection": {
+                "enabled": %t
+            },
+            "customData": {
+                "key2": "%s",
+                "key1": "%s"
+            }
+        },
+        "recording": {
+            "recordingType": "%s",
+            "dialogComposition": {
+                "enabled": %t
+            },
+            "customData": {
+                "%s": "%s"
+            },
+            "filePrefix": "%s"
+        },
+        "maxDuration": %d,
+        "propagationOptions": {
+            "childCallHangup": %t,
+            "childCallRinging": %t
+        }
+    }`, givenParentCallId, givenRequestType, givenRequestPhoneNumber, givenFrom, givenConnectTimeout, givenEnabled, givenKey2, givenKey1, givenRecordingType, givenRequestEnabled, givenCustomDataField, givenCustomDataFieldValue, givenFilePrefix, givenMaxDuration, givenChildCallHangup, givenCallRinging)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/dialogs", givenResponse, 200)
+
+	givenEndpoint := voice.PhoneEndpointAsCallEndpoint(voice.NewPhoneEndpoint(givenRequestPhoneNumber))
+
+	request := voice.DialogRequest{
+		ParentCallId: givenParentCallId,
+		ChildCallRequest: &voice.DialogCallRequest{
+			Endpoint:       &givenEndpoint,
+			From:           givenFrom,
+			ConnectTimeout: &givenConnectTimeout,
+			MachineDetection: &voice.MachineDetectionRequest{
+				Enabled: givenEnabled,
+			},
+			CustomData: &map[string]string{
+				"key2": givenKey2,
+				"key1": givenKey1,
+			},
+		},
+		Recording: &voice.DialogRecordingRequest{
+			RecordingType: givenRecordingType,
+			DialogComposition: &voice.DialogRecordingComposition{
+				Enabled: &givenRequestEnabled,
+			},
+			CustomData: &givenCustomData,
+			FilePrefix: &givenFilePrefix,
+		},
+		MaxDuration: &givenMaxDuration,
+		PropagationOptions: &voice.DialogPropagationOptions{
+			ChildCallHangup:  &givenChildCallHangup,
+			ChildCallRinging: &givenCallRinging,
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateDialog(context.Background()).DialogRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenPlatform, response.GetPlatform())
+	assert.Equal(t, givenState, response.GetState())
+	assert.Equal(t, ibTimeStartTime, response.GetStartTime())
+	assert.Equal(t, ibTimeEstablishTime, response.GetEstablishTime())
+	assert.Equal(t, ibTimeEndTime, response.GetEndTime())
+	assert.NotNil(t, response.GetParentCall())
+	assert.Equal(t, &givenSecondId, response.GetParentCall().Id)
+	assert.NotNil(t, response.GetParentCall().Endpoint)
+	assert.Equal(t, givenType, response.GetParentCall().Endpoint.PhoneEndpoint.Type)
+	assert.Equal(t, givenPhoneNumber, response.GetParentCall().Endpoint.PhoneEndpoint.GetPhoneNumber())
+	assert.Equal(t, &givenDirection, response.GetParentCall().Direction)
+	assert.Equal(t, &givenSecondState, response.GetParentCall().State)
+	assert.Equal(t, &voice.MediaProperties{
+		Audio: &voice.AudioMediaProperties{
+			Muted: &givenMuted,
+			Deaf:  &givenDeaf,
+		},
+		Video: &voice.VideoMediaProperties{
+			Camera:      &givenCamera,
+			ScreenShare: &givenScreenShare,
+		},
+	}, response.GetParentCall().Media)
+	assert.Equal(t, &ibTimeSecondStartTime, response.GetParentCall().StartTime)
+	assert.Equal(t, &ibTimeAnswerTime, response.GetParentCall().AnswerTime)
+	assert.Equal(t, &ibTimeSecondEndTime, response.GetParentCall().EndTime)
+	assert.Equal(t, &givenRingDuration, response.GetParentCall().RingDuration)
+	assert.Equal(t, &givenPlatform, response.GetParentCall().Platform)
+	assert.Equal(t, &givenDialogId, response.GetParentCall().DialogId)
+	assert.NotNil(t, response.GetChildCall())
+	assert.Equal(t, &givenThirdId, response.GetChildCall().Id)
+	assert.Equal(t, givenSecondPhoneNumber, response.GetChildCall().Endpoint.PhoneEndpoint.GetPhoneNumber())
+	assert.Equal(t, &givenSecondDirection, response.GetChildCall().Direction)
+	assert.Equal(t, &givenThirdState, response.GetChildCall().State)
+	assert.Equal(t, &voice.MediaProperties{
+		Audio: &voice.AudioMediaProperties{
+			Muted: &givenSecondMuted,
+			Deaf:  &givenSecondDeaf,
+		},
+		Video: &voice.VideoMediaProperties{
+			Camera:      &givenSecondCamera,
+			ScreenShare: &givenThirdScreenShare,
+		},
+	}, response.GetChildCall().Media)
+	assert.Equal(t, &ibTimeThirdStartTime, response.GetChildCall().StartTime)
+	assert.Equal(t, &ibTimeSecondAnswerTime, response.GetChildCall().AnswerTime)
+	assert.Equal(t, &ibTimeThirdEndTime, response.GetChildCall().EndTime)
+	assert.Equal(t, &givenSecondRingDuration, response.GetChildCall().RingDuration)
+	assert.Equal(t, &givenPlatform, response.GetChildCall().Platform)
+	assert.Equal(t, &givenSecondDialogId, response.GetChildCall().DialogId)
+}
+
+func TestShouldDialogBroadcastText(t *testing.T) {
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	expectedText := "This dialog will end in 5 minutes."
+	expectedRequest := fmt.Sprintf(`{
+        "text": "%s"
+    }`, expectedText)
+
+	givenDialogId := "123"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/dialogs/%s/broadcast-webrtc-text", givenDialogId), givenResponse, 200)
+
+	callsDialogBroadcastWebrtcTextRequest := voice.DialogBroadcastWebrtcTextRequest{
+		Text: &expectedText,
+	}
+
+	actualRequest, _ := json.Marshal(callsDialogBroadcastWebrtcTextRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.DialogBroadcastWebrtcText(context.Background(), givenDialogId).DialogBroadcastWebrtcTextRequest(callsDialogBroadcastWebrtcTextRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldCreateSipTrunk(t *testing.T) {
+	givenId := "string"
+	givenName := "string"
+	givenLocation := voice.SIPTRUNKLOCATION_SAO_PAULO
+	givenTls := true
+	givenCodecs := voice.AUDIOCODEC_PCMU
+	givenDtmf := voice.DTMFTYPE_RFC2833
+	givenFax := voice.FAXTYPE_NONE
+	givenNumberFormat := voice.NUMBERPRESENTATIONFORMAT_E164
+	givenInternationalCallsAllowed := true
+	givenChannelLimit := int32(0)
+	givenAnonymization := voice.ANONYMIZATIONTYPE_NONE
+	givenPackageType := voice.BILLINGPACKAGETYPE_METERED
+	givenAddressId := "string"
+	givenPrimary := "string"
+	givenBackup := "string"
+	givenType := voice.SIPTRUNKTYPE_STATIC
+	givenSourceHosts := "string"
+	givenDestinationHosts := "string"
+	givenStrategy := voice.SELECTIONSTRATEGY_FAILOVER
+	givenEnabled := false
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "location": "%s",
+       "tls": %t,
+       "codecs": ["%s"],
+       "dtmf": "%s",
+       "fax": "%s",
+       "numberFormat": "%s",
+       "internationalCallsAllowed": %t,
+       "channelLimit": %d,
+       "anonymization": "%s",
+       "billingPackage": {
+           "packageType": "%s",
+           "addressId": "%s"
+       },
+       "sbcHosts": {
+           "primary": ["%s"],
+           "backup": ["%s"]
+       },
+       "type": "%s",
+       "sourceHosts": ["%s"],
+       "destinationHosts": ["%s"],
+       "strategy": "%s",
+       "sipOptions": {
+           "enabled": %t
+       }
+   }`, givenId, givenName, givenLocation, givenTls, givenCodecs, givenDtmf, givenFax, givenNumberFormat, givenInternationalCallsAllowed, givenChannelLimit, givenAnonymization, givenPackageType, givenAddressId, givenPrimary, givenBackup, givenType, givenSourceHosts, givenDestinationHosts, givenStrategy, givenEnabled)
+
+	expectedRequest := fmt.Sprintf(`{
+       "type": "%s",
+       "name": "%s",
+       "location": "%s",
+       "tls": %t,
+       "codecs": ["%s"],
+       "dtmf": "%s",
+       "fax": "%s",
+       "numberFormat": "%s",
+       "internationalCallsAllowed": %t,
+       "channelLimit": %d,
+       "anonymization": "%s",
+       "billingPackage": {
+           "packageType": "%s",
+           "addressId": "%s"
+       },
+       "sourceHosts": ["%s"],
+       "destinationHosts": ["%s"],
+       "strategy": "%s",
+       "sipOptions": {
+           "enabled": %t
+       }
+   }`, givenType, givenName, givenLocation, givenTls, givenCodecs, givenDtmf, givenFax, givenNumberFormat, givenInternationalCallsAllowed, givenChannelLimit, givenAnonymization, givenPackageType, givenAddressId, givenSourceHosts, givenDestinationHosts, givenStrategy, givenEnabled)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/sip-trunks", givenResponse, 202)
+
+	callsStaticSipTrunkRequest := voice.NewStaticSipTrunkRequest()
+	callsStaticSipTrunkRequest.SourceHosts = []string{givenSourceHosts}
+	callsStaticSipTrunkRequest.DestinationHosts = []string{givenDestinationHosts}
+	callsStaticSipTrunkRequest.Strategy = &givenStrategy
+	callsStaticSipTrunkRequest.SipOptions = &voice.SipOptions{Enabled: &givenEnabled}
+	callsStaticSipTrunkRequest.Codecs = []voice.AudioCodec{givenCodecs}
+	callsStaticSipTrunkRequest.Anonymization = &givenAnonymization
+	callsStaticSipTrunkRequest.Dtmf = &givenDtmf
+	callsStaticSipTrunkRequest.Fax = &givenFax
+	callsStaticSipTrunkRequest.NumberFormat = &givenNumberFormat
+	callsStaticSipTrunkRequest.InternationalCallsAllowed = &givenInternationalCallsAllowed
+	callsStaticSipTrunkRequest.ChannelLimit = givenChannelLimit
+	callsStaticSipTrunkRequest.BillingPackage = voice.BillingPackage{PackageType: givenPackageType, AddressId: &givenAddressId}
+	callsStaticSipTrunkRequest.Name = givenName
+	callsStaticSipTrunkRequest.Location = &givenLocation
+	callsStaticSipTrunkRequest.Tls = &givenTls
+
+	callsSipTrunkRequest := voice.StaticSipTrunkRequestAsSipTrunkRequest(callsStaticSipTrunkRequest)
+
+	actualRequest, _ := json.Marshal(callsSipTrunkRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateSipTrunk(context.Background()).SipTrunkRequest(callsSipTrunkRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.CreateStaticSipTrunkResponse.GetId())
+	assert.Equal(t, givenName, response.CreateStaticSipTrunkResponse.GetName())
+	assert.Equal(t, givenLocation, response.CreateStaticSipTrunkResponse.GetLocation())
+	assert.Equal(t, givenTls, response.CreateStaticSipTrunkResponse.GetTls())
+	assert.Equal(t, 1, len(response.CreateStaticSipTrunkResponse.GetCodecs()))
+	assert.Equal(t, givenCodecs, response.CreateStaticSipTrunkResponse.GetCodecs()[0])
+	assert.Equal(t, givenDtmf, response.CreateStaticSipTrunkResponse.GetDtmf())
+	assert.Equal(t, givenFax, response.CreateStaticSipTrunkResponse.GetFax())
+	assert.Equal(t, givenNumberFormat, response.CreateStaticSipTrunkResponse.GetNumberFormat())
+	assert.Equal(t, givenInternationalCallsAllowed, response.CreateStaticSipTrunkResponse.GetInternationalCallsAllowed())
+	assert.Equal(t, givenChannelLimit, response.CreateStaticSipTrunkResponse.GetChannelLimit())
+	assert.Equal(t, givenAnonymization, response.CreateStaticSipTrunkResponse.GetAnonymization())
+	assert.NotNil(t, response.CreateStaticSipTrunkResponse.GetBillingPackage())
+	assert.Equal(t, givenPackageType, response.CreateStaticSipTrunkResponse.GetBillingPackage().PackageType)
+	assert.Equal(t, &givenAddressId, response.CreateStaticSipTrunkResponse.GetBillingPackage().AddressId)
+	assert.Equal(t, givenPrimary, response.CreateStaticSipTrunkResponse.GetSbcHosts().Primary[0])
+	assert.Equal(t, givenBackup, response.CreateStaticSipTrunkResponse.GetSbcHosts().Backup[0])
+	assert.Equal(t, givenType, response.CreateStaticSipTrunkResponse.Type)
+	assert.Equal(t, givenSourceHosts, response.CreateStaticSipTrunkResponse.GetSourceHosts()[0])
+	assert.Equal(t, givenDestinationHosts, response.CreateStaticSipTrunkResponse.GetDestinationHosts()[0])
+	assert.Equal(t, givenStrategy, response.CreateStaticSipTrunkResponse.GetStrategy())
+	assert.Equal(t, &givenEnabled, response.CreateStaticSipTrunkResponse.GetSipOptions().Enabled)
+}
+
+func TestShouldGetSipTrunk(t *testing.T) {
+	givenId := "string"
+	givenName := "string"
+	givenLocation := voice.SIPTRUNKLOCATION_SAO_PAULO
+	givenTls := true
+	givenCodecs := voice.AUDIOCODEC_PCMU
+	givenDtmf := voice.DTMFTYPE_RFC2833
+	givenFax := voice.FAXTYPE_NONE
+	givenNumberFormat := voice.NUMBERPRESENTATIONFORMAT_E164
+	givenInternationalCallsAllowed := true
+	givenChannelLimit := int32(0)
+	givenAnonymization := voice.ANONYMIZATIONTYPE_NONE
+	givenPackageType := voice.BILLINGPACKAGETYPE_METERED
+	givenAddressId := "string"
+	givenPrimary := "string"
+	givenBackup := "string"
+	givenType := voice.SIPTRUNKTYPE_STATIC
+	givenSourceHosts := "string"
+	givenDestinationHosts := "string"
+	givenStrategy := voice.SELECTIONSTRATEGY_FAILOVER
+	givenEnabled := false
+
+	givenResponse := fmt.Sprintf(`{
+      "id": "%s",
+      "name": "%s",
+      "location": "%s",
+      "tls": %t,
+      "codecs": ["%s"],
+      "dtmf": "%s",
+      "fax": "%s",
+      "numberFormat": "%s",
+      "internationalCallsAllowed": %t,
+      "channelLimit": %d,
+      "anonymization": "%s",
+      "billingPackage": {
+          "packageType": "%s",
+          "addressId": "%s"
+      },
+      "sbcHosts": {
+          "primary": ["%s"],
+          "backup": ["%s"]
+      },
+      "type": "%s",
+      "sourceHosts": ["%s"],
+      "destinationHosts": ["%s"],
+      "strategy": "%s",
+      "sipOptions": {
+          "enabled": %t
+      }
+  }`, givenId, givenName, givenLocation, givenTls, givenCodecs, givenDtmf, givenFax, givenNumberFormat, givenInternationalCallsAllowed, givenChannelLimit, givenAnonymization, givenPackageType, givenAddressId, givenPrimary, givenBackup, givenType, givenSourceHosts, givenDestinationHosts, givenStrategy, givenEnabled)
+
+	givenSipTrunkId := "123"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/sip-trunks/%s", givenSipTrunkId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetSipTrunk(context.Background(), givenSipTrunkId).Execute()
+	staticResponse := response.StaticSipTrunkResponse
+
+	assert.Nil(t, err)
+	assert.NotNil(t, staticResponse)
+	assert.Equal(t, givenId, staticResponse.GetId())
+	assert.Equal(t, givenName, staticResponse.GetName())
+	assert.Equal(t, givenLocation, staticResponse.GetLocation())
+	assert.Equal(t, givenTls, staticResponse.GetTls())
+	assert.Equal(t, 1, len(staticResponse.GetCodecs()))
+	assert.Equal(t, givenCodecs, staticResponse.GetCodecs()[0])
+	assert.Equal(t, givenDtmf, staticResponse.GetDtmf())
+	assert.Equal(t, givenFax, staticResponse.GetFax())
+	assert.Equal(t, givenNumberFormat, staticResponse.GetNumberFormat())
+	assert.Equal(t, givenInternationalCallsAllowed, staticResponse.GetInternationalCallsAllowed())
+	assert.Equal(t, givenChannelLimit, staticResponse.GetChannelLimit())
+	assert.Equal(t, givenAnonymization, staticResponse.GetAnonymization())
+	assert.NotNil(t, staticResponse.GetBillingPackage())
+	assert.Equal(t, givenPackageType, staticResponse.GetBillingPackage().PackageType)
+	assert.Equal(t, &givenAddressId, staticResponse.GetBillingPackage().AddressId)
+	assert.Equal(t, givenPrimary, staticResponse.GetSbcHosts().Primary[0])
+	assert.Equal(t, givenBackup, staticResponse.GetSbcHosts().Backup[0])
+	assert.Equal(t, givenType, staticResponse.Type)
+	assert.Equal(t, givenSourceHosts, staticResponse.GetSourceHosts()[0])
+	assert.Equal(t, givenDestinationHosts, staticResponse.GetDestinationHosts()[0])
+	assert.Equal(t, givenStrategy, staticResponse.GetStrategy())
+	assert.Equal(t, &givenEnabled, staticResponse.GetSipOptions().Enabled)
+}
+
+func TestShouldCreateSipTrunkServiceAddress(t *testing.T) {
+	givenId := "abc-def-ghi"
+	givenName := "Location address name"
+	givenStreet := "Location address street"
+	givenCity := "My city"
+	givenPostCode := "71000"
+	givenSuite := "1030"
+	givenCountryName := "Croatia"
+	givenCountryCode := "HRV"
+	givenRegionName := "Zagreb County"
+	givenRegionCode := "HR-01"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "street": "%s",
+        "city": "%s",
+        "postCode": "%s",
+        "suite": "%s",
+        "country": {
+            "name": "%s",
+            "code": "%s"
+        },
+        "region": {
+            "name": "%s",
+            "code": "%s"
+        }
+    }`, givenId, givenName, givenStreet, givenCity, givenPostCode, givenSuite, givenCountryName, givenCountryCode, givenRegionName, givenRegionCode)
+
+	expectedRequest := fmt.Sprintf(`{
+        "name": "%s",
+        "street": "%s",
+        "city": "%s",
+        "postCode": "%s",
+        "suite": "%s",
+        "countryCode": "%s",
+        "countryRegionCode": "%s"
+    }`, givenName, givenStreet, givenCity, givenPostCode, givenSuite, givenCountryCode, givenRegionCode)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/sip-trunks/service-addresses", givenResponse, 201)
+
+	callsSipTrunkServiceAddressRequest := voice.SipTrunkServiceAddressRequest{
+		Name:              givenName,
+		Street:            givenStreet,
+		City:              givenCity,
+		PostCode:          givenPostCode,
+		Suite:             &givenSuite,
+		CountryCode:       givenCountryCode,
+		CountryRegionCode: &givenRegionCode,
+	}
+
+	actualRequest, _ := json.Marshal(callsSipTrunkServiceAddressRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateSipTrunkServiceAddress(context.Background()).SipTrunkServiceAddressRequest(callsSipTrunkServiceAddressRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenStreet, response.GetStreet())
+	assert.Equal(t, givenCity, response.GetCity())
+	assert.Equal(t, givenPostCode, response.GetPostCode())
+	assert.Equal(t, givenSuite, response.GetSuite())
+	assert.NotNil(t, response.GetCountry())
+	assert.Equal(t, &givenCountryName, response.GetCountry().Name)
+	assert.Equal(t, &givenCountryCode, response.GetCountry().Code)
+	assert.NotNil(t, response.GetRegion())
+	assert.Equal(t, &givenRegionName, response.GetRegion().Name)
+	assert.Equal(t, &givenRegionCode, response.GetRegion().Code)
+}
+
+func TestShouldGetSipTrunkServiceAddress(t *testing.T) {
+	givenId := "abc-def-ghi"
+	givenName := "Location address name"
+	givenStreet := "Location address street"
+	givenCity := "My city"
+	givenPostCode := "71000"
+	givenSuite := "1030"
+	givenCountryName := "Croatia"
+	givenCountryCode := "HRV"
+	givenRegionName := "Zagreb County"
+	givenRegionCode := "HR-01"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "street": "%s",
+        "city": "%s",
+        "postCode": "%s",
+        "suite": "%s",
+        "country": {
+            "name": "%s",
+            "code": "%s"
+        },
+        "region": {
+            "name": "%s",
+            "code": "%s"
+        }
+    }`, givenId, givenName, givenStreet, givenCity, givenPostCode, givenSuite, givenCountryName, givenCountryCode, givenRegionName, givenRegionCode)
+
+	givenSipTrunkServiceAddressId := "123"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/sip-trunks/service-addresses/%s", givenSipTrunkServiceAddressId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetSipTrunkServiceAddress(context.Background(), givenSipTrunkServiceAddressId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenStreet, response.GetStreet())
+	assert.Equal(t, givenCity, response.GetCity())
+	assert.Equal(t, givenPostCode, response.GetPostCode())
+	assert.Equal(t, givenSuite, response.GetSuite())
+	assert.NotNil(t, response.GetCountry())
+	assert.Equal(t, &givenCountryName, response.GetCountry().Name)
+	assert.Equal(t, &givenCountryCode, response.GetCountry().Code)
+	assert.NotNil(t, response.GetRegion())
+	assert.Equal(t, &givenRegionName, response.GetRegion().Name)
+	assert.Equal(t, &givenRegionCode, response.GetRegion().Code)
+}
+
+func TestShouldUpdateSipTrunkServiceAddress(t *testing.T) {
+	givenId := "abc-def-ghi"
+	givenName := "Location address name"
+	givenStreet := "Location address street"
+	givenCity := "My city"
+	givenPostCode := "71000"
+	givenSuite := "1030"
+	givenCountryName := "Croatia"
+	givenCountryCode := "HRV"
+	givenRegionName := "Zagreb County"
+	givenRegionCode := "HR-01"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "street": "%s",
+        "city": "%s",
+        "postCode": "%s",
+        "suite": "%s",
+        "country": {
+            "name": "%s",
+            "code": "%s"
+        },
+        "region": {
+            "name": "%s",
+            "code": "%s"
+        }
+    }`, givenId, givenName, givenStreet, givenCity, givenPostCode, givenSuite, givenCountryName, givenCountryCode, givenRegionName, givenRegionCode)
+
+	expectedRequest := fmt.Sprintf(`{
+        "name": "%s",
+        "street": "%s",
+        "city": "%s",
+        "postCode": "%s",
+        "suite": "%s",
+        "countryCode": "%s",
+        "countryRegionCode": "%s"
+    }`, givenName, givenStreet, givenCity, givenPostCode, givenSuite, givenCountryCode, givenRegionCode)
+
+	givenSipTrunkServiceAddressId := "123"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/calls/1/sip-trunks/service-addresses/%s", givenSipTrunkServiceAddressId), givenResponse, 200)
+
+	callsSipTrunkServiceAddressRequest := voice.SipTrunkServiceAddressRequest{
+		Name:              givenName,
+		Street:            givenStreet,
+		City:              givenCity,
+		PostCode:          givenPostCode,
+		Suite:             &givenSuite,
+		CountryCode:       givenCountryCode,
+		CountryRegionCode: &givenRegionCode,
+	}
+
+	actualRequest, _ := json.Marshal(callsSipTrunkServiceAddressRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.UpdateSipTrunkServiceAddress(context.Background(), givenSipTrunkServiceAddressId).SipTrunkServiceAddressRequest(callsSipTrunkServiceAddressRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenStreet, response.GetStreet())
+	assert.Equal(t, givenCity, response.GetCity())
+	assert.Equal(t, givenPostCode, response.GetPostCode())
+	assert.Equal(t, givenSuite, response.GetSuite())
+	assert.NotNil(t, response.GetCountry())
+	assert.Equal(t, &givenCountryName, response.GetCountry().Name)
+	assert.Equal(t, &givenCountryCode, response.GetCountry().Code)
+	assert.NotNil(t, response.GetRegion())
+	assert.Equal(t, &givenRegionName, response.GetRegion().Name)
+	assert.Equal(t, &givenRegionCode, response.GetRegion().Code)
+}
+
+func TestShouldDeleteSipTrunkServiceAddress(t *testing.T) {
+	givenId := "abc-def-ghi"
+	givenName := "Location address name"
+	givenStreet := "Location address street"
+	givenCity := "My city"
+	givenPostCode := "71000"
+	givenSuite := "1030"
+	givenCountryName := "Croatia"
+	givenCountryCode := "HRV"
+	givenRegionName := "Zagreb County"
+	givenRegionCode := "HR-01"
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "street": "%s",
+        "city": "%s",
+        "postCode": "%s",
+        "suite": "%s",
+        "country": {
+            "name": "%s",
+            "code": "%s"
+        },
+        "region": {
+            "name": "%s",
+            "code": "%s"
+        }
+    }`, givenId, givenName, givenStreet, givenCity, givenPostCode, givenSuite, givenCountryName, givenCountryCode, givenRegionName, givenRegionCode)
+
+	givenSipTrunkServiceAddressId := "123"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/sip-trunks/service-addresses/%s", givenSipTrunkServiceAddressId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DeleteSipTrunkServiceAddress(context.Background(), givenSipTrunkServiceAddressId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenStreet, response.GetStreet())
+	assert.Equal(t, givenCity, response.GetCity())
+	assert.Equal(t, givenPostCode, response.GetPostCode())
+	assert.Equal(t, givenSuite, response.GetSuite())
+	assert.NotNil(t, response.GetCountry())
+	assert.Equal(t, &givenCountryName, response.GetCountry().Name)
+	assert.Equal(t, &givenCountryCode, response.GetCountry().Code)
+	assert.NotNil(t, response.GetRegion())
+	assert.Equal(t, &givenRegionName, response.GetRegion().Name)
+	assert.Equal(t, &givenRegionCode, response.GetRegion().Code)
+}
+
+func TestShouldGetCountries(t *testing.T) {
+	givenName1 := "New Zealand"
+	givenCode1 := "NZL"
+	givenName2 := "Fiji"
+	givenCode2 := "FJI"
+	givenName3 := "Guadeloupe"
+	givenCode3 := "GLP"
+
+	givenResponse := fmt.Sprintf(`{
+        "countries": [
+            {"name": "%s", "code": "%s"},
+            {"name": "%s", "code": "%s"},
+            {"name": "%s", "code": "%s"}
+        ]
+    }`, givenName1, givenCode1, givenName2, givenCode2, givenName3, givenCode3)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/sip-trunks/service-addresses/countries", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCountries(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 3, len(response.GetCountries()))
+	assert.Equal(t, givenName1, response.GetCountries()[0].GetName())
+	assert.Equal(t, givenCode1, response.GetCountries()[0].GetCode())
+	assert.Equal(t, givenName2, response.GetCountries()[1].GetName())
+	assert.Equal(t, givenCode2, response.GetCountries()[1].GetCode())
+	assert.Equal(t, givenName3, response.GetCountries()[2].GetName())
+	assert.Equal(t, givenCode3, response.GetCountries()[2].GetCode())
+}
+
+func TestShouldGetRegions(t *testing.T) {
+	givenName1 := "Dubrovnik-Neretva County"
+	givenCode1 := "HR-19"
+	givenCountryCode1 := "HRV"
+	givenName2 := "Međimurje County"
+	givenCode2 := "HR-20"
+	givenCountryCode2 := "HRV"
+	givenName3 := "City of Zagreb"
+	givenCode3 := "HR-21"
+	givenCountryCode3 := "HRV"
+
+	givenResponse := fmt.Sprintf(`{
+        "regions": [
+            {"name": "%s", "code": "%s", "countryCode": "%s"},
+            {"name": "%s", "code": "%s", "countryCode": "%s"},
+            {"name": "%s", "code": "%s", "countryCode": "%s"}
+        ]
+    }`, givenName1, givenCode1, givenCountryCode1, givenName2, givenCode2, givenCountryCode2, givenName3, givenCode3, givenCountryCode3)
+
+	givenCountryCode := "HRV"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/sip-trunks/service-addresses/countries/regions?countryCode=%s", givenCountryCode), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetRegions(context.Background()).CountryCode(givenCountryCode).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 3, len(response.GetRegions()))
+	assert.Equal(t, givenName1, response.GetRegions()[0].GetName())
+	assert.Equal(t, givenCode1, response.GetRegions()[0].GetCode())
+	assert.Equal(t, givenCountryCode1, response.GetRegions()[0].GetCountryCode())
+	assert.Equal(t, givenName2, response.GetRegions()[1].GetName())
+	assert.Equal(t, givenCode2, response.GetRegions()[1].GetCode())
+	assert.Equal(t, givenCountryCode2, response.GetRegions()[1].GetCountryCode())
+	assert.Equal(t, givenName3, response.GetRegions()[2].GetName())
+	assert.Equal(t, givenCode3, response.GetRegions()[2].GetCode())
+	assert.Equal(t, givenCountryCode3, response.GetRegions()[2].GetCountryCode())
+}
+
+func TestShouldResetSipTrunkPassword(t *testing.T) {
+	sipTrunkId := "426c8402-691c-11ee-8c99-0242ac120002"
+	givenUsername := "426c8402-691c-11ee-8c99-0242ac120002"
+	givenPassword := "fkZ1921tM87"
+
+	givenResponse := fmt.Sprintf(`{
+        "username": "%s",
+        "password": "%s"
+    }`, givenUsername, givenPassword)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/sip-trunks/%s/reset-password", sipTrunkId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.ResetSipTrunkPassword(context.Background(), sipTrunkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenUsername, response.GetUsername())
+	assert.Equal(t, givenPassword, response.GetPassword())
+}
+
+func TestShouldStartTranscription(t *testing.T) {
+	callId := "12345"
+	givenLanguage := voice.TRANSCRIPTIONLANGUAGE_ES_AR
+	givenSendInterimResults := false
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	expectedRequest := fmt.Sprintf(`{
+        "transcription": {
+            "language": "%s",
+            "sendInterimResults": %t
+        }
+    }`, givenLanguage, givenSendInterimResults)
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/start-transcription", callId), givenResponse, 200)
+
+	request := voice.StartTranscriptionRequest{
+		Transcription: &voice.Transcription{
+			Language:           givenLanguage,
+			SendInterimResults: &givenSendInterimResults,
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CallStartTranscription(context.Background(), callId).StartTranscriptionRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldStopTranscription(t *testing.T) {
+	callId := "12345"
+	givenStatus := voice.ACTIONSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/calls/1/calls/%s/stop-transcription", callId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.CallStopTranscription(context.Background(), callId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldGetCallsConfigurations(t *testing.T) {
+	givenId := "63467c6e2885a5389ba11d80"
+	givenName := "Calls configuration"
+	givenPage := int32(0)
+	givenSize := int32(1)
+	givenTotalPages := int32(1)
+	givenTotalResults := int64(1)
+
+	givenResponse := fmt.Sprintf(`{
+		"results": [
+			{
+				"id": "%s",
+				"name": "%s"
+			}
+		],
+		"paging": {
+			"page": %d,
+			"size": %d,
+			"totalPages": %d,
+			"totalResults": %d
+		}
+	}`, givenId, givenName, givenPage, givenSize, givenTotalPages, givenTotalResults)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/calls/1/configurations", givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallsConfigurations(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response.GetResults()))
+	result := response.GetResults()[0]
+	assert.Equal(t, givenId, result.GetId())
+	assert.Equal(t, givenName, result.GetName())
+	paging := response.GetPaging()
+	assert.Equal(t, givenPage, paging.GetPage())
+	assert.Equal(t, givenSize, paging.GetSize())
+	assert.Equal(t, givenTotalPages, paging.GetTotalPages())
+	assert.Equal(t, givenTotalResults, paging.GetTotalResults())
+}
+
+func TestShouldCreateCallsConfiguration(t *testing.T) {
+	givenId := "63467c6e2885a5389ba11d80"
+	givenName := "Calls configuration"
+
+	givenRequest := voice.CallsConfigurationCreateRequest{
+		Id:   &givenId,
+		Name: &givenName,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+		"id": "%s",
+		"name": "%s"
+	}`, givenId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/calls/1/configurations", givenResponse, 201)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	ValidateExpectedRequestBodiesMatches(t, givenResponse, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.CreateCallsConfiguration(context.Background()).CallsConfigurationCreateRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+}
+
+func TestShouldGetCallsConfiguration(t *testing.T) {
+	givenId := "63467c6e2885a5389ba11d80"
+	givenName := "Calls configuration"
+
+	givenResponse := fmt.Sprintf(`{
+		"id": "%s",
+		"name": "%s"
+	}`, givenId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/calls/1/configurations/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.GetCallsConfiguration(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+}
+
+func TestShouldUpdateCallsConfiguration(t *testing.T) {
+	givenId := "63467c6e2885a5389ba11d80"
+	givenName := "Calls configuration"
+
+	givenRequest := voice.CallsConfigurationUpdateRequest{
+		Name: &givenName,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+		"id": "%s",
+		"name": "%s"
+	}`, givenId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/calls/1/configurations/%s", givenId), givenResponse, 200)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	expectedRequest := fmt.Sprintf(`{
+		"name": "%s"
+	}`, givenName)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.CallsAPI.UpdateCallsConfiguration(context.Background(), givenId).CallsConfigurationUpdateRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+}
+
+func TestShouldDeleteCallsConfiguration(t *testing.T) {
+	givenId := "63467c6e2885a5389ba11d80"
+	givenName := "Calls configuration"
+
+	givenResponse := fmt.Sprintf(`{
+		"id": "%s",
+		"name": "%s"
+	}`, givenId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/calls/1/configurations/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.CallsAPI.DeleteCallsConfiguration(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+}
+
+func TestShouldDownloadRecordingFile(t *testing.T) {
+	givenFileId := "3C67336FA555A606C85FA9637906A6AB98436B7AFC65D857A416F6521D39F8F0E1D3D2469FF580D8968D3DD89A2DB561"
+	givenBinaryData := []byte{0x00, 0x01, 0x02, 0x03, 0x04}
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+
+	SetUpGetRequestOctet(fmt.Sprintf("/calls/1/recordings/files/%s", givenFileId), givenBinaryData, 200)
+
+	file, _, err := infobipClient.CallsAPI.DownloadRecordingFile(context.Background(), givenFileId).Execute()
+
+	assert.Nil(t, err, "Expected no error while executing the request")
+	assert.NotNil(t, file, "Expected a valid file in the response")
+
+	defer file.Close()
+	content, err := io.ReadAll(file)
+	assert.Nil(t, err, "Expected no error while reading the file content")
+	assert.Equal(t, givenBinaryData, content, "File content does not match the expected binary data")
+}
diff --git a/tests/date_serialization_test.go b/tests/date_serialization_test.go
index c5e068e..fb66303 100644
--- a/tests/date_serialization_test.go
+++ b/tests/date_serialization_test.go
@@ -10,17 +10,21 @@ import (
 
 func TestSupportedSpecifiedTimeFormat(t *testing.T) {
 	testCases := []struct {
-		time string
+		time     string
+		expected int64 // Expected Unix timestamp for each case
 	}{
-		{`"2035-08-18T12:08:42.777+0000"`},
-		{`"2035-08-18T13:08:42.777+0100"`},
-		{`"2035-08-18T11:08:42.777-0100"`},
-		{`"2035-08-18T17:08:42.777+0500"`},
-		{`"2035-08-18T07:08:42.777-0500"`},
-		{`"2035-08-18T13:38:42.777+0130"`},
-		{`"2035-08-18T10:38:42.777-0130"`},
-		{`"2035-08-18T17:38:42.777+0530"`},
-		{`"2035-08-18T06:38:42.777-0530"`},
+		{`"2035-08-18T12:08:42.777+0000"`, 2071051722},
+		{`"2035-08-18T13:08:42.777+0100"`, 2071051722},
+		{`"2035-08-18T11:08:42.777-0100"`, 2071051722},
+		{`"2035-08-18T17:08:42.777+0500"`, 2071051722},
+		{`"2035-08-18T07:08:42.777-0500"`, 2071051722},
+		{`"2035-08-18T13:38:42.777+0130"`, 2071051722},
+		{`"2035-08-18T10:38:42.777-0130"`, 2071051722},
+		{`"2035-08-18T17:38:42.777+0530"`, 2071051722},
+		{`"2035-08-18T06:38:42.777-0530"`, 2071051722},
+		{`"2021-08-25"`, 1629849600},
+		{`"2035-08-18T06:38:42.777"`, 2071031922},
+		{`"2025-01-17T08:17:23Z"`, 1737101843},
 	}
 	for _, tc := range testCases {
 		tc := tc // capture range variable
@@ -30,15 +34,13 @@ func TestSupportedSpecifiedTimeFormat(t *testing.T) {
 			if err != nil {
 				t.Fatalf("Expected json string `%s` to be unmarshalable, but encountered an error: %s", tc.time, err.Error())
 			}
-			u := tm.T.Unix()
-			var e int64 = 2071051722
-			if e != u {
-				t.Errorf("Expected unmarshaled json string `%s` to have Unix timestamp %d, but was %d", tc.time, e, u)
+			actual := tm.T.Unix()
+			if tc.expected != actual {
+				t.Errorf("Expected unmarshaled json string `%s` to have Unix timestamp %d, but was %d", tc.time, tc.expected, actual)
 			}
 		})
 	}
 }
-
 func TestSupportedSpecifiedTimeJsonFormat(t *testing.T) {
 	testCases := []struct {
 		timeString string
@@ -53,6 +55,7 @@ func TestSupportedSpecifiedTimeJsonFormat(t *testing.T) {
 		{`"2035-08-18T10:38:42.777-0130"`, infobip.Time{T: time.Unix(2071051722, 777000000).In(time.FixedZone("-1.5", -5400))}},
 		{`"2035-08-18T17:38:42.777+0530"`, infobip.Time{T: time.Unix(2071051722, 777000000).In(time.FixedZone("+5.5", 19800))}},
 		{`"2035-08-18T06:38:42.777-0530"`, infobip.Time{T: time.Unix(2071051722, 777000000).In(time.FixedZone("-5.5", -19800))}},
+		{`"2021-08-25T00:00:00.000+0000"`, infobip.Time{T: time.Date(2021, 8, 25, 0, 0, 0, 0, time.UTC)}},
 	}
 	for _, tc := range testCases {
 		tc := tc // capture range variable
diff --git a/tests/email_api_test.go b/tests/email_api_test.go
new file mode 100644
index 0000000..66c10fb
--- /dev/null
+++ b/tests/email_api_test.go
@@ -0,0 +1,1380 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"os"
+	"testing"
+	"time"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/email"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldSendFullyFeaturedEmail(t *testing.T) {
+	givenTo := "john.smith@somedomain.com"
+	givenAnotherTo := `{"to": "alice.grey@somecompany.com","placeholders": {"name": "Alice"}}`
+	anotherToInResponse := "alice.grey@somecompany.com"
+	givenBulkId := "snxemd8u52v7v84iiu69"
+	givenGroupId := int32(1)
+	givenGroupName := "PENDING"
+	givenId := int32(1)
+	givenName := "PENDING_ACCEPTED"
+	givenDescription := "Message accepted, pending for delivery."
+
+	givenAttachmentText := "Test file text"
+	tempFile, err := ioutil.TempFile("", "attachment*.txt")
+	assert.Nil(t, err)
+	defer os.Remove(tempFile.Name())
+	_, err = tempFile.WriteString(givenAttachmentText)
+	assert.Nil(t, err)
+
+	givenMessageId := "somExternalMessageId0"
+	givenAnotherMessageId := "someExternalMessageId1"
+
+	givenFrom := "Jane Smith <jane.smith@somecompany.com>"
+	givenReplyTo := "all.replies@somedomain.com"
+	givenSubject := "Mail subject text"
+	givenText := "Mail body text"
+	givenHtml := "<h1>Html body</h1><p>Rich HTML message body.</p>"
+	intermediateReport := true
+	givenNotifyUrl := "https://www.example.com/email/advanced"
+	givenNotifyContentType := "application/json"
+	givenCallbackData := "DLR callback data"
+
+	expectedResponse := fmt.Sprintf(`{
+		"bulkId": "%s",
+		"messages": [
+			{
+				"to": "%s",
+				"messageId": "%s",
+				"status": {
+					"groupId": %d,
+					"groupName": "%s",
+					"id": %d,
+					"name": "%s",
+					"description": "%s"
+				}
+			},
+			{
+				"to": "%s",
+				"messageId": "%s",
+				"status": {
+					"groupId": %d,
+					"groupName": "%s",
+					"id": %d,
+					"name": "%s",
+					"description": "%s"
+				}
+			}
+		]
+	}`, givenBulkId, givenTo, givenMessageId, givenGroupId, givenGroupName, givenId, givenName, givenDescription, anotherToInResponse, givenAnotherMessageId, givenGroupId, givenGroupName, givenId, givenName, givenDescription)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/email/3/send", expectedResponse, 200)
+
+	response, _, err := infobipClient.EmailAPI.SendEmail(context.Background()).
+		To([]string{givenTo, givenAnotherTo}).
+		From(givenFrom).
+		Subject(givenSubject).
+		ReplyTo(givenReplyTo).
+		Html(givenHtml).
+		Text(givenText).
+		Attachment([]*os.File{tempFile}).
+		IntermediateReport(intermediateReport).
+		NotifyUrl(givenNotifyUrl).
+		NotifyContentType(givenNotifyContentType).
+		CallbackData(givenCallbackData).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.NotNil(t, response.GetMessages())
+	messages := response.GetMessages()
+	assert.Equal(t, 2, len(messages))
+
+	expectedStatus := email.SingleMessageStatus{
+		GroupId:     &givenGroupId,
+		GroupName:   &givenGroupName,
+		Id:          &givenId,
+		Name:        &givenName,
+		Description: &givenDescription,
+	}
+
+	firstMessage := messages[0]
+	assert.Equal(t, givenTo, firstMessage.GetTo())
+	assert.Equal(t, givenMessageId, firstMessage.GetMessageId())
+	assert.Equal(t, expectedStatus, firstMessage.GetStatus())
+
+	secondMessage := messages[1]
+	assert.Equal(t, anotherToInResponse, secondMessage.GetTo())
+	assert.Equal(t, givenAnotherMessageId, secondMessage.GetMessageId())
+	assert.Equal(t, expectedStatus, secondMessage.GetStatus())
+}
+
+func TestShouldGetEmailSuppressions(t *testing.T) {
+	givenDomainName := "example.com"
+	givenEmailAddress := "jane.smith@somecompany.com"
+	givenType := email.APISUPPRESSIONTYPE_BOUNCE
+	givenCreatedDate := "2024-08-14T14:02:17.366"
+	givenCreatedDateTime, _ := time.Parse("2006-01-02T15:04:05.000", givenCreatedDate)
+	ibTimeCreatedAt := infobip.Time{
+		T: givenCreatedDateTime,
+	}
+	givenReason := "550 5.1.1 <jane.smith@somecompany.com>: user does not exist"
+	givenPage := 0
+	givenSize := 100
+
+	givenResponse := fmt.Sprintf(`{
+		"results": [
+			{
+				"domainName": "%s",
+				"emailAddress": "%s",
+				"type": "%s",
+				"createdDate": "%s",
+				"reason": "%s"
+			}
+		],
+		"paging": {
+			"page": %d,
+			"size": %d
+		}
+	}`, givenDomainName, givenEmailAddress, givenType, givenCreatedDate, givenReason, givenPage, givenSize)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/suppressions", givenResponse, 200)
+
+	// Execute the request
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetSuppressions(context.Background()).
+		DomainName(givenDomainName).
+		Type_(givenType).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response.GetResults()))
+
+	result := response.GetResults()[0]
+	assert.Equal(t, givenDomainName, result.GetDomainName())
+	assert.Equal(t, givenEmailAddress, result.GetEmailAddress())
+	assert.Equal(t, string(givenType), result.GetType())
+	assert.Equal(t, ibTimeCreatedAt, result.GetCreatedDate())
+	assert.Equal(t, givenReason, result.GetReason())
+
+	paging := response.GetPaging()
+	assert.Equal(t, int32(givenPage), paging.GetPage())
+	assert.Equal(t, int32(givenSize), paging.GetSize())
+}
+
+func TestShouldAddEmailSuppressions(t *testing.T) {
+	givenDomainName1 := "example.com"
+	givenEmailAddresses1 := []string{"jane.smith@somecompany.com", "john.doe@somecompany.com"}
+	givenType := email.APIADDSUPPRESSIONTYPE_BOUNCE
+
+	givenDomainName2 := "example.com"
+	givenEmailAddresses2 := []string{"john.smith@somecompany.com", "john.perry@gmail.com"}
+
+	givenRequest := fmt.Sprintf(`{
+        "suppressions": [
+            {
+                "domainName": "%s",
+                "emailAddress": ["%s", "%s"],
+                "type": "%s"
+            },
+            {
+                "domainName": "%s",
+                "emailAddress": ["%s", "%s"],
+                "type": "%s"
+            }
+        ]
+    }`, givenDomainName1, givenEmailAddresses1[0], givenEmailAddresses1[1], givenType, givenDomainName2, givenEmailAddresses2[0], givenEmailAddresses2[1], givenType)
+
+	request := email.NewAddSuppressionRequest([]email.AddSuppression{
+		*email.NewAddSuppression(givenDomainName1, givenEmailAddresses1, givenType),
+		*email.NewAddSuppression(givenDomainName2, givenEmailAddresses2, givenType),
+	})
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/email/1/suppressions", "", 204)
+
+	_, err := infobipClient.
+		EmailAPI.
+		AddSuppressions(context.Background()).
+		AddSuppressionRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldDeleteEmailSuppressions(t *testing.T) {
+	givenDomainName1 := "example.com"
+	givenEmailAddresses1 := []string{"jane.smith@somecompany.com", "john.doe@somecompany.com"}
+	givenType := email.APISUPPRESSIONTYPE_BOUNCE
+
+	givenDomainName2 := "example.com"
+	givenEmailAddresses2 := []string{"john.smith@somecompany.com", "john.perry@gmail.com"}
+
+	givenRequest := fmt.Sprintf(`{
+       "suppressions": [
+           {
+               "domainName": "%s",
+               "emailAddress": ["%s", "%s"],
+               "type": "%s"
+           },
+           {
+               "domainName": "%s",
+               "emailAddress": ["%s", "%s"],
+               "type": "%s"
+           }
+       ]
+   }`, givenDomainName1, givenEmailAddresses1[0], givenEmailAddresses1[1], givenType, givenDomainName2, givenEmailAddresses2[0], givenEmailAddresses2[1], givenType)
+
+	request := email.NewDeleteSuppressionRequest([]email.DeleteSuppression{
+		*email.NewDeleteSuppression(givenDomainName1, givenEmailAddresses1, givenType),
+		*email.NewDeleteSuppression(givenDomainName2, givenEmailAddresses2, givenType),
+	})
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", "/email/1/suppressions", "", 204)
+
+	_, err := infobipClient.
+		EmailAPI.
+		DeleteSuppressions(context.Background()).
+		DeleteSuppressionRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldGetSuppressionDomains(t *testing.T) {
+	givenDomainName1 := "example.com"
+	givenDataAccess1 := email.APIDOMAINACCESS_OWNER
+	givenReadBounces1 := true
+	givenCreateBounces1 := true
+	givenDeleteBounces1 := true
+	givenReadComplaints1 := true
+	givenCreateComplaints1 := true
+	givenDeleteComplaints1 := true
+	givenReadOverquotas1 := true
+
+	givenDomainName2 := "example.com"
+	givenDataAccess2 := email.APIDOMAINACCESS_GRANTED
+	givenReadBounces2 := true
+	givenCreateBounces2 := true
+	givenDeleteBounces2 := false
+	givenReadComplaints2 := true
+	givenCreateComplaints2 := false
+	givenDeleteComplaints2 := false
+	givenReadOverquotas2 := false
+
+	givenPage := 0
+	givenSize := 100
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "domainName": "%s",
+                "dataAccess": "%s",
+                "readBounces": %t,
+                "createBounces": %t,
+                "deleteBounces": %t,
+                "readComplaints": %t,
+                "createComplaints": %t,
+                "deleteComplaints": %t,
+                "readOverquotas": %t
+            },
+            {
+                "domainName": "%s",
+                "dataAccess": "%s",
+                "readBounces": %t,
+                "createBounces": %t,
+                "deleteBounces": %t,
+                "readComplaints": %t,
+                "createComplaints": %t,
+                "deleteComplaints": %t,
+                "readOverquotas": %t
+            }
+        ],
+        "paging": {
+            "page": %d,
+            "size": %d
+        }
+    }`, givenDomainName1, givenDataAccess1, givenReadBounces1, givenCreateBounces1, givenDeleteBounces1, givenReadComplaints1, givenCreateComplaints1, givenDeleteComplaints1, givenReadOverquotas1,
+		givenDomainName2, givenDataAccess2, givenReadBounces2, givenCreateBounces2, givenDeleteBounces2, givenReadComplaints2, givenCreateComplaints2, givenDeleteComplaints2, givenReadOverquotas2,
+		givenPage, givenSize)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/suppressions/domains", givenResponse, 200)
+
+	// Execute the request
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetDomains(context.Background()).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 2, len(response.GetResults()))
+
+	result1 := response.GetResults()[0]
+	assert.Equal(t, givenDomainName1, result1.GetDomainName())
+	assert.Equal(t, givenDataAccess1, result1.GetDataAccess())
+	assert.Equal(t, givenReadBounces1, result1.GetReadBounces())
+	assert.Equal(t, givenCreateBounces1, result1.GetCreateBounces())
+	assert.Equal(t, givenDeleteBounces1, result1.GetDeleteBounces())
+	assert.Equal(t, givenReadComplaints1, result1.GetReadComplaints())
+	assert.Equal(t, givenCreateComplaints1, result1.GetCreateComplaints())
+	assert.Equal(t, givenDeleteComplaints1, result1.GetDeleteComplaints())
+	assert.Equal(t, givenReadOverquotas1, result1.GetReadOverquotas())
+
+	result2 := response.GetResults()[1]
+	assert.Equal(t, givenDomainName2, result2.GetDomainName())
+	assert.Equal(t, givenDataAccess2, result2.GetDataAccess())
+	assert.Equal(t, givenReadBounces2, result2.GetReadBounces())
+	assert.Equal(t, givenCreateBounces2, result2.GetCreateBounces())
+	assert.Equal(t, givenDeleteBounces2, result2.GetDeleteBounces())
+	assert.Equal(t, givenReadComplaints2, result2.GetReadComplaints())
+	assert.Equal(t, givenCreateComplaints2, result2.GetCreateComplaints())
+	assert.Equal(t, givenDeleteComplaints2, result2.GetDeleteComplaints())
+	assert.Equal(t, givenReadOverquotas2, result2.GetReadOverquotas())
+
+	paging := response.GetPaging()
+	assert.Equal(t, int32(givenPage), paging.GetPage())
+	assert.Equal(t, int32(givenSize), paging.GetSize())
+}
+
+func TestShouldAddDomain(t *testing.T) {
+	givenDomainName := "example.com"
+	givenDkimKeyLength := int32(1024)
+	givenTargetedDailyTraffic := int64(15)
+	givenReturnPathAddress := "pathAddress"
+
+	givenDomainId := int64(1)
+	givenActive := false
+	givenTracking := true
+	givenDnsRecords := "string"
+	givenVerified := true
+	givenBlocked := false
+	givenCreatedAtString := "2021-08-25T16:00:00.000+0000"
+	givenCreatedAt, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAtString)
+	ibTimeCreatedAt := infobip.Time{
+		T: givenCreatedAt,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+	   "domainId": %d,
+	   "domainName": "%s",
+	   "active": %t,
+	   "tracking": {
+	       "clicks": %t,
+	       "opens": %t,
+	       "unsubscribe": %t
+	   },
+	   "dnsRecords": [
+	       {
+	           "recordType": "%s",
+	           "name": "%s",
+	           "expectedValue": "%s",
+	           "verified": %t
+	       }
+	   ],
+	   "blocked": %t,
+	   "createdAt": "%s",
+	   "returnPathAddress": "%s"
+	}`, givenDomainId, givenDomainName, givenActive, givenTracking, givenTracking, givenTracking, givenDnsRecords, givenDnsRecords, givenDnsRecords, givenVerified, givenBlocked, givenCreatedAtString, givenReturnPathAddress)
+
+	givenRequest := fmt.Sprintf(`{
+        "domainName": "%s",
+        "dkimKeyLength": %d,
+        "targetedDailyTraffic": %d,
+        "returnPathAddress": "%s"
+    }`, givenDomainName, givenDkimKeyLength, givenTargetedDailyTraffic, givenReturnPathAddress)
+
+	request := email.NewAddDomainRequest(givenDomainName, givenTargetedDailyTraffic)
+	request.ReturnPathAddress = &givenReturnPathAddress
+	dkimKeyLength := int32(1024)
+	request.DkimKeyLength = &dkimKeyLength
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/email/1/domains", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		AddDomain(context.Background()).
+		AddDomainRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, actualRequest)
+	assert.Equal(t, givenDomainId, response.GetDomainId())
+	assert.Equal(t, givenDomainName, response.GetDomainName())
+	assert.Equal(t, givenActive, response.GetActive())
+	assert.Equal(t, &givenTracking, response.GetTracking().Clicks)
+	assert.Equal(t, &givenTracking, response.GetTracking().Opens)
+	assert.Equal(t, &givenTracking, response.GetTracking().Unsubscribe)
+	assert.Equal(t, 1, len(response.GetDnsRecords()))
+	record := response.GetDnsRecords()[0]
+	assert.Equal(t, givenDnsRecords, record.GetRecordType())
+	assert.Equal(t, givenDnsRecords, record.GetName())
+	assert.Equal(t, givenDnsRecords, record.GetExpectedValue())
+	assert.Equal(t, givenVerified, record.GetVerified())
+	assert.Equal(t, givenBlocked, response.GetBlocked())
+	assert.Equal(t, ibTimeCreatedAt, response.GetCreatedAt())
+	assert.Equal(t, givenReturnPathAddress, response.GetReturnPathAddress())
+}
+
+func TestShouldGetAllDomains(t *testing.T) {
+	givenDomainName := "example.com"
+	givenPaging := int32(0)
+	givenDomainId := int64(1)
+	givenActive := false
+	givenTracking := true
+	givenDnsRecords := "string"
+	givenVerified := true
+	givenBlocked := false
+	givenCreatedAtString := "2021-08-25T16:00:00.000+0000"
+	givenCreatedAt, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAtString)
+	ibTimeCreatedAt := infobip.Time{
+		T: givenCreatedAt,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+       "paging": {
+           "page": %d,
+           "size": %d,
+           "totalPages": %d,
+           "totalResults": %d
+       },
+       "results": [
+           {
+               "domainId": %d,
+               "domainName": "%s",
+               "active": %t,
+               "tracking": {
+                   "clicks": %t,
+                   "opens": %t,
+                   "unsubscribe": %t
+               },
+               "dnsRecords": [
+                   {
+                       "recordType": "%s",
+                       "name": "%s",
+                       "expectedValue": "%s",
+                       "verified": %t
+                   }
+               ],
+               "blocked": %t,
+               "createdAt": "%s"
+           }
+       ]
+   }`, givenPaging, givenPaging, givenPaging, givenPaging, givenDomainId, givenDomainName, givenActive, givenTracking, givenTracking, givenTracking, givenDnsRecords, givenDnsRecords, givenDnsRecords, givenVerified, givenBlocked, givenCreatedAtString)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/domains", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetAllDomains(context.Background()).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, &givenPaging, response.GetPaging().Page)
+	assert.Equal(t, &givenPaging, response.GetPaging().Size)
+	assert.Equal(t, &givenPaging, response.GetPaging().TotalPages)
+	assert.Equal(t, &givenPaging, response.GetPaging().TotalResults)
+
+	assert.Equal(t, 1, len(response.GetResults()))
+	result := response.GetResults()[0]
+	assert.Equal(t, givenDomainId, result.GetDomainId())
+	assert.Equal(t, givenDomainName, result.GetDomainName())
+	assert.Equal(t, givenActive, result.GetActive())
+	assert.Equal(t, &givenTracking, result.GetTracking().Clicks)
+	assert.Equal(t, &givenTracking, result.GetTracking().Opens)
+	assert.Equal(t, &givenTracking, result.GetTracking().Unsubscribe)
+	assert.Equal(t, 1, len(result.GetDnsRecords()))
+	record := result.GetDnsRecords()[0]
+	assert.Equal(t, givenDnsRecords, record.GetRecordType())
+	assert.Equal(t, givenDnsRecords, record.GetName())
+	assert.Equal(t, givenDnsRecords, record.GetExpectedValue())
+	assert.Equal(t, givenVerified, record.GetVerified())
+	assert.Equal(t, givenBlocked, result.GetBlocked())
+	assert.Equal(t, ibTimeCreatedAt, result.GetCreatedAt())
+}
+
+func TestShouldGetDomainDetails(t *testing.T) {
+	givenDomainName := "example.com"
+	givenDomainId := int64(1)
+	givenActive := false
+	givenTracking := true
+	givenDnsRecords := "string"
+	givenVerified := true
+	givenBlocked := false
+	givenCreatedAtString := "2021-08-25T16:00:00.000+0000"
+	givenCreatedAt, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAtString)
+	ibTimeCreatedAt := infobip.Time{
+		T: givenCreatedAt,
+	}
+	givenResponse := fmt.Sprintf(`{
+        "domainId": %d,
+        "domainName": "%s",
+        "active": %t,
+        "tracking": {
+            "clicks": %t,
+            "opens": %t,
+            "unsubscribe": %t
+        },
+        "dnsRecords": [
+            {
+                "recordType": "%s",
+                "name": "%s",
+                "expectedValue": "%s",
+                "verified": %t
+            }
+        ],
+        "blocked": %t,
+        "createdAt": "%s"
+    }`, givenDomainId, givenDomainName, givenActive, givenTracking, givenTracking, givenTracking, givenDnsRecords, givenDnsRecords, givenDnsRecords, givenVerified, givenBlocked, givenCreatedAtString)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/email/1/domains/%s", givenDomainName), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetDomainDetails(context.Background(), givenDomainName).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenDomainId, response.GetDomainId())
+	assert.Equal(t, givenDomainName, response.GetDomainName())
+	assert.Equal(t, givenActive, response.GetActive())
+	assert.Equal(t, &givenTracking, response.GetTracking().Clicks)
+	assert.Equal(t, &givenTracking, response.GetTracking().Opens)
+	assert.Equal(t, &givenTracking, response.GetTracking().Unsubscribe)
+	assert.Equal(t, 1, len(response.GetDnsRecords()))
+	record := response.GetDnsRecords()[0]
+	assert.Equal(t, givenDnsRecords, record.GetRecordType())
+	assert.Equal(t, givenDnsRecords, record.GetName())
+	assert.Equal(t, givenDnsRecords, record.GetExpectedValue())
+	assert.Equal(t, givenVerified, record.GetVerified())
+	assert.Equal(t, givenBlocked, response.GetBlocked())
+	assert.Equal(t, ibTimeCreatedAt, response.GetCreatedAt())
+}
+
+func TestShouldDeleteDomain(t *testing.T) {
+	givenDomainName := "example.com"
+	givenStatusCode := 204
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/email/1/domains/%s", givenDomainName), "", givenStatusCode)
+
+	_, err := infobipClient.
+		EmailAPI.
+		DeleteDomain(context.Background(), givenDomainName).
+		Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldUpdateTrackingEvents(t *testing.T) {
+	givenDomainName := "example.com"
+	givenDomainId := int64(1)
+	givenActive := false
+	givenTracking := true
+	givenUnsubscribe := true
+	givenDnsRecords := "string"
+	givenVerified := true
+	givenBlocked := false
+	givenCreatedAtString := "2021-08-25T16:00:00.000+0000"
+	givenCreatedAt, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAtString)
+	ibTimeCreatedAt := infobip.Time{
+		T: givenCreatedAt,
+	}
+	givenResponse := fmt.Sprintf(`{
+       "domainId": %d,
+       "domainName": "%s",
+       "active": %t,
+       "tracking": {
+           "clicks": %t,
+           "opens": %t,
+           "unsubscribe": %t
+       },
+       "dnsRecords": [
+           {
+               "recordType": "%s",
+               "name": "%s",
+               "expectedValue": "%s",
+               "verified": %t
+           }
+       ],
+       "blocked": %t,
+       "createdAt": "%s"
+   }`, givenDomainId, givenDomainName, givenActive, givenTracking, givenTracking, givenUnsubscribe, givenDnsRecords, givenDnsRecords, givenDnsRecords, givenVerified, givenBlocked, givenCreatedAtString)
+
+	givenRequest := fmt.Sprintf(`{
+       "open": %t,
+       "clicks": %t,
+       "unsubscribe": %t
+   }`, givenTracking, givenTracking, givenUnsubscribe)
+
+	request := email.NewTrackingEventRequest()
+	request.SetOpen(givenTracking)
+	request.SetClicks(givenTracking)
+	request.SetUnsubscribe(givenUnsubscribe)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/email/1/domains/%s/tracking", givenDomainName), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		UpdateTrackingEvents(context.Background(), givenDomainName).
+		TrackingEventRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenDomainId, response.GetDomainId())
+	assert.Equal(t, givenDomainName, response.GetDomainName())
+	assert.Equal(t, givenActive, response.GetActive())
+	assert.Equal(t, &givenTracking, response.GetTracking().Clicks)
+	assert.Equal(t, &givenTracking, response.GetTracking().Opens)
+	assert.Equal(t, &givenTracking, response.GetTracking().Unsubscribe)
+	assert.Equal(t, 1, len(response.GetDnsRecords()))
+	record := response.GetDnsRecords()[0]
+	assert.Equal(t, givenDnsRecords, record.GetRecordType())
+	assert.Equal(t, givenDnsRecords, record.GetName())
+	assert.Equal(t, givenDnsRecords, record.GetExpectedValue())
+	assert.Equal(t, givenVerified, record.GetVerified())
+	assert.Equal(t, givenBlocked, response.GetBlocked())
+	assert.Equal(t, ibTimeCreatedAt, response.GetCreatedAt())
+}
+
+func TestShouldVerifyDomain(t *testing.T) {
+	givenDomainName := "example.com"
+	givenStatusCode := 202
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/email/1/domains/%s/verify", givenDomainName), "", givenStatusCode)
+
+	_, err := infobipClient.
+		EmailAPI.
+		VerifyDomain(context.Background(), givenDomainName).
+		Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldValidateEmail(t *testing.T) {
+	givenTo := "john.smith@abc.com"
+	givenValidSyntax := true
+	givenDidYouMean := ""
+
+	expectedRequest := fmt.Sprintf(`{
+        "to": "%s"
+    }`, givenTo)
+
+	givenResponse := fmt.Sprintf(`{
+        "to": "%s",
+        "validMailbox": "true",
+        "validSyntax": %t,
+        "catchAll": false,
+        "didYouMean": "%s",
+        "disposable": false,
+        "roleBased": true
+    }`, givenTo, givenValidSyntax, givenDidYouMean)
+
+	request := email.NewValidationRequest(givenTo)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/email/2/validation", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		ValidateEmailAddresses(context.Background()).
+		ValidationRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenTo, response.GetTo())
+	assert.Equal(t, givenValidSyntax, response.GetValidSyntax())
+	assert.Equal(t, givenDidYouMean, response.GetDidYouMean())
+}
+
+func TestShouldGetScheduledEmails(t *testing.T) {
+	givenBulkId := "BULK-ID-123-xyz"
+	givenExternalBulkId := "SOME_USER_DEFINE_BULK_123"
+	givenResponse := fmt.Sprintf(`{
+       "externalBulkId": "%s",
+       "bulks": [
+           {
+               "bulkId": "%s",
+               "sendAt": "2021-08-25T16:00:00.000+0000"
+           }
+       ]
+   }`, givenExternalBulkId, givenBulkId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/bulks", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetScheduledEmails(context.Background()).
+		BulkId(givenExternalBulkId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenExternalBulkId, response.GetExternalBulkId())
+	assert.Equal(t, 1, len(response.GetBulks()))
+	assert.Equal(t, givenBulkId, response.GetBulks()[0].GetBulkId())
+}
+
+func TestShouldGetScheduledEmailsStatuses(t *testing.T) {
+	givenBulkId := "BULK-ID-123-xyz"
+	givenExternalBulkId := "SOME_USER_DEFINE_BULK_123"
+	givenStatus := email.BULKSTATUS_PENDING
+	givenResponse := fmt.Sprintf(`{
+       "externalBulkId": "%s",
+       "bulks": [
+           {
+               "bulkId": "%s",
+               "status": "%s"
+           }
+       ]
+   }`, givenExternalBulkId, givenBulkId, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/bulks/status", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetScheduledEmailStatuses(context.Background()).
+		BulkId(givenExternalBulkId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenExternalBulkId, response.GetExternalBulkId())
+	assert.Equal(t, 1, len(response.GetBulks()))
+	assert.Equal(t, givenBulkId, response.GetBulks()[0].GetBulkId())
+	assert.Equal(t, givenStatus, response.GetBulks()[0].GetStatus())
+}
+
+func TestShouldRescheduleEmails(t *testing.T) {
+	givenBulkId := "BULK-ID-123-xyz"
+	givenSendAtString := "2021-06-08T17:42:05.390+0100"
+	givenSendAt, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSendAtString)
+	ibTimeGivenSendAt := infobip.Time{
+		T: givenSendAt,
+	}
+
+	givenRequest := fmt.Sprintf(`{
+        "sendAt": "%s"
+    }`, givenSendAtString)
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "sendAt": "%s"
+    }`, givenBulkId, givenSendAtString)
+
+	request := email.NewBulkRescheduleRequest(ibTimeGivenSendAt)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", "/email/1/bulks", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		RescheduleEmails(context.Background()).
+		BulkId(givenBulkId).
+		BulkRescheduleRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeGivenSendAt, response.GetSendAt())
+}
+
+func TestShouldUpdateScheduledEmailStatuses(t *testing.T) {
+	givenBulkId := "string"
+	givenStatus := email.BULKSTATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+       "bulkId": "%s",
+       "status": "%s"
+   }`, givenBulkId, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+       "status": "%s"
+   }`, givenStatus)
+
+	request := email.NewBulkUpdateStatusRequest(givenStatus)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", "/email/1/bulks/status", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		UpdateScheduledEmailStatuses(context.Background()).
+		BulkId(givenBulkId).
+		BulkUpdateStatusRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldGetEmailDeliveryReports(t *testing.T) {
+	givenSentAt := "2021-08-25T16:10:00.000+0500"
+	givenDoneAt := "2021-08-25T16:11:00.000+0500"
+	expectedSentAt, _ := time.Parse(time.RFC3339, "2021-08-25T16:10:00+05:00")
+	expectedDoneAt, _ := time.Parse(time.RFC3339, "2021-08-25T16:11:00+05:00")
+
+	ibTimeSentAt := infobip.Time{
+		T: expectedSentAt,
+	}
+
+	ibTimeDoneAt := infobip.Time{
+		T: expectedDoneAt,
+	}
+	givenBulkId := "csdstgteet4fath2pclbq"
+	givenMessageId := "45653761-3a88-4060-869e-ae372adc7a51"
+	givenTo := "john.doe@email.com"
+
+	expectedResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "bulkId": "%s",
+                "messageId": "%s",
+                "to": "%s",
+                "sentAt": "%s",
+                "doneAt": "%s",
+                "messageCount": 1,
+                "price": {
+                    "pricePerMessage": 0,
+                    "currency": "UNKNOWN"
+                },
+                "status": {
+                    "groupId": 3,
+                    "groupName": "DELIVERED",
+                    "id": 5,
+                    "name": "DELIVERED_TO_HANDSET",
+                    "description": "Message delivered to handset"
+                },
+                "error": {
+                    "groupId": 0,
+                    "groupName": "OK",
+                    "id": 0,
+                    "name": "NO_ERROR",
+                    "description": "No Error",
+                    "permanent": false
+                },
+                "channel": "EMAIL"
+            }
+        ]
+    }`, givenBulkId, givenMessageId, givenTo, givenSentAt, givenDoneAt)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/reports", expectedResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		GetEmailDeliveryReports(context.Background()).
+		BulkId(givenBulkId).
+		MessageId(givenMessageId).
+		Limit(1).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response.GetResults()))
+
+	report := response.GetResults()[0]
+	assert.Equal(t, givenBulkId, report.GetBulkId())
+	assert.Equal(t, givenMessageId, report.GetMessageId())
+	assert.Equal(t, givenTo, report.GetTo())
+	assert.Equal(t, ibTimeSentAt, report.GetSentAt())
+	assert.Equal(t, ibTimeDoneAt, report.GetDoneAt())
+
+	status := report.GetStatus()
+	assert.Equal(t, int32(3), status.GetGroupId())
+	assert.Equal(t, "DELIVERED", status.GetGroupName())
+	assert.Equal(t, int32(5), status.GetId())
+	assert.Equal(t, "DELIVERED_TO_HANDSET", status.GetName())
+	assert.Equal(t, "Message delivered to handset", status.GetDescription())
+
+	error := report.GetError()
+	assert.Equal(t, int32(0), error.GetGroupId())
+	assert.Equal(t, "OK", error.GetGroupName())
+	assert.Equal(t, int32(0), error.GetId())
+	assert.Equal(t, "NO_ERROR", error.GetName())
+	assert.Equal(t, "No Error", error.GetDescription())
+	assert.Equal(t, false, error.GetPermanent())
+}
+
+func TestShouldUpdateReturnPath(t *testing.T) {
+	givenDomainId := int64(1)
+	givenDomainName := "example.com"
+	givenActive := false
+	givenTracking := true
+	givenOpens := true
+	givenUnsubscribe := true
+	givenRecordType := "string"
+	givenName := "string"
+	givenExpectedValue := "string"
+	givenVerified := true
+	givenBlocked := false
+	givenCreatedAtString := "2021-08-25T16:00:00.000+0000"
+	givenCreatedAt, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAtString)
+	ibTimeCreatedAt := infobip.Time{
+		T: givenCreatedAt,
+	}
+	givenReturnPathAddress := "returnpath@example.com"
+
+	givenResponse := fmt.Sprintf(`{
+        "domainId": %d,
+        "domainName": "%s",
+        "active": %t,
+        "tracking": {
+            "clicks": %t,
+            "opens": %t,
+            "unsubscribe": %t
+        },
+        "dnsRecords": [
+            {
+                "recordType": "%s",
+                "name": "%s",
+                "expectedValue": "%s",
+                "verified": %t
+            }
+        ],
+        "blocked": %t,
+        "createdAt": "%s",
+        "returnPathAddress": "%s"
+    }`, givenDomainId, givenDomainName, givenActive, givenTracking, givenOpens, givenUnsubscribe, givenRecordType, givenName, givenExpectedValue, givenVerified, givenBlocked, givenCreatedAtString, givenReturnPathAddress)
+
+	expectedReturnPathAddress := "returnpath@example.com"
+	expectedRequest := fmt.Sprintf(`{
+        "returnPathAddress": "%s"
+    }`, expectedReturnPathAddress)
+
+	request := email.NewReturnPathAddressRequest(givenReturnPathAddress)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/email/1/domains/%s/return-path", givenDomainName), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		EmailAPI.
+		UpdateReturnPath(context.Background(), givenDomainName).
+		ReturnPathAddressRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenDomainId, response.GetDomainId())
+	assert.Equal(t, givenDomainName, response.GetDomainName())
+	assert.False(t, response.GetActive())
+	assert.NotNil(t, response.GetTracking())
+	assert.Equal(t, &givenTracking, response.GetTracking().Clicks)
+	assert.Equal(t, &givenOpens, response.GetTracking().Opens)
+	assert.Equal(t, &givenUnsubscribe, response.GetTracking().Unsubscribe)
+	assert.Equal(t, 1, len(response.GetDnsRecords()))
+	record := response.GetDnsRecords()[0]
+	assert.NotNil(t, record)
+	assert.Equal(t, givenRecordType, record.GetRecordType())
+	assert.Equal(t, givenName, record.GetName())
+	assert.Equal(t, givenExpectedValue, record.GetExpectedValue())
+	assert.True(t, record.GetVerified())
+	assert.False(t, response.GetBlocked())
+	assert.Equal(t, ibTimeCreatedAt, response.GetCreatedAt())
+	assert.Equal(t, givenReturnPathAddress, response.GetReturnPathAddress())
+}
+
+func TestShouldGetIpManagementIps(t *testing.T) {
+	givenId := "DB3F9D439088BF73F5560443C8054AC4"
+	givenIp := "198.51.100.0"
+
+	givenResponse := fmt.Sprintf(`[
+  {
+    "id": "%s",
+    "ip": "%s"
+  }
+ ]`, givenId, givenIp)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/ip-management/ips", givenResponse, 200)
+
+	response, _, err := infobipClient.EmailAPI.GetAllIps(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response))
+	assert.Equal(t, givenId, response[0].GetId())
+	assert.Equal(t, givenIp, response[0].GetIp())
+}
+
+func TestShouldGetIpManagementIp(t *testing.T) {
+	givenId := "DB3F9D439088BF73F5560443C8054AC4"
+	givenIp := "198.51.100.0"
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenPoolName := "IP pool name"
+
+	givenResponse := fmt.Sprintf(`{
+  "id": "%s",
+  "ip": "%s",
+  "pools": [
+    {
+      "id": "%s",
+      "name": "%s"
+    }
+  ]
+ }`, givenId, givenIp, givenPoolId, givenPoolName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/email/1/ip-management/ips/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.EmailAPI.GetIpDetails(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenIp, response.GetIp())
+	assert.Equal(t, 1, len(response.GetPools()))
+	assert.Equal(t, givenPoolId, response.GetPools()[0].GetId())
+	assert.Equal(t, givenPoolName, response.GetPools()[0].GetName())
+}
+
+func TestShouldGetIpManagementPools(t *testing.T) {
+	givenId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenName := "IP pool name"
+
+	givenResponse := fmt.Sprintf(`[
+  {
+    "id": "%s",
+    "name": "%s"
+  }
+ ]`, givenId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/email/1/ip-management/pools", givenResponse, 200)
+
+	response, _, err := infobipClient.EmailAPI.GetIpPools(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, 1, len(response))
+	assert.Equal(t, givenId, response[0].GetId())
+	assert.Equal(t, givenName, response[0].GetName())
+}
+
+func TestShouldCreateIpManagementPool(t *testing.T) {
+	givenId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenName := "IP pool name"
+
+	givenRequest := email.IpPoolCreateRequest{
+		Name: givenName,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+  "name": "%s"
+ }`, givenName)
+
+	givenResponse := fmt.Sprintf(`{
+  "id": "%s",
+  "name": "%s"
+ }`, givenId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/email/1/ip-management/pools", givenResponse, 201)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.EmailAPI.CreateIpPool(context.Background()).IpPoolCreateRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+}
+
+func TestShouldGetIpManagementPool(t *testing.T) {
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenPoolName := "IP pool name"
+	givenIpId := "DB3F9D439088BF73F5560443C8054AC4"
+	givenIp := "198.51.100.0"
+
+	givenResponse := fmt.Sprintf(`{
+  "id": "%s",
+  "name": "%s",
+  "ips": [
+    {
+      "id": "%s",
+      "ip": "%s"
+    }
+  ]
+ }`, givenPoolId, givenPoolName, givenIpId, givenIp)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/email/1/ip-management/pools/%s", givenPoolId), givenResponse, 200)
+
+	response, _, err := infobipClient.EmailAPI.GetIpPool(context.Background(), givenPoolId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenPoolId, response.GetId())
+	assert.Equal(t, givenPoolName, response.GetName())
+	assert.Equal(t, 1, len(response.GetIps()))
+	assert.Equal(t, givenIpId, response.GetIps()[0].GetId())
+	assert.Equal(t, givenIp, response.GetIps()[0].GetIp())
+}
+
+func TestShouldUpdateIpManagementPool(t *testing.T) {
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenName := "Updated IP pool name"
+
+	givenRequest := email.IpPoolCreateRequest{
+		Name: givenName,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+  "name": "%s"
+ }`, givenName)
+
+	givenResponse := fmt.Sprintf(`{
+  "id": "%s",
+  "name": "%s"
+ }`, givenPoolId, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/email/1/ip-management/pools/%s", givenPoolId), givenResponse, 200)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.EmailAPI.UpdateIpPool(context.Background(), givenPoolId).IpPoolCreateRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenPoolId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+}
+
+func TestShouldDeleteIpManagementPool(t *testing.T) {
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenStatusCode := 204
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/email/1/ip-management/pools/%s", givenPoolId), "", givenStatusCode)
+
+	_, err := infobipClient.EmailAPI.DeleteIpPool(context.Background(), givenPoolId).Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldAssignIpToPool(t *testing.T) {
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenIpId := "DB3F9D439088BF73F5560443C8054AC4"
+
+	givenRequest := email.IpPoolAssignIpRequest{
+		IpId: givenIpId,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+  "ipId": "%s"
+ }`, givenIpId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/email/1/ip-management/pools/%s/ips", givenPoolId), "", 204)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	_, err := infobipClient.EmailAPI.AssignIpToPool(context.Background(), givenPoolId).IpPoolAssignIpRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldRemoveIpFromPool(t *testing.T) {
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenIpId := "DB3F9D439088BF73F5560443C8054AC4"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/email/1/ip-management/pools/%s/ips/%s", givenPoolId, givenIpId), "", 204)
+
+	_, err := infobipClient.EmailAPI.RemoveIpFromPool(context.Background(), givenPoolId, givenIpId).Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldGetIpManagementDomain(t *testing.T) {
+	givenDomainId := int64(1)
+	givenDomainName := "domain.com"
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenPoolName := "IP pool name"
+	givenPriority := int32(0)
+	givenIpId := "DB3F9D439088BF73F5560443C8054AC4"
+	givenIp := "198.51.100.0"
+
+	givenResponse := fmt.Sprintf(`{
+  "id": %d,
+  "name": "%s",
+  "pools": [{
+    "id": "%s",
+    "name": "%s",
+    "priority": %d,
+    "ips": [
+      {
+        "id": "%s",
+        "ip": "%s"
+      }
+    ]
+  }]
+ }`, givenDomainId, givenDomainName, givenPoolId, givenPoolName, givenPriority, givenIpId, givenIp)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/email/1/ip-management/domains/%d", givenDomainId), givenResponse, 200)
+
+	response, _, err := infobipClient.EmailAPI.GetIpDomain(context.Background(), givenDomainId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenDomainId, response.GetId())
+	assert.Equal(t, givenDomainName, response.GetName())
+	actualPools := response.GetPools()[0]
+	assert.Equal(t, givenPoolId, actualPools.GetId())
+	assert.Equal(t, givenPoolName, actualPools.GetName())
+	assert.Equal(t, givenPriority, actualPools.GetPriority())
+	assert.Equal(t, 1, len(actualPools.GetIps()))
+	assert.Equal(t, givenIpId, actualPools.GetIps()[0].GetId())
+	assert.Equal(t, givenIp, actualPools.GetIps()[0].GetIp())
+}
+
+func TestShouldAssignPoolToDomain(t *testing.T) {
+	givenDomainId := int64(1)
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenPriority := int32(0)
+
+	givenRequest := email.DomainIpPoolAssignRequest{
+		PoolId:   givenPoolId,
+		Priority: givenPriority,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+  "poolId": "%s",
+  "priority": %d
+ }`, givenPoolId, givenPriority)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/email/1/ip-management/domains/%d/pools", givenDomainId), "", 204)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	_, err := infobipClient.EmailAPI.AssignPoolToDomain(context.Background(), givenDomainId).DomainIpPoolAssignRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldUpdatePoolPriorityInDomain(t *testing.T) {
+	givenDomainId := int64(1)
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenPriority := int32(0)
+
+	givenRequest := email.DomainIpPoolUpdateRequest{
+		Priority: givenPriority,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+  "priority": %d
+ }`, givenPriority)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/email/1/ip-management/domains/%d/pools/%s", givenDomainId, givenPoolId), "", 204)
+
+	actualRequest, _ := json.Marshal(givenRequest)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	_, err := infobipClient.EmailAPI.UpdateDomainPoolPriority(context.Background(), givenDomainId, givenPoolId).DomainIpPoolUpdateRequest(givenRequest).Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldRemovePoolFromDomain(t *testing.T) {
+	givenDomainId := int64(1)
+	givenPoolId := "08A3A7608750CC6E6080325A6ADF45B6"
+	givenStatusCode := 204
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/email/1/ip-management/domains/%d/pools/%s", givenDomainId, givenPoolId), "", givenStatusCode)
+
+	_, err := infobipClient.EmailAPI.RemoveIpPoolFromDomain(context.Background(), givenDomainId, givenPoolId).Execute()
+
+	assert.Nil(t, err)
+}
diff --git a/tests/flow_api_test.go b/tests/flow_api_test.go
new file mode 100644
index 0000000..85ed2b3
--- /dev/null
+++ b/tests/flow_api_test.go
@@ -0,0 +1,205 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"testing"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/moments"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldAddParticipantsToFlow(t *testing.T) {
+	campaignId := int64(200000000000001)
+	notifyUrl := "https://example.com"
+	callbackData := "Callback Data"
+
+	identifier1 := "370329180020364"
+	type1 := moments.FLOWPERSONUNIQUEFIELDTYPE_FACEBOOK
+
+	identifier2 := "test@infobip.com"
+	type2 := moments.FLOWPERSONUNIQUEFIELDTYPE_EMAIL
+	orderNumber2 := 1167873391
+
+	identifier3 := "test2@infobip.com"
+	type3 := moments.FLOWPERSONUNIQUEFIELDTYPE_FACEBOOK
+	orderNumber3 := 1595299041
+	externalId3 := "optional_external_person_id"
+	contractExpiry3 := "2023-04-01"
+	company3 := "Infobip"
+	email3 := "test@infobip.com"
+
+	givenRequest := fmt.Sprintf(`{
+        "participants": [
+            {
+                "identifyBy": {
+                    "identifier": "%s",
+                    "type": "%s"
+                }
+            },
+            {
+                "identifyBy": {
+                    "identifier": "%s",
+                    "type": "%s"
+                },
+                "variables": {
+                    "orderNumber": %d
+                }
+            },
+            {
+                "identifyBy": {
+                    "identifier": "%s",
+                    "type": "%s"
+                },
+                "variables": {
+                    "orderNumber": %d
+                },
+                "person": {
+                    "externalId": "%s",
+                    "customAttributes": {
+                        "Contract Expiry": "%s",
+                        "Company": "%s"
+                    },
+                    "contactInformation": {
+                        "email": [
+                            {
+                                "address": "%s"
+                            }
+                        ]
+                    }
+                }
+            }
+        ],
+        "notifyUrl": "%s",
+        "callbackData": "%s"
+    }`, identifier1, type1, identifier2, type2, orderNumber2, identifier3, type3, orderNumber3, externalId3, contractExpiry3, company3, email3, notifyUrl, callbackData)
+
+	participant1UniqueField := *moments.NewFlowPersonUniqueField(identifier1, moments.FLOWPERSONUNIQUEFIELDTYPE_FACEBOOK)
+	participant1 := moments.NewFlowParticipant(participant1UniqueField)
+
+	participant2UniqueField := *moments.NewFlowPersonUniqueField(identifier2, moments.FLOWPERSONUNIQUEFIELDTYPE_EMAIL)
+	participant2 := moments.NewFlowParticipant(participant2UniqueField)
+	participant2.SetVariables(map[string]interface{}{"orderNumber": orderNumber2})
+
+	participant3UniqueField := *moments.NewFlowPersonUniqueField(identifier3, moments.FLOWPERSONUNIQUEFIELDTYPE_FACEBOOK)
+	participant3 := moments.NewFlowParticipant(participant3UniqueField)
+	participant3.SetVariables(map[string]interface{}{"orderNumber": orderNumber3})
+	person := moments.NewFlowPerson()
+	person.SetExternalId(externalId3)
+	person.SetCustomAttributes(map[string]interface{}{"Contract Expiry": contractExpiry3, "Company": company3})
+	contactInfo := moments.NewFlowPersonContacts()
+	contactInfo.SetEmail([]moments.FlowEmailContact{{Address: &email3}})
+	person.SetContactInformation(*contactInfo)
+	participant3.SetPerson(*person)
+
+	request := moments.NewFlowAddFlowParticipantsRequest([]moments.FlowParticipant{*participant1, *participant2, *participant3})
+	request.SetNotifyUrl(notifyUrl)
+	request.SetCallbackData(callbackData)
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	givenOperationId := "03f2d474-0508-46bf-9f3d-d8e2c28adaea"
+
+	givenResponse := fmt.Sprintf(`{
+        "operationId": "%s"
+    }`, givenOperationId)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/moments/1/flows/%d/participants", campaignId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		FlowAPI.
+		AddFlowParticipants(context.Background(), campaignId).
+		FlowAddFlowParticipantsRequest(*request).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenOperationId, response.GetOperationId())
+}
+
+func TestShouldGetParticipantsReport(t *testing.T) {
+	campaignId := int64(200000000000001)
+	givenOperationId := "03f2d474-0508-46bf-9f3d-d8e2c28adaea"
+	givenCallbackData := "Callback Data"
+	givenIdentifier1 := "test@infobip.com"
+	givenIdentifier2 := "test2@infobip.com"
+	givenType := moments.FLOWPERSONUNIQUEFIELDTYPE_EMAIL
+	givenStatus1 := moments.FLOWADDFLOWPARTICIPANTSTATUS_ACCEPTED
+	givenStatus2 := moments.FLOWADDFLOWPARTICIPANTSTATUS_REJECTED
+	givenErrorReason := moments.FLOWERRORSTATUSREASON_INVALID_CONTACT
+
+	givenResponse := fmt.Sprintf(`{
+        "operationId": "%s",
+        "campaignId": %d,
+        "callbackData": "%s",
+        "participants": [
+            {
+                "identifyBy": {
+                    "identifier": "%s",
+                    "type": "%s"
+                },
+                "status": "%s"
+            },
+            {
+                "identifyBy": {
+                    "identifier": "%s",
+                    "type": "%s"
+                },
+                "status": "%s",
+                "errorReason": "%s"
+            }
+        ]
+    }`, givenOperationId, campaignId, givenCallbackData, givenIdentifier1, givenType, givenStatus1, givenIdentifier2, givenType, givenStatus2, givenErrorReason)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/moments/1/flows/%d/participants/report", campaignId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		FlowAPI.
+		GetFlowParticipantsAddedReport(context.Background(), campaignId).
+		OperationId(givenOperationId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenOperationId, response.GetOperationId())
+	assert.Equal(t, campaignId, response.GetCampaignId())
+	assert.Equal(t, givenCallbackData, response.GetCallbackData())
+
+	participants := response.GetParticipants()
+	assert.Len(t, participants, 2)
+
+	participant1 := participants[0]
+	assert.Equal(t, givenIdentifier1, participant1.GetIdentifyBy().Identifier)
+	assert.Equal(t, givenType, participant1.GetIdentifyBy().Type)
+	assert.Equal(t, givenStatus1, participant1.GetStatus())
+
+	participant2 := participants[1]
+	assert.Equal(t, givenIdentifier2, participant2.GetIdentifyBy().Identifier)
+	assert.Equal(t, givenType, participant2.GetIdentifyBy().Type)
+	assert.Equal(t, givenStatus2, participant2.GetStatus())
+	assert.Equal(t, givenErrorReason, participant2.GetErrorReason())
+}
+
+func TestShouldRemoveParticipantFromFlow(t *testing.T) {
+	campaignId := int64(200000000000001)
+
+	expectedResponse := "{}"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/communication/1/flows/%d/participants", campaignId), expectedResponse, 200)
+
+	_, err := infobipClient.
+		FlowAPI.
+		RemovePeopleFromFlow(context.Background(), campaignId).
+		Execute()
+
+	assert.Nil(t, err)
+}
diff --git a/tests/forms_api_test.go b/tests/forms_api_test.go
new file mode 100644
index 0000000..2b960e7
--- /dev/null
+++ b/tests/forms_api_test.go
@@ -0,0 +1,252 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/moments"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldGetAllForms(t *testing.T) {
+	givenFormId1 := "f23f0f7c-9898-4feb-8f21-5afe2c29db7e"
+	givenFormName1 := "Test form"
+	givenOffset := int32(0)
+	givenLimit := int32(25)
+	givenTotal := int64(1)
+	givenResubmitEnabled := true
+	givenFormType := moments.FORMSTYPE_OPT_IN
+	givenFormStatus := moments.FORMSSTATUS_ACTIVE
+	givenCreatedAt := "2015-02-22T17:42:05.390+0100"
+	givenCreatedAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAt)
+	ibTimeGivenCreatedAt := infobip.Time{
+		T: givenCreatedAtDateTime,
+	}
+
+	givenUpdatedAt := "2015-02-22T17:42:05.390+0100"
+	givenUpdatedAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAt)
+	ibTimeGivenUpdatedAt := infobip.Time{
+		T: givenUpdatedAtDateTime,
+	}
+
+	givenComponent := moments.FORMSCOMPONENTTYPE_TEXT
+	givenFieldId := "last_name"
+	givenPersonField := ""
+	givenLabel := ""
+	givenIsHidden := true
+	givenIsRequired := true
+	givenPlaceholder := ""
+
+	givenResponse := fmt.Sprintf(`{
+        "forms": [
+            {
+                "id": "%s",
+                "name": "%s",
+                "elements": [
+                    {
+                        "component": "%s",
+                        "fieldId": "%s",
+                        "personField": "%s",
+                        "label": "%s",
+                        "isRequired": %t,
+                        "isHidden": %t,
+                        "placeholder": "%s"
+                    }
+                ],
+                "createdAt": "%s",
+                "updatedAt": "%s",
+                "resubmitEnabled": %t,
+                "formType": "%s",
+                "formStatus": "%s"
+            }
+        ],
+        "offset": %d,
+        "limit": %d,
+        "total": %d
+    }`, givenFormId1, givenFormName1, givenComponent, givenFieldId, givenPersonField, givenLabel, givenIsRequired, givenIsHidden, givenPlaceholder, givenCreatedAt, givenUpdatedAt, givenResubmitEnabled, givenFormType, givenFormStatus, givenOffset, givenLimit, givenTotal)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/forms/1/forms", givenResponse, 200)
+
+	response, _, err := infobipClient.
+		FormsAPI.
+		GetForms(context.Background()).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenOffset, response.GetOffset())
+	assert.Equal(t, givenLimit, response.GetLimit())
+	assert.Equal(t, givenTotal, response.GetTotal())
+
+	forms := response.GetForms()
+	assert.Len(t, forms, 1)
+
+	form := forms[0]
+	assert.Equal(t, givenFormId1, form.GetId())
+	assert.Equal(t, givenFormName1, form.GetName())
+	assert.Equal(t, ibTimeGivenCreatedAt, form.GetCreatedAt())
+	assert.Equal(t, ibTimeGivenUpdatedAt, form.GetUpdatedAt())
+	assert.Equal(t, givenResubmitEnabled, form.GetResubmitEnabled())
+	assert.Equal(t, givenFormType, form.GetFormType())
+	assert.Equal(t, givenFormStatus, form.GetFormStatus())
+
+	elements := form.GetElements()
+	assert.Len(t, elements, 1)
+
+	element := elements[0]
+	assert.Equal(t, givenComponent, element.GetComponent())
+	assert.Equal(t, givenFieldId, element.GetFieldId())
+	assert.Equal(t, givenPersonField, element.GetPersonField())
+	assert.Equal(t, givenLabel, element.GetLabel())
+	assert.Equal(t, givenIsRequired, element.GetIsRequired())
+	assert.Equal(t, givenIsHidden, element.GetIsHidden())
+	assert.Equal(t, givenPlaceholder, element.GetPlaceholder())
+}
+
+func TestShouldGetFormById(t *testing.T) {
+	givenFormId := "f23f0f7c-9898-4feb-8f21-5afe2c29db7e"
+	givenFormName := "Test form"
+	givenResubmitEnabled := true
+	givenFormType := moments.FORMSTYPE_OPT_IN
+	givenFormStatus := moments.FORMSSTATUS_ACTIVE
+
+	givenCreatedAt := "2015-02-22T17:42:05.390+0100"
+	givenCreatedAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAt)
+	ibTimeGivenCreatedAt := infobip.Time{
+		T: givenCreatedAtDateTime,
+	}
+
+	givenUpdatedAt := "2015-02-22T17:42:05.390+0100"
+	givenUpdatedAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreatedAt)
+	ibTimeGivenUpdatedAt := infobip.Time{
+		T: givenUpdatedAtDateTime,
+	}
+
+	givenComponent := moments.FORMSCOMPONENTTYPE_TEXT
+	givenFieldId := "last_name"
+	givenPersonField := ""
+	givenLabel := ""
+	givenIsHidden := true
+	givenIsRequired := true
+	givenPlaceholder := ""
+
+	givenResponse := fmt.Sprintf(`{
+        "id": "%s",
+        "name": "%s",
+        "elements": [
+            {
+                "component": "%s",
+                "fieldId": "%s",
+                "personField": "%s",
+                "label": "%s",
+                "isRequired": %t,
+                "isHidden": %t,
+                "placeholder": "%s"
+            }
+        ],
+        "createdAt": "%s",
+        "updatedAt": "%s",
+        "resubmitEnabled": %t,
+        "formType": "%s",
+        "formStatus": "%s"
+    }`, givenFormId, givenFormName, givenComponent, givenFieldId, givenPersonField, givenLabel, givenIsRequired, givenIsHidden, givenPlaceholder, givenCreatedAt, givenUpdatedAt, givenResubmitEnabled, givenFormType, givenFormStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/forms/1/forms/%s", givenFormId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		FormsAPI.
+		GetForm(context.Background(), givenFormId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenFormId, response.GetId())
+	assert.Equal(t, givenFormName, response.GetName())
+	assert.Equal(t, ibTimeGivenCreatedAt, response.GetCreatedAt())
+	assert.Equal(t, ibTimeGivenUpdatedAt, response.GetUpdatedAt())
+	assert.Equal(t, givenResubmitEnabled, response.GetResubmitEnabled())
+	assert.Equal(t, givenFormType, response.GetFormType())
+	assert.Equal(t, givenFormStatus, response.GetFormStatus())
+
+	elements := response.GetElements()
+	assert.Len(t, elements, 1)
+
+	element := elements[0]
+	assert.Equal(t, givenComponent, element.GetComponent())
+	assert.Equal(t, givenFieldId, element.GetFieldId())
+	assert.Equal(t, givenPersonField, element.GetPersonField())
+	assert.Equal(t, givenLabel, element.GetLabel())
+	assert.Equal(t, givenIsRequired, element.GetIsRequired())
+	assert.Equal(t, givenIsHidden, element.GetIsHidden())
+	assert.Equal(t, givenPlaceholder, element.GetPlaceholder())
+}
+
+func TestShouldIncrementFormViewCount(t *testing.T) {
+	formId := "12345"
+	givenStatus := "OK"
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/forms/1/forms/%s/views", formId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		FormsAPI.
+		IncrementViewCount(context.Background(), formId).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldSubmitFormData(t *testing.T) {
+	formId := "12345"
+	givenStatus := "OK"
+
+	givenResponse := fmt.Sprintf(`{
+        "status": "%s"
+    }`, givenStatus)
+
+	givenNumber := 26
+	givenBoolean := true
+
+	requestBody := fmt.Sprintf(`{
+        "number": %d,
+        "boolean": %t
+    }`, givenNumber, givenBoolean)
+
+	formDataRequest := map[string]interface{}{
+		"number":  givenNumber,
+		"boolean": givenBoolean,
+	}
+
+	actualRequest, _ := json.Marshal(formDataRequest)
+	ValidateExpectedRequestBodiesMatches(t, requestBody, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", fmt.Sprintf("/forms/1/forms/%s/data", formId), givenResponse, 200)
+
+	response, _, err := infobipClient.
+		FormsAPI.
+		SubmitFormData(context.Background(), formId).
+		Body(formDataRequest).
+		Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
diff --git a/tests/number_masking_api_test.go b/tests/number_masking_api_test.go
new file mode 100644
index 0000000..c0208f0
--- /dev/null
+++ b/tests/number_masking_api_test.go
@@ -0,0 +1,303 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldGetVoiceMaskingConfig(t *testing.T) {
+	givenKey := "string"
+	givenName := "string"
+	givenCallbackUrl := "string"
+	givenStatusUrl := "string"
+	givenBackupCallbackUrl := "string"
+	givenBackupStatusUrl := "string"
+	givenDescription := "string"
+	givenInsertDateTime := "2015-02-22T17:42:05.390+0100"
+	givenInsertDateTimeOffset, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenInsertDateTime)
+	ibTimeGivenInsertDateTime := infobip.Time{
+		T: givenInsertDateTimeOffset,
+	}
+
+	givenUpdateDateTime := "2015-02-22T17:42:05.390+0100"
+	givenUpdateDateTimeOffset, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenInsertDateTime)
+	ibTimeGivenUpdateDateTime := infobip.Time{
+		T: givenUpdateDateTimeOffset,
+	}
+
+	givenResponse := fmt.Sprintf(`[
+        {
+            "key": "%s",
+            "name": "%s",
+            "callbackUrl": "%s",
+            "statusUrl": "%s",
+            "backupCallbackUrl": "%s",
+            "backupStatusUrl": "%s",
+            "description": "%s",
+            "insertDateTime": "%s",
+            "updateDateTime": "%s"
+        }
+    ]`, givenKey, givenName, givenCallbackUrl, givenStatusUrl, givenBackupCallbackUrl, givenBackupStatusUrl, givenDescription, givenInsertDateTime, givenUpdateDateTime)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/voice/masking/2/config", givenResponse, 200)
+
+	response, _, err := infobipClient.NumberMaskingAPI.GetNumberMaskingConfigurations(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Len(t, response, 1)
+
+	config := response[0]
+	assert.Equal(t, givenKey, config.GetKey())
+	assert.Equal(t, givenName, config.GetName())
+	assert.Equal(t, givenCallbackUrl, config.GetCallbackUrl())
+	assert.Equal(t, givenStatusUrl, config.GetStatusUrl())
+	assert.Equal(t, givenBackupCallbackUrl, config.GetBackupCallbackUrl())
+	assert.Equal(t, givenBackupStatusUrl, config.GetBackupStatusUrl())
+	assert.Equal(t, givenDescription, config.GetDescription())
+	assert.Equal(t, ibTimeGivenInsertDateTime, config.GetInsertDateTime())
+	assert.Equal(t, ibTimeGivenUpdateDateTime, config.GetUpdateDateTime())
+}
+
+func TestShouldCreateNumberMaskingConfiguration(t *testing.T) {
+	givenKey := "3FC0C9CB4AFAEAC67E8FC6BA3B1E044A"
+	givenName := "UniqueConfigurationName"
+	givenCallbackUrl := "http://xyz.com/1/callback"
+	givenStatusUrl := "http://xyz.com/1/status"
+	givenInsertDateTime := "2015-02-22T17:42:05.390+0100"
+	givenInsertDateTimeOffset, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenInsertDateTime)
+	ibTimeGivenInsertDateTime := infobip.Time{
+		T: givenInsertDateTimeOffset,
+	}
+
+	givenUpdateDateTime := "2015-02-22T17:42:05.390+0100"
+	givenUpdateDateTimeOffset, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenInsertDateTime)
+	ibTimeGivenUpdateDateTime := infobip.Time{
+		T: givenUpdateDateTimeOffset,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+        "name": "%s",
+        "callbackUrl": "%s",
+        "statusUrl": "%s"
+    }`, givenName, givenCallbackUrl, givenStatusUrl)
+
+	givenResponse := fmt.Sprintf(`{
+        "key": "%s",
+        "name": "%s",
+        "callbackUrl": "%s",
+        "statusUrl": "%s",
+        "insertDateTime": "%s",
+        "updateDateTime": "%s"
+    }`, givenKey, givenName, givenCallbackUrl, givenStatusUrl, givenInsertDateTime, givenUpdateDateTime)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/voice/masking/2/config", givenResponse, 200)
+
+	request := voice.NumberMaskingSetupBody{
+		Name:        givenName,
+		CallbackUrl: givenCallbackUrl,
+		StatusUrl:   &givenStatusUrl,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.NumberMaskingAPI.CreateNumberMaskingConfiguration(context.Background()).NumberMaskingSetupBody(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenKey, response.GetKey())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenCallbackUrl, response.GetCallbackUrl())
+	assert.Equal(t, givenStatusUrl, response.GetStatusUrl())
+	assert.Equal(t, ibTimeGivenInsertDateTime, response.GetInsertDateTime())
+	assert.Equal(t, ibTimeGivenUpdateDateTime, response.GetUpdateDateTime())
+}
+
+func TestShouldUpdateNumberMaskingConfiguration(t *testing.T) {
+	givenKey := "3FC0C9CB4AFAEAC67E8FC6BA3B1E044A"
+	givenName := "UniqueConfigurationName"
+	givenCallbackUrl := "http://example.com/1/callback"
+	givenStatusUrl := "http://example.com/1/status"
+	givenInsertDateTime := "2015-02-22T17:42:05.390+0100"
+	givenInsertDateTimeOffset, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenInsertDateTime)
+	ibTimeGivenInsertDateTime := infobip.Time{
+		T: givenInsertDateTimeOffset,
+	}
+
+	givenUpdateDateTime := "2015-02-22T17:42:05.390+0100"
+	givenUpdateDateTimeOffset, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenInsertDateTime)
+	ibTimeGivenUpdateDateTime := infobip.Time{
+		T: givenUpdateDateTimeOffset,
+	}
+
+	expectedRequest := fmt.Sprintf(`{
+        "name": "%s",
+        "callbackUrl": "%s",
+        "statusUrl": "%s"
+    }`, givenName, givenCallbackUrl, givenStatusUrl)
+
+	givenResponse := fmt.Sprintf(`{
+        "key": "%s",
+        "name": "%s",
+        "callbackUrl": "%s",
+        "statusUrl": "%s",
+        "insertDateTime": "%s",
+        "updateDateTime": "%s"
+    }`, givenKey, givenName, givenCallbackUrl, givenStatusUrl, givenInsertDateTime, givenUpdateDateTime)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/voice/masking/2/config/%s", givenKey), givenResponse, 200)
+
+	request := voice.NumberMaskingSetupBody{
+		Name:        givenName,
+		CallbackUrl: givenCallbackUrl,
+		StatusUrl:   &givenStatusUrl,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.NumberMaskingAPI.UpdateNumberMaskingConfiguration(context.Background(), givenKey).NumberMaskingSetupBody(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenKey, response.GetKey())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenCallbackUrl, response.GetCallbackUrl())
+	assert.Equal(t, givenStatusUrl, response.GetStatusUrl())
+	assert.Equal(t, ibTimeGivenInsertDateTime, response.GetInsertDateTime())
+	assert.Equal(t, ibTimeGivenUpdateDateTime, response.GetUpdateDateTime())
+}
+
+func TestShouldUploadAudioFile(t *testing.T) {
+	givenUrl := "http://www.example.com/audio.wav"
+	givenFileId := "cb702ae4-f356-4efd-b2dd-7a667b570af5"
+
+	expectedRequest := fmt.Sprintf(`{
+        "url": "%s"
+    }`, givenUrl)
+
+	givenResponse := fmt.Sprintf(`{
+        "fileId": "%s"
+    }`, givenFileId)
+
+	request := voice.NumberMaskingUploadBody{
+		Url: &givenUrl,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/voice/masking/1/upload", givenResponse, 200)
+
+	response, _, err := infobipClient.NumberMaskingAPI.UploadAudioFiles(context.Background()).NumberMaskingUploadBody(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenFileId, response.GetFileId())
+}
+
+func TestShouldGetNumberMaskingCredentials(t *testing.T) {
+	givenApiId := "55ddccad2df62a4b615b7e3c472b2ab6"
+	givenKey := "5da086b6a8e4424993646b8699c333ca"
+
+	givenResponse := fmt.Sprintf(`{
+        "apiId": "%s",
+        "key": "%s"
+    }`, givenApiId, givenKey)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/voice/masking/2/credentials", givenResponse, 200)
+
+	response, _, err := infobipClient.NumberMaskingAPI.GetNumberMaskingCredentials(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenApiId, response.GetApiId())
+	assert.Equal(t, givenKey, response.GetKey())
+}
+
+func TestShouldCreateNumberMaskingCredentials(t *testing.T) {
+	givenApiId := "55ddccad2df62a4b615b7e3c472b2ab6"
+	givenKey := "5da086b6a8e4424993646b8699c333ca"
+
+	expectedRequest := fmt.Sprintf(`{
+        "apiId": "%s",
+        "key": "%s"
+    }`, givenApiId, givenKey)
+
+	givenResponse := fmt.Sprintf(`{
+        "apiId": "%s",
+        "key": "%s"
+    }`, givenApiId, givenKey)
+
+	request := voice.NumberMaskingCredentialsBody{
+		ApiId: givenApiId,
+		Key:   givenKey,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/voice/masking/2/credentials", givenResponse, 200)
+
+	response, _, err := infobipClient.NumberMaskingAPI.CreateNumberMaskingCredentials(context.Background()).NumberMaskingCredentialsBody(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenApiId, response.GetApiId())
+	assert.Equal(t, givenKey, response.GetKey())
+}
+
+func TestShouldUpdateNumberMaskingCredentials(t *testing.T) {
+	givenApiId := "55ddccad2df62a4b615b7e3c472b2ab6"
+	givenKey := "5da086b6a8e4424993646b8699c333ca"
+
+	expectedRequest := fmt.Sprintf(`{
+        "apiId": "%s",
+        "key": "%s"
+    }`, givenApiId, givenKey)
+
+	givenResponse := fmt.Sprintf(`{
+        "apiId": "%s",
+        "key": "%s"
+    }`, givenApiId, givenKey)
+
+	request := voice.NumberMaskingCredentialsBody{
+		ApiId: givenApiId,
+		Key:   givenKey,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", "/voice/masking/2/credentials", givenResponse, 200)
+
+	response, _, err := infobipClient.NumberMaskingAPI.UpdateNumberMaskingCredentials(context.Background()).NumberMaskingCredentialsBody(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenApiId, response.GetApiId())
+	assert.Equal(t, givenKey, response.GetKey())
+}
diff --git a/tests/sms_api_test.go b/tests/sms_api_test.go
index b77e80f..2ec88fa 100644
--- a/tests/sms_api_test.go
+++ b/tests/sms_api_test.go
@@ -115,7 +115,7 @@ func TestSendSms(t *testing.T) {
 		{To: givenDestination},
 	}
 
-	content := sms.LogContent{
+	content := sms.MessageContent{
 		TextMessageContent: sms.NewTextMessageContent(givenText),
 	}
 
@@ -234,7 +234,7 @@ func TestShouldSendFlashSms(t *testing.T) {
 		{To: givenDestination},
 	}
 
-	content := sms.LogContent{
+	content := sms.MessageContent{
 		TextMessageContent: sms.NewTextMessageContent(givenText),
 	}
 
@@ -308,7 +308,7 @@ func TestSendFullyFeaturedSmsMessage(t *testing.T) {
 	givenFrom := "Info"
 	givenIntermediateReport := true
 	givenLanguageCode := sms.LANGUAGECODE_AUTODETECT
-	smsLanguageCode := sms.LanguageV3{
+	smsLanguageCode := sms.Language{
 		LanguageCode: &givenLanguageCode,
 	}
 	givenTransliterationCode := sms.TRANSLITERATIONCODE_CENTRAL_EUROPEAN
@@ -500,11 +500,11 @@ func TestSendFullyFeaturedSmsMessage(t *testing.T) {
 		CallbackData: &givenCallbackData,
 	}
 
-	firstContentLog := sms.LogContent{
+	firstContentLog := sms.MessageContent{
 		TextMessageContent: &firstContent,
 	}
 
-	secondContentLog := sms.LogContent{
+	secondContentLog := sms.MessageContent{
 		TextMessageContent: &secondContent,
 	}
 
@@ -683,7 +683,7 @@ func TestSendBinarySmsMessage(t *testing.T) {
 		EsmClass:   &givenEsmClass,
 	}
 
-	contentLog := sms.LogContent{
+	contentLog := sms.MessageContent{
 		BinaryContent: &content,
 	}
 
@@ -842,7 +842,7 @@ func TestSendFlashBinarySms(t *testing.T) {
 	message := sms.Message{
 		Destinations: destinations,
 		Sender:       &givenFrom,
-		Content: sms.LogContent{
+		Content: sms.MessageContent{
 			BinaryContent: &content,
 		},
 		Options: &options,
@@ -1131,6 +1131,10 @@ func TestShouldGetSmsLogs(t *testing.T) {
 	// Given values
 	givenBulkId := "BULK-ID-123-xyz"
 	givenSentSinceString := "2015-02-22T17:42:05.390+0100"
+	givenSentSince, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSentSinceString)
+	ibTimeGivenSentAt := infobip.Time{
+		T: givenSentSince,
+	}
 
 	givenMessageIdMessage1 := "MESSAGE-ID-123-xyz"
 	givenToMessage1 := "41793026727"
@@ -1230,7 +1234,7 @@ func TestShouldGetSmsLogs(t *testing.T) {
 	smsAPI := infobipClient.SmsAPI
 	smsLogsResponse, _, err := smsAPI.GetOutboundSmsMessageLogs(context.Background()).
 		BulkId([]string{givenBulkId}).
-		SentSince(givenSentSinceString).
+		SentSince(ibTimeGivenSentAt).
 		Execute()
 
 	if err != nil {
diff --git a/tests/voice_api_test.go b/tests/voice_api_test.go
new file mode 100644
index 0000000..c6814ad
--- /dev/null
+++ b/tests/voice_api_test.go
@@ -0,0 +1,1061 @@
+package infobip
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"io"
+	"testing"
+	"time"
+
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip"
+	"github.com/infobip/infobip-api-go-client/v3/pkg/infobip/models/voice"
+	"github.com/jarcoal/httpmock"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestShouldGetSentBulks(t *testing.T) {
+	givenBulkId := "string"
+	givenSendAt := "2015-02-22T17:42:05.390+0100"
+	givenSendAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSendAt)
+	ibTimeSendAt := infobip.Time{
+		T: givenSendAtDateTime,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "sendAt": "%s"
+    }`, givenBulkId, givenSendAt)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/tts/3/bulks", givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.GetSentBulks(context.Background()).BulkId(givenBulkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeSendAt, response.GetSendAt())
+}
+
+func TestShouldRescheduleSentBulk(t *testing.T) {
+	givenBulkId := "123"
+	givenSendAt := "2015-02-22T17:42:05.390+0100"
+	givenSendAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSendAt)
+	ibTimeSendAt := infobip.Time{
+		T: givenSendAtDateTime,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "sendAt": "%s"
+    }`, givenBulkId, givenSendAt)
+
+	expectedRequest := fmt.Sprintf(`{
+        "sendAt": "%s"
+    }`, givenSendAt)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", "/tts/3/bulks", givenResponse, 200)
+
+	request := voice.BulkRequest{
+		SendAt: ibTimeSendAt,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.RescheduleSentBulk(context.Background()).BulkId(givenBulkId).BulkRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, ibTimeSendAt, response.GetSendAt())
+}
+
+func TestShouldGetSentBulksStatus(t *testing.T) {
+	givenBulkId := "string"
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "status": "%s"
+    }`, givenBulkId, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/tts/3/bulks/status", givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.GetSentBulksStatus(context.Background()).BulkId(givenBulkId).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldManageSentBulksStatus(t *testing.T) {
+	givenBulkId := "string"
+	givenStatus := voice.STATUS_PENDING
+
+	givenResponse := fmt.Sprintf(`{
+      "bulkId": "%s",
+      "status": "%s"
+  }`, givenBulkId, givenStatus)
+
+	expectedRequest := fmt.Sprintf(`{
+      "status": "%s"
+  }`, givenStatus)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", "/tts/3/bulks/status", givenResponse, 200)
+
+	request := voice.BulkStatusRequest{
+		Status: givenStatus,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.ManageSentBulksStatus(context.Background()).BulkId(givenBulkId).BulkStatusRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Equal(t, givenStatus, response.GetStatus())
+}
+
+func TestShouldSendSingleVoiceTts(t *testing.T) {
+	givenBulkId := "4fda521a-c680-470d-b134-83d468f7ac80"
+	givenTo := "41793026727"
+	givenStatusGroupId := int32(1)
+	givenStatusGroupName := "PENDING"
+	givenStatusId := int32(26)
+	givenStatusName := "PENDING_ACCEPTED"
+	givenStatusDescription := "Message accepted, pending for delivery."
+	givenMessageId := "2250be2d4219-3af1-78856-aabe-1362af1edfd2"
+
+	givenText := "Test Voice message."
+	givenLanguage := "en"
+	givenName := "Joanna"
+	givenGender := "female"
+	givenFrom := "442032864231"
+
+	givenResponse := fmt.Sprintf(`{
+       "bulkId": "%s",
+       "messages": [
+           {
+               "to": "%s",
+               "status": {
+                   "groupId": %d,
+                   "groupName": "%s",
+                   "id": %d,
+                   "name": "%s",
+                   "description": "%s"
+               },
+               "messageId": "%s"
+           }
+       ]
+   }`, givenBulkId, givenTo, givenStatusGroupId, givenStatusGroupName, givenStatusId, givenStatusName, givenStatusDescription, givenMessageId)
+
+	expectedRequest := fmt.Sprintf(`{
+       "text": "%s",
+       "language": "%s",
+       "voice": {
+           "name": "%s",
+           "gender": "%s"
+       },
+       "from": "%s",
+       "to": "%s"
+   }`, givenText, givenLanguage, givenName, givenGender, givenFrom, givenTo)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/tts/3/single", givenResponse, 200)
+
+	givenVoice := voice.Voice{
+		Name:   &givenName,
+		Gender: &givenGender,
+	}
+
+	request := voice.SingleRequest{
+		Text:     &givenText,
+		Language: &givenLanguage,
+		Voice:    &givenVoice,
+		From:     givenFrom,
+		To:       givenTo,
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.SendSingleVoiceTts(context.Background()).SingleRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Len(t, response.GetMessages(), 1)
+
+	message := response.GetMessages()[0]
+	assert.Equal(t, givenTo, message.GetTo())
+	status := message.GetStatus()
+	assert.Equal(t, givenStatusGroupId, status.GetGroupId())
+	assert.Equal(t, givenStatusGroupName, status.GetGroupName())
+	assert.Equal(t, givenStatusId, status.GetId())
+	assert.Equal(t, givenStatusName, status.GetName())
+	assert.Equal(t, givenStatusDescription, status.GetDescription())
+	assert.Equal(t, givenMessageId, message.GetMessageId())
+}
+
+func TestShouldSendMultipleVoiceTts(t *testing.T) {
+	givenBulkId := "4fda521a-c680-470d-b134-83d468f7ac80"
+	givenTo := "41793026727"
+	givenStatusGroupId := int32(1)
+	givenStatusGroupName := "PENDING"
+	givenStatusId := int32(26)
+	givenStatusName := "PENDING_ACCEPTED"
+	givenStatusDescription := "Message accepted, pending for delivery."
+	givenMessageId := "2250be2d4219-3af1-78856-aabe-1362af1edfd2"
+
+	givenAudioFileUrl := "https://www.example.com/media.mp3"
+	givenReqFrom := "41793026700"
+	givenReqTo1 := "41793026727"
+	givenReqTo2 := "41793026731"
+	givenText := "Hello world!"
+	givenLanguage := "en"
+	givenName := "Joanna"
+	givenGender := "female"
+	givenTo1 := "41793026785"
+
+	givenResponse := fmt.Sprintf(`{
+        "bulkId": "%s",
+        "messages": [
+            {
+                "to": "%s",
+                "status": {
+                    "groupId": %d,
+                    "groupName": "%s",
+                    "id": %d,
+                    "name": "%s",
+                    "description": "%s"
+                },
+                "messageId": "%s"
+            }
+        ]
+    }`, givenBulkId, givenTo, givenStatusGroupId, givenStatusGroupName, givenStatusId, givenStatusName, givenStatusDescription, givenMessageId)
+
+	expectedRequest := fmt.Sprintf(`{
+        "messages": [
+            {
+                "audioFileUrl": "%s",
+                "from": "%s",
+                "to": [
+                    "%s",
+                    "%s"
+                ]
+            },
+            {
+                "from": "%s",
+                "to": [
+                    "%s"
+                ],
+                "language": "%s",
+                "text": "%s",
+                "voice": {
+                    "gender": "%s",
+                    "name": "%s"
+                }
+            }
+        ]
+    }`, givenAudioFileUrl, givenReqFrom, givenReqTo1, givenReqTo2, givenReqFrom, givenTo1, givenLanguage, givenText, givenGender, givenName)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/tts/3/multi", givenResponse, 200)
+
+	request := voice.MultiRequest{
+		Messages: []voice.MultiMessage{
+			{
+				AudioFileUrl: &givenAudioFileUrl,
+				From:         &givenReqFrom,
+				To:           []string{givenReqTo1, givenReqTo2},
+			},
+			{
+				Text:     &givenText,
+				Language: &givenLanguage,
+				Voice: &voice.Voice{
+					Name:   &givenName,
+					Gender: &givenGender,
+				},
+				From: &givenReqFrom,
+				To:   []string{givenTo1},
+			},
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, expectedRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.SendMultipleVoiceTts(context.Background()).MultiRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenBulkId, response.GetBulkId())
+	assert.Len(t, response.GetMessages(), 1)
+
+	message := response.GetMessages()[0]
+	assert.Equal(t, givenTo, message.GetTo())
+	status := message.GetStatus()
+	assert.Equal(t, givenStatusGroupId, status.GetGroupId())
+	assert.Equal(t, givenStatusGroupName, status.GetGroupName())
+	assert.Equal(t, givenStatusId, status.GetId())
+	assert.Equal(t, givenStatusName, status.GetName())
+	assert.Equal(t, givenStatusDescription, status.GetDescription())
+	assert.Equal(t, givenMessageId, message.GetMessageId())
+}
+
+func TestShouldGetVoices(t *testing.T) {
+	givenLanguage := "en"
+	givenName1 := "Benjamin"
+	givenGender1 := "male"
+	givenName2 := "Ivy"
+	givenGender2 := "female"
+	givenName3 := "Joanna"
+	givenGender3 := "female"
+	givenName4 := "Joey"
+	givenGender4 := "male"
+
+	givenResponse := fmt.Sprintf(`{
+        "voices": [
+            {
+                "name": "%s",
+                "gender": "%s"
+            },
+            {
+                "name": "%s",
+                "gender": "%s"
+            },
+            {
+                "name": "%s",
+                "gender": "%s"
+            },
+            {
+                "name": "%s",
+                "gender": "%s"
+            }
+        ]
+    }`, givenName1, givenGender1, givenName2, givenGender2, givenName3, givenGender3, givenName4, givenGender4)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/tts/3/voices/%s", givenLanguage), givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.GetVoices(context.Background(), givenLanguage).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Len(t, response.GetVoices(), 4)
+
+	voices := response.GetVoices()
+	assert.Equal(t, givenName1, voices[0].GetName())
+	assert.Equal(t, givenGender1, voices[0].GetGender())
+	assert.Equal(t, givenName2, voices[1].GetName())
+	assert.Equal(t, givenGender2, voices[1].GetGender())
+	assert.Equal(t, givenName3, voices[2].GetName())
+	assert.Equal(t, givenGender3, voices[2].GetGender())
+	assert.Equal(t, givenName4, voices[3].GetName())
+	assert.Equal(t, givenGender4, voices[3].GetGender())
+}
+
+func TestShouldGetVoiceDeliveryReports(t *testing.T) {
+	givenBulkId := "8c20f086-d82b-48cc-b2b3-3ca5f7aca9fb"
+	givenMessageId := "ff4804ef-6ab6-4abd-984d-ab3b1387e852"
+	givenFrom := "385333444"
+	givenTo := "385981178"
+	givenSentAt := "2018-06-25T13:38:14.730+0000"
+	givenMccMnc := "21901"
+	givenCallbackData := "DLR callback data"
+	givenFeature := "Voice-message"
+	givenStartTime := "2018-06-25T13:38:15.000+0000"
+	givenAnswerTime := "2018-06-25T13:38:25.000+0000"
+	givenEndTime := "2018-06-25T13:38:28.316+0000"
+	givenDuration := int32(10)
+	givenChargedDuration := int32(30)
+	givenFileDuration := 19.3
+	givenScenarioId := "333"
+	givenScenarioName := "Scenario name"
+	givenPricePerSecond := float32(0.01)
+	givenCurrency := "EUR"
+	givenStatusGroupId := int32(3)
+	givenStatusGroupName := "DELIVERED"
+	givenStatusId := int32(5)
+	givenStatusName := "DELIVERED_TO_HANDSET"
+	givenStatusDescription := "Message delivered to handset"
+	givenErrorGroupId := int32(0)
+	givenErrorGroupName := "OK"
+	givenErrorId := int32(5000)
+	givenErrorName := "VOICE_ANSWERED"
+	givenErrorDescription := "Call answered by human"
+	givenErrorPermanent := true
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "bulkId": "%s",
+                "messageId": "%s",
+                "from": "%s",
+                "to": "%s",
+                "sentAt": "%s",
+                "mccMnc": "%s",
+                "callbackData": "%s",
+                "voiceCall": {
+                    "feature": "%s",
+                    "startTime": "%s",
+                    "answerTime": "%s",
+                    "endTime": "%s",
+                    "duration": %d,
+                    "chargedDuration": %d,
+                    "fileDuration": %.1f,
+                    "ivr": {
+                        "scenarioId": "%s",
+                        "scenarioName": "%s"
+                    }
+                },
+                "price": {
+                    "pricePerSecond": %.2f,
+                    "currency": "%s"
+                },
+                "status": {
+                    "groupId": %d,
+                    "groupName": "%s",
+                    "id": %d,
+                    "name": "%s",
+                    "description": "%s"
+                },
+                "error": {
+                    "groupId": %d,
+                    "groupName": "%s",
+                    "id": %d,
+                    "name": "%s",
+                    "description": "%s",
+                    "permanent": %t
+                }
+            }
+        ]
+    }`, givenBulkId, givenMessageId, givenFrom, givenTo, givenSentAt, givenMccMnc, givenCallbackData, givenFeature, givenStartTime, givenAnswerTime, givenEndTime, givenDuration, givenChargedDuration, givenFileDuration, givenScenarioId, givenScenarioName, givenPricePerSecond, givenCurrency, givenStatusGroupId, givenStatusGroupName, givenStatusId, givenStatusName, givenStatusDescription, givenErrorGroupId, givenErrorGroupName, givenErrorId, givenErrorName, givenErrorDescription, givenErrorPermanent)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/voice/1/reports", givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.GetVoiceDeliveryReports(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Len(t, response.GetResults(), 1)
+
+	result := response.GetResults()[0]
+	assert.Equal(t, givenBulkId, result.GetBulkId())
+	assert.Equal(t, givenMessageId, result.GetMessageId())
+	assert.Equal(t, givenFrom, result.GetFrom())
+	assert.Equal(t, givenTo, result.GetTo())
+	assert.Equal(t, givenSentAt, result.GetSentAt())
+	assert.Equal(t, givenMccMnc, result.GetMccMnc())
+	assert.Equal(t, givenCallbackData, result.GetCallbackData())
+
+	voiceCall := result.GetVoiceCall()
+	assert.Equal(t, givenFeature, voiceCall.GetFeature())
+	assert.Equal(t, givenStartTime, voiceCall.GetStartTime())
+	assert.Equal(t, givenAnswerTime, voiceCall.GetAnswerTime())
+	assert.Equal(t, givenEndTime, voiceCall.GetEndTime())
+	assert.Equal(t, givenDuration, voiceCall.GetDuration())
+	assert.Equal(t, givenChargedDuration, voiceCall.GetChargedDuration())
+	assert.Equal(t, givenFileDuration, voiceCall.GetFileDuration())
+
+	ivr := voiceCall.GetIvr()
+	assert.Equal(t, givenScenarioId, ivr.GetScenarioId())
+	assert.Equal(t, givenScenarioName, ivr.GetScenarioName())
+
+	price := result.GetPrice()
+	assert.Equal(t, givenPricePerSecond, price.GetPricePerSecond())
+	assert.Equal(t, givenCurrency, price.GetCurrency())
+
+	status := result.GetStatus()
+	assert.Equal(t, givenStatusGroupId, status.GetGroupId())
+	assert.Equal(t, givenStatusGroupName, status.GetGroupName())
+	assert.Equal(t, givenStatusId, status.GetId())
+	assert.Equal(t, givenStatusName, status.GetName())
+	assert.Equal(t, givenStatusDescription, status.GetDescription())
+
+	error := result.GetError()
+	assert.Equal(t, givenErrorGroupId, error.GetGroupId())
+	assert.Equal(t, givenErrorGroupName, error.GetGroupName())
+	assert.Equal(t, givenErrorId, error.GetId())
+	assert.Equal(t, givenErrorName, error.GetName())
+	assert.Equal(t, givenErrorDescription, error.GetDescription())
+	assert.Equal(t, givenErrorPermanent, error.GetPermanent())
+}
+
+func TestShouldGetVoiceLogs(t *testing.T) {
+	givenBulkId := "06479ba3-5977-47f6-9346-fee0369bc76b"
+	givenMessageId := "1f21d8d7-f306-4f53-9f6e-eddfce9849ea"
+	givenTo := "41793026727"
+	givenFrom := "41793026700"
+	givenText := "Test voice message."
+	givenSendAt := "2015-02-22T17:42:05.390+0100"
+	givenSendAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSendAt)
+	ibTimeSendAt := infobip.Time{
+		T: givenSendAtDateTime,
+	}
+	givenDoneAt := "2015-02-22T17:42:05.390+0100"
+	givenDoneAtDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenSendAt)
+	ibTimeDoneAt := infobip.Time{
+		T: givenDoneAtDateTime,
+	}
+	givenDuration := int32(10)
+	givenMccMnc := "22801"
+	givenPricePerSecond := float32(0.01)
+	givenCurrency := "EUR"
+	givenStatusGroupId := int32(3)
+	givenStatusGroupName := "DELIVERED"
+	givenStatusId := int32(5)
+	givenStatusName := "DELIVERED_TO_HANDSET"
+	givenStatusDescription := "Message delivered to handset"
+	givenErrorGroupId := int32(0)
+	givenErrorGroupName := "OK"
+	givenErrorId := int32(5003)
+	givenErrorName := "EC_VOICE_NO_ANSWER"
+	givenErrorDescription := "User was notified, but did not answer call"
+	givenErrorPermanent := true
+
+	givenResponse := fmt.Sprintf(`{
+        "results": [
+            {
+                "bulkId": "%s",
+                "messageId": "%s",
+                "to": "%s",
+                "from": "%s",
+                "text": "%s",
+                "sentAt": "%s",
+                "doneAt": "%s",
+                "duration": %d,
+                "mccMnc": "%s",
+                "price": {
+                    "pricePerSecond": %.2f,
+                    "currency": "%s"
+                },
+                "status": {
+                    "groupId": %d,
+                    "groupName": "%s",
+                    "id": %d,
+                    "name": "%s",
+                    "description": "%s"
+                },
+                "error": {
+                    "groupId": %d,
+                    "groupName": "%s",
+                    "id": %d,
+                    "name": "%s",
+                    "description": "%s",
+                    "permanent": %t
+                }
+            }
+        ]
+    }`, givenBulkId, givenMessageId, givenTo, givenFrom, givenText, givenSendAt, givenDoneAt, givenDuration, givenMccMnc, givenPricePerSecond, givenCurrency, givenStatusGroupId, givenStatusGroupName, givenStatusId, givenStatusName, givenStatusDescription, givenErrorGroupId, givenErrorGroupName, givenErrorId, givenErrorName, givenErrorDescription, givenErrorPermanent)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/tts/3/logs", givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.GetSentVoiceLogs(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Len(t, response.GetResults(), 1)
+
+	result := response.GetResults()[0]
+	assert.Equal(t, givenBulkId, result.GetBulkId())
+	assert.Equal(t, givenMessageId, result.GetMessageId())
+	assert.Equal(t, givenTo, result.GetTo())
+	assert.Equal(t, givenFrom, result.GetFrom())
+	assert.Equal(t, givenText, result.GetText())
+	assert.Equal(t, ibTimeSendAt, result.GetSentAt())
+	assert.Equal(t, ibTimeDoneAt, result.GetDoneAt())
+	assert.Equal(t, givenDuration, result.GetDuration())
+	assert.Equal(t, givenMccMnc, result.GetMccMnc())
+
+	price := result.GetPrice()
+	assert.Equal(t, givenPricePerSecond, price.GetPricePerSecond())
+	assert.Equal(t, givenCurrency, price.GetCurrency())
+
+	status := result.GetStatus()
+	assert.Equal(t, givenStatusGroupId, status.GetGroupId())
+	assert.Equal(t, givenStatusGroupName, status.GetGroupName())
+	assert.Equal(t, givenStatusId, status.GetId())
+	assert.Equal(t, givenStatusName, status.GetName())
+	assert.Equal(t, givenStatusDescription, status.GetDescription())
+
+	error := result.GetError()
+	assert.Equal(t, givenErrorGroupId, error.GetGroupId())
+	assert.Equal(t, givenErrorGroupName, error.GetGroupName())
+	assert.Equal(t, givenErrorId, error.GetId())
+	assert.Equal(t, givenErrorName, error.GetName())
+	assert.Equal(t, givenErrorDescription, error.GetDescription())
+	assert.Equal(t, givenErrorPermanent, error.GetPermanent())
+}
+
+func TestShouldSearchVoiceIvrRecordedFiles(t *testing.T) {
+	givenMessageId1 := "453e161a-fe4f-4f3c-80c0-ab520de9a969"
+	givenFrom1 := "442032864231"
+	givenTo1 := "38712345678"
+	givenScenarioId1 := "C9CE33CF130511D8E333C1260BABA309"
+	givenGroupId1 := "#/script/1"
+	givenUrl1 := "/voice/ivr/1/files/3C67336FA555A606C85FA9637906A6AB98436B7AFC65D857A416F6521D39F8F0E1D3D2469FF580D8968D3DD89A2DB561"
+	givenRecordedAt1 := "2021-08-24T15:00:00.000+0000"
+	givenRecordedAt1DateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenRecordedAt1)
+	ibTimeRecordedAt1 := infobip.Time{
+		T: givenRecordedAt1DateTime,
+	}
+
+	givenRecordedAt2 := "2021-08-24T15:00:00.000+0000"
+	givenRecordedAt2DateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenRecordedAt2)
+	ibTimeRecordedAt2 := infobip.Time{
+		T: givenRecordedAt2DateTime,
+	}
+
+	givenMessageId2 := "05b2859d-85c6-4068-9347-2e563b5c9cf4"
+	givenFrom2 := "442032864231"
+	givenTo2 := "38712345678"
+	givenScenarioId2 := "4A6177C9B92039306F1F091708851A2E"
+	givenGroupId2 := "#/script/1"
+	givenUrl2 := "/voice/ivr/1/files/305DE72BA11D81D1BAED75BFC46706761580BDEC2218C22628447FD3814E7913D3058E4ECBFD6F55C80E976235EEB111"
+
+	givenResponse := fmt.Sprintf(`[{
+      "files": [
+          {
+              "messageId": "%s",
+              "from": "%s",
+              "to": "%s",
+              "scenarioId": "%s",
+              "groupId": "%s",
+              "url": "%s",
+              "recordedAt": "%s"
+          },
+          {
+              "messageId": "%s",
+              "from": "%s",
+              "to": "%s",
+              "scenarioId": "%s",
+              "groupId": "%s",
+              "url": "%s",
+              "recordedAt": "%s"
+          }
+      ]
+  }]`, givenMessageId1, givenFrom1, givenTo1, givenScenarioId1, givenGroupId1, givenUrl1, givenRecordedAt1, givenMessageId2, givenFrom2, givenTo2, givenScenarioId2, givenGroupId2, givenUrl2, givenRecordedAt2)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", "/voice/ivr/1/files", givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.SearchVoiceIvrRecordedFiles(context.Background()).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Len(t, response[0].GetFiles(), 2)
+
+	file1 := response[0].GetFiles()[0]
+	assert.Equal(t, givenMessageId1, file1.GetMessageId())
+	assert.Equal(t, givenFrom1, file1.GetFrom())
+	assert.Equal(t, givenTo1, file1.GetTo())
+	assert.Equal(t, givenScenarioId1, file1.GetScenarioId())
+	assert.Equal(t, givenGroupId1, file1.GetGroupId())
+	assert.Equal(t, givenUrl1, file1.GetUrl())
+	assert.Equal(t, ibTimeRecordedAt1, file1.GetRecordedAt())
+
+	file2 := response[0].GetFiles()[1]
+	assert.Equal(t, givenMessageId2, file2.GetMessageId())
+	assert.Equal(t, givenFrom2, file2.GetFrom())
+	assert.Equal(t, givenTo2, file2.GetTo())
+	assert.Equal(t, givenScenarioId2, file2.GetScenarioId())
+	assert.Equal(t, givenGroupId2, file2.GetGroupId())
+	assert.Equal(t, givenUrl2, file2.GetUrl())
+	assert.Equal(t, ibTimeRecordedAt2, file2.GetRecordedAt())
+}
+
+func TestShouldGetVoiceIvrScenarioById(t *testing.T) {
+	givenId := "E83E787CF2613450157ADA3476171E3F"
+	givenName := "scenario"
+	givenDescription := "Description"
+	givenCreateTime := "2021-08-24T15:00:00.000+0000"
+	givenCreateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreateTime)
+	ibTimeCreateTime := infobip.Time{
+		T: givenCreateTimeDateTime,
+	}
+	givenUpdateTime := "2021-08-24T15:00:00.000+0000"
+	givenUpdateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreateTime)
+	ibTimeUpdateTime := infobip.Time{
+		T: givenUpdateTimeDateTime,
+	}
+
+	givenLastUsageDate := "2021-08-28"
+	givenLastUsageDateTime, _ := time.Parse("2006-01-02", givenLastUsageDate)
+	ibTimeLastUsageDate := infobip.Time{
+		T: givenLastUsageDateTime,
+	}
+
+	givenVoiceIvrResponse := voice.UpdateScenarioResponse{
+		Id:            &givenId,
+		Name:          &givenName,
+		Description:   &givenDescription,
+		CreateTime:    &ibTimeCreateTime,
+		UpdateTime:    &ibTimeUpdateTime,
+		LastUsageDate: &ibTimeLastUsageDate,
+	}
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "description": "%s",
+       "createTime": "%s",
+       "updateTime": "%s",
+	   "lastUsageDate": "%s"
+   }`, givenId, givenName, givenDescription, givenCreateTime, givenUpdateTime, givenLastUsageDate)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("GET", fmt.Sprintf("/voice/ivr/1/scenarios/%s", givenId), givenResponse, 200)
+
+	response, _, err := infobipClient.VoiceAPI.GetAVoiceIvrScenario(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+	assert.Equal(t, ibTimeLastUsageDate, response.GetLastUsageDate())
+	assert.Equal(t, &givenVoiceIvrResponse, response)
+}
+
+func TestShouldCreateVoiceIvrScenario(t *testing.T) {
+	givenId := "E83E787CF2613450157ADA3476171E3F"
+	givenName := "scenario"
+	givenDescription := ""
+	givenCreateTime := "2015-02-22T17:42:05.390+0100"
+	givenCreateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreateTime)
+	ibTimeCreateTime := infobip.Time{
+		T: givenCreateTimeDateTime,
+	}
+	givenUpdateTime := "2015-02-22T17:42:05.390+0100"
+	givenUpdateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenUpdateTime)
+	ibTimeUpdateTime := infobip.Time{
+		T: givenUpdateTimeDateTime,
+	}
+	givenDial := "dial"
+	script := voice.Dial{Dial: givenDial}
+
+	givenRequest := fmt.Sprintf(`{
+       "name": "%s",
+       "description": "%s",
+       "script": [
+           {
+               "dial": "%s"
+           }
+       ]
+   }`, givenName, givenDescription, givenDial)
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "description": "%s",
+       "createTime": "%s",
+       "updateTime": "%s",
+       "script": [
+			{
+               "dial": "%s"
+           }
+       ]
+   }`, givenId, givenName, givenDescription, givenCreateTime, givenUpdateTime, givenDial)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/voice/ivr/1/scenarios", givenResponse, 200)
+
+	request := voice.UpdateScenarioRequest{
+		Name:        givenName,
+		Description: &givenDescription,
+		Script:      []voice.ScriptInner{voice.DialAsScriptInner(&script)},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.CreateAVoiceIvrScenario(context.Background()).UpdateScenarioRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenDescription, response.GetDescription())
+	assert.Equal(t, ibTimeCreateTime, response.GetCreateTime())
+	assert.Equal(t, ibTimeUpdateTime, response.GetUpdateTime())
+	assert.NotNil(t, response.GetScript())
+}
+
+func TestShouldCreateVoiceIvrScenarios(t *testing.T) {
+	givenId := "E83E787CF2613450157ADA3476171E3F"
+	givenName := "Capture speech or digit"
+	givenDescription := "Capture speech or digit"
+	givenCreateTime := "2023-09-14T15:13:36.735+0000"
+	givenCreateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreateTime)
+	ibTimeCreateTime := infobip.Time{
+		T: givenCreateTimeDateTime,
+	}
+
+	givenUpdateTime := "2015-02-22T17:42:05.390+0100"
+	givenUpdateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenUpdateTime)
+	ibTimeUpdateTime := infobip.Time{
+		T: givenUpdateTimeDateTime,
+	}
+	givenDial := "dial"
+
+	givenRequest := `{
+        "name": "Capture speech or digit",
+        "description": "Capture speech or digit",
+        "script": [
+            {
+                "say": "Say discount or press 1 to get discount. Say exit or press 0 to exit."
+            },
+            {
+                "capture": "myVar",
+                "timeout": 5,
+                "speechOptions": {
+                    "language": "en-US",
+                    "maxSilence": 2,
+                    "keyPhrases": [
+                        "discount",
+                        "exit"
+                    ]
+                },
+                "dtmfOptions": {
+                    "maxInputLength": 1
+                }
+            },
+            {
+                "if": "${myVar == 'discount' || myVar == '1'}",
+                "then": [
+                    {
+                        "say": "You will get discount"
+                    }
+                ],
+                "else": [
+                    {
+                        "if": "${myVar == 'exit' || myVar == '0'}",
+                        "then": [
+                            {
+                                "say": "Goodbye"
+                            }
+                        ],
+                        "else": [
+                            {
+                                "say": "I did not understand"
+                            }
+                        ]
+                    }
+                ]
+            },
+            "hangup"
+        ]
+    }`
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "description": "%s",
+       "createTime": "%s",
+       "updateTime": "%s",
+       "script": [
+			{
+               "dial": "%s"
+           }
+       ]
+   }`, givenId, givenName, givenDescription, givenCreateTime, givenUpdateTime, givenDial)
+
+	givenMaxSilence := int32(2)
+	givenMaxInputLength := int32(1)
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("POST", "/voice/ivr/1/scenarios", givenResponse, 200)
+
+	request := voice.UpdateScenarioRequest{
+		Name:        givenName,
+		Description: &givenDescription,
+		Script: []voice.ScriptInner{
+			voice.SayAsScriptInner(&voice.Say{Say: "Say discount or press 1 to get discount. Say exit or press 0 to exit."}),
+			voice.CaptureAsScriptInner(&voice.Capture{
+				Capture: "myVar",
+				Timeout: 5,
+				SpeechOptions: voice.SpeechOptions{
+					Language:   "en-US",
+					MaxSilence: &givenMaxSilence,
+					KeyPhrases: []string{"discount", "exit"},
+				},
+				DtmfOptions: &voice.DtmfOptions{
+					MaxInputLength: &givenMaxInputLength,
+				},
+			}),
+			voice.IfThenElseAsScriptInner(&voice.IfThenElse{
+				If: "${myVar == 'discount' || myVar == '1'}",
+				Then: []voice.ScriptInner{
+					voice.SayAsScriptInner(&voice.Say{Say: "You will get discount"}),
+				},
+				Else: []voice.ScriptInner{
+					voice.IfThenElseAsScriptInner(&voice.IfThenElse{
+						If: "${myVar == 'exit' || myVar == '0'}",
+						Then: []voice.ScriptInner{
+							voice.SayAsScriptInner(&voice.Say{Say: "Goodbye"}),
+						},
+						Else: []voice.ScriptInner{
+							voice.SayAsScriptInner(&voice.Say{Say: "I did not understand"}),
+						},
+					}),
+				},
+			}),
+			voice.HangupAsScriptInner(voice.HANGUP_HANGUP.Ptr()),
+		},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.CreateAVoiceIvrScenario(context.Background()).UpdateScenarioRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenDescription, response.GetDescription())
+	assert.Equal(t, ibTimeCreateTime, response.GetCreateTime())
+	assert.Equal(t, ibTimeUpdateTime, response.GetUpdateTime())
+	assert.NotNil(t, response.GetScript())
+}
+
+func TestShouldUpdateVoiceIvrScenario(t *testing.T) {
+	givenId := "E83E787CF2613450157ADA3476171E3F"
+	givenName := "Call API"
+	givenDescription := "Perform a POST request to provided URL with headers and payload."
+	givenRequestUrl := "https://requestb.in/12345"
+	givenRequestMethod := voice.HTTPMETHOD_POST
+	givenRequestHeaderKey := "content-type"
+	givenRequestHeaderValue := "application/json"
+	givenRequestBodyPayload := "payload"
+	givenCreateTime := "2015-02-22T17:42:05.390+0100"
+	givenCreateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenCreateTime)
+	ibTimeCreateTime := infobip.Time{
+		T: givenCreateTimeDateTime,
+	}
+	givenUpdateTime := "2015-02-22T17:42:05.390+0100"
+	givenUpdateTimeDateTime, _ := time.Parse(infobip.INFOBIP_TIME_FORMAT, givenUpdateTime)
+	ibTimeUpdateTime := infobip.Time{
+		T: givenUpdateTimeDateTime,
+	}
+	givenCallApi := voice.CallApi{
+		Request: givenRequestUrl,
+		Options: voice.CallApiOptions{
+			Method:  givenRequestMethod,
+			Headers: map[string]interface{}{givenRequestHeaderKey: givenRequestHeaderValue},
+			Body:    &givenRequestBodyPayload,
+		},
+	}
+
+	givenRequest := fmt.Sprintf(`{
+       "name": "%s",
+       "description": "%s",
+       "script": [
+           {
+               "request": "%s",
+               "options": {
+                   "method": "%s",
+                   "headers": {
+                       "%s": "%s"
+                   },
+                   "body": "%s"
+               }
+           }
+       ]
+   }`, givenName, givenDescription, givenRequestUrl, givenRequestMethod, givenRequestHeaderKey, givenRequestHeaderValue, givenRequestBodyPayload)
+
+	givenResponse := fmt.Sprintf(`{
+       "id": "%s",
+       "name": "%s",
+       "description": "%s",
+       "createTime": "%s",
+       "updateTime": "%s",
+       "script": [
+           {
+               "request": "%s",
+               "options": {
+                   "method": "%s",
+                   "headers": {
+                       "%s": "%s"
+                   },
+                   "body": "%s"
+               }
+           }
+       ]
+   }`, givenId, givenName, givenDescription, givenCreateTime, givenUpdateTime, givenRequestUrl, givenRequestMethod, givenRequestHeaderKey, givenRequestHeaderValue, givenRequestBodyPayload)
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("PUT", fmt.Sprintf("/voice/ivr/1/scenarios/%s", givenId), givenResponse, 200)
+
+	request := voice.UpdateScenarioRequest{
+		Name:        givenName,
+		Description: &givenDescription,
+		Script:      []voice.ScriptInner{voice.CallApiAsScriptInner(&givenCallApi)},
+	}
+
+	actualRequest, _ := json.Marshal(request)
+	ValidateExpectedRequestBodiesMatches(t, givenRequest, string(actualRequest))
+
+	response, _, err := infobipClient.VoiceAPI.UpdateVoiceIvrScenario(context.Background(), givenId).UpdateScenarioRequest(request).Execute()
+
+	assert.Nil(t, err)
+	assert.NotNil(t, response)
+	assert.Equal(t, givenId, response.GetId())
+	assert.Equal(t, givenName, response.GetName())
+	assert.Equal(t, givenDescription, response.GetDescription())
+	assert.Equal(t, ibTimeCreateTime, response.GetCreateTime())
+	assert.Equal(t, ibTimeUpdateTime, response.GetUpdateTime())
+	assert.Equal(t, &givenCallApi, response.GetScript()[0].CallApi)
+}
+
+func TestShouldDeleteVoiceIvrScenario(t *testing.T) {
+	givenId := "E83E787CF2613450157ADA3476171E3F"
+	givenResponse := "{}"
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+	SetUpSuccessRequest("DELETE", fmt.Sprintf("/voice/ivr/1/scenarios/%s", givenId), givenResponse, 200)
+
+	_, err := infobipClient.VoiceAPI.DeleteAVoiceIvrScenario(context.Background(), givenId).Execute()
+
+	assert.Nil(t, err)
+}
+
+func TestShouldDownloadVoiceIvrRecordedFile(t *testing.T) {
+	givenFileId := "3C67336FA555A606C85FA9637906A6AB98436B7AFC65D857A416F6521D39F8F0E1D3D2469FF580D8968D3DD89A2DB561"
+	givenBinaryData := []byte{0x00, 0x01, 0x02, 0x03, 0x04}
+
+	httpmock.Activate()
+	defer httpmock.DeactivateAndReset()
+
+	SetUpGetRequestWithFileContent(fmt.Sprintf("/voice/ivr/1/files/%s", givenFileId), givenBinaryData, 200)
+
+	file, _, err := infobipClient.VoiceAPI.DownloadVoiceIvrRecordedFile(context.Background(), givenFileId).Execute()
+
+	assert.Nil(t, err, "Expected no error while executing the request")
+	assert.NotNil(t, file, "Expected a valid file in the response")
+
+	content, err := io.ReadAll(file)
+	assert.Nil(t, err, "Expected no error while reading the file content")
+	assert.Equal(t, givenBinaryData, content, "File content does not match the expected binary data")
+}
diff --git a/two-factor-authentication.md b/two-factor-authentication.md
index d7ebf06..7cab0d9 100644
--- a/two-factor-authentication.md
+++ b/two-factor-authentication.md
@@ -1,70 +1,69 @@
-## Two-Factor Authentication (2FA)
-
-#### Application setup
-
-The application represents your service. It’s a good practice to have separate applications for separate services.
-
-```go
-    request := sms.NewApplicationRequest("2FA application")
-
-	apiResponse, httpResponse, err := infobipClient.
-		TfaApi.
-		CreateTfaApplication(auth).
-		ApplicationRequest(*request).
-		Execute()
-
-    appId := apiResponse.ApplicationId
-```
-
-#### Message template setup
-
-Message template is the message body with the PIN placeholder that is sent to end users.
-// TODO
-```go
-	pinLength := int32(4)
-
-	request := infobip.NewTfaCreateMessageRequest("Your pin is {{pin}}", infobip.TFAPINTYPE_ALPHANUMERIC)
-	request.PinLength = &pinLength
-
-	apiResponse, httpResponse, err := infobipClient.
-		TfaApi.
-		CreateTfaMessageTemplate(auth, appId).
-		TfaCreateMessageRequest(*request).
-		Execute()
-	
-	msgId := apiResponse.MessageId
-```
-
-#### Send 2FA code via SMS
-
-After setting up the application and message template, you can start generating and sending PIN codes via SMS to the provided destination address.
-
-```go
-    from := "InfoSMS"
-    to := "41793026727"
-    
-    request := sms.NewStartAuthenticationRequest(*appId, *msgId, to)
-    request.From = &from
-
-	apiResponse, httpResponse, err := infobipClient.
-		TfaApi.
-		SendTfaPinCodeOverSms(auth).
-		StartAuthenticationRequest(*request).
-		Execute()
-		
-    pinId := apiResponse.PinId
-```
-
-#### Verify phone number
-
-Verify a phone number to confirm successful 2FA authentication.
-
-```go
-	request := sms.NewVerifyPinRequest("1598")
-
-	apiResponse, httpResponse, err := infobipClient.
-		TfaApi.
-		VerifyTfaPhoneNumber(auth, *pinId).
-		VerifyPinRequest(*request).
-		Execute()
-```
+## Two-Factor Authentication (2FA)
+
+#### Application setup
+
+The application represents your service. It’s a good practice to have separate applications for separate services.
+
+```go
+    request := sms.NewApplicationRequest("2FA application")
+
+	apiResponse, httpResponse, err := infobipClient.
+        TfaAPI.
+		CreateTfaApplication(auth).
+		ApplicationRequest(*request).
+		Execute()
+
+    appId := apiResponse.ApplicationId
+```
+
+#### Message template setup
+
+Message template is the message body with the PIN placeholder that is sent to end users.
+```go
+	pinLength := int32(4)
+	
+    request := sms.NewCreateMessageRequest("Your pin is {{pin}}", sms.PINTYPE_ALPHANUMERIC)
+    request.PinLength = &pinLength
+    
+    apiResponse, httpResponse, err := infobipClient.
+        TfaAPI.
+        CreateTfaMessageTemplate(auth, appId).
+        CreateMessageRequest(*request).
+        Execute()
+	
+	msgId := apiResponse.MessageId
+```
+
+#### Send 2FA code via SMS
+
+After setting up the application and message template, you can start generating and sending PIN codes via SMS to the provided destination address.
+
+```go
+    from := "InfoSMS"
+    to := "41793026727"
+    
+    request := sms.NewStartAuthenticationRequest(*appId, *msgId, to)
+    request.From = &from
+
+	apiResponse, httpResponse, err := infobipClient.
+        TfaAPI.
+		SendTfaPinCodeOverSms(auth).
+		StartAuthenticationRequest(*request).
+		Execute()
+		
+    pinId := apiResponse.PinId
+```
+
+#### Verify phone number
+
+Verify a phone number to confirm successful 2FA authentication.
+
+```go
+	request := sms.NewVerifyPinRequest("1598")
+
+	apiResponse, httpResponse, err := infobipClient.
+        TfaAPI.
+		VerifyTfaPhoneNumber(auth, *pinId).
+		VerifyPinRequest(*request).
+		Execute()
+```