linq-python 0.38.0__tar.gz → 0.39.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- linq_python-0.39.1/.release-please-manifest.json +3 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/CHANGELOG.md +14 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/PKG-INFO +1 -1
- {linq_python-0.38.0 → linq_python-0.39.1}/pyproject.toml +1 -1
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_client.py +12 -12
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_version.py +1 -1
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payment_requests.py +4 -4
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/webhook_subscriptions.py +2 -2
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat.py +5 -5
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_create_response.py +5 -5
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_created_webhook_event.py +5 -5
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_content_param.py +7 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_edited_webhook_event.py +5 -5
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_event_v2.py +5 -5
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_list_response.py +4 -3
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_event_list_response.py +1 -1
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_webhooks.py +2 -2
- {linq_python-0.38.0 → linq_python-0.39.1}/uv.lock +1 -1
- linq_python-0.38.0/.release-please-manifest.json +0 -3
- {linq_python-0.38.0 → linq_python-0.39.1}/.gitignore +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/CONTRIBUTING.md +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/LICENSE +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/README.md +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/SECURITY.md +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/api.md +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/bin/check-release-environment +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/bin/publish-pypi +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/examples/.keep +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/release-please-config.json +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/requirements-dev.lock +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_base_client.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_compat.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_constants.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_exceptions.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_files.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_models.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_qs.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_resource.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_streaming.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_types.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_compat.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_datetime_parse.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_json.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_logs.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_path.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_proxy.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_reflection.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_resources_proxy.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_streams.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_sync.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_transform.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_typing.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_utils.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/lib/.keep +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/pagination.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/py.typed +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/attachments.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/available_number.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/blocked_handles.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/capability.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/background.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/chats.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/location.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/messages.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/participants.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/polls.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/typing.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/contact_card.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/experiences.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/messages/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/messages/messages.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/messages/poll.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payment_handles.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payment_providers.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payments.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/phone_numbers.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/phonenumbers.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/webhook_events.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/webhooks.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/attachment_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/attachment_create_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/attachment_retrieve_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/available_number_retrieve_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/available_number_retrieve_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_block_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_block_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_entry.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_list_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_unblock_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/capability_check_RCS_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/capability_check_i_message_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_background_update_failed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_background_updated_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_leave_chat_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_list_chats_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_send_voicememo_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_send_voicememo_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_update_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_update_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/background_set_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/get_chat_location_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/location_request_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/message_list_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/message_send_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/message_send_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_add_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_add_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_remove_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_remove_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/poll.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/poll_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/poll_envelope.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/sent_message.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_retrieve_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_retrieve_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_update_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/experience_list_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/experience_retrieve_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/handle_check_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/link_part_param.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/media_part_param.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_add_reaction_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_add_reaction_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_create_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_delivered_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_effect.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_effect_param.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_failed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_list_messages_thread_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_read_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_received_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_sent_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_update_app_card_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_update_app_card_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_update_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/messages/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/messages/poll_add_options_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/messages/poll_vote_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/participant_added_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/participant_removed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_credentials_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_handle_connection.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_handle_verify_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_provider.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_provider_connect_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_provider_connect_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request_list_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request_list_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_status_updated_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_update_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_update_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phonenumber_list_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_delivered_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_failed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_reaction_added_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_read_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_received_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_sent_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_updated_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_vote_added_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_vote_removed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reaction_added_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reaction_event_base.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reaction_removed_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reply_to.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reply_to_param.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_action_item.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_audit.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_audit_started.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_driver.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_driver_key.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_evidence.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_opt_out_chat.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_report.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_unhealthy_chat.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/schemas_media_part_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/schemas_message_effect.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/schemas_text_part_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/set_contact_card.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/chat_handle.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/link_part_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/media_part_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/reaction.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/reaction_type.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/service_type.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/text_decoration.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/text_part_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/reaction_type.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/service_type.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/text_decoration.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/supported_content_type.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/text_part_param.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/unwrap_webhook_event.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_event_type.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_create_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_create_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_list_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_update_params.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_background.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_location.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_messages.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_participants.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_polls.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_typing.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/messages/__init__.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/messages/test_poll.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_attachments.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_available_number.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_blocked_handles.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_capability.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_chats.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_contact_card.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_experiences.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_messages.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payment_handles.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payment_providers.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payment_requests.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payments.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_phone_numbers.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_phonenumbers.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_webhook_events.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_webhook_subscriptions.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/conftest.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/sample_file.txt +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_client.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_extract_files.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_files.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_models.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_qs.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_required_args.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_response.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_streaming.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_transform.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_datetime_parse.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_json.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_path.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_proxy.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_typing.py +0 -0
- {linq_python-0.38.0 → linq_python-0.39.1}/tests/utils.py +0 -0
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.39.1](https://github.com/linq-team/linq-python/compare/v0.39.0...v0.39.1) (2026-09-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* update documentation links to include imessage channel path ([ee83a35](https://github.com/linq-team/linq-python/commit/ee83a355f4b017634bb477e794ea3bf5434ff26b))
|
|
9
|
+
|
|
10
|
+
## [0.39.0](https://github.com/linq-team/linq-python/compare/v0.38.0...v0.39.0) (2026-09-01)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add optional caption field to app clip card button ([2bc4d17](https://github.com/linq-team/linq-python/commit/2bc4d17c395ddd96d500800164247c9e9220885d))
|
|
16
|
+
|
|
3
17
|
## [0.38.0](https://github.com/linq-team/linq-python/compare/v0.37.1...v0.38.0) (2026-09-01)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: linq-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.39.1
|
|
4
4
|
Summary: The official Python library for the linq-api-v3 API
|
|
5
5
|
Project-URL: Homepage, https://github.com/linq-team/linq-python
|
|
6
6
|
Project-URL: Repository, https://github.com/linq-team/linq-python
|
|
@@ -622,7 +622,7 @@ class LinqAPIV3(SyncAPIClient):
|
|
|
622
622
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
623
623
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
624
624
|
better. A `link` part must be the only part in the message. See
|
|
625
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
625
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
626
626
|
|
|
627
627
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
628
628
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -672,7 +672,7 @@ class LinqAPIV3(SyncAPIClient):
|
|
|
672
672
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
673
673
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
674
674
|
Each event carries the payment request id, amount, currency, and your
|
|
675
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
675
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
676
676
|
"""
|
|
677
677
|
from .resources.payment_requests import PaymentRequestsResource
|
|
678
678
|
|
|
@@ -1738,7 +1738,7 @@ class AsyncLinqAPIV3(AsyncAPIClient):
|
|
|
1738
1738
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
1739
1739
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
1740
1740
|
better. A `link` part must be the only part in the message. See
|
|
1741
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
1741
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
1742
1742
|
|
|
1743
1743
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
1744
1744
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -1788,7 +1788,7 @@ class AsyncLinqAPIV3(AsyncAPIClient):
|
|
|
1788
1788
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
1789
1789
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
1790
1790
|
Each event carries the payment request id, amount, currency, and your
|
|
1791
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
1791
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
1792
1792
|
"""
|
|
1793
1793
|
from .resources.payment_requests import AsyncPaymentRequestsResource
|
|
1794
1794
|
|
|
@@ -2788,7 +2788,7 @@ class LinqAPIV3WithRawResponse:
|
|
|
2788
2788
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
2789
2789
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
2790
2790
|
better. A `link` part must be the only part in the message. See
|
|
2791
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
2791
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
2792
2792
|
|
|
2793
2793
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
2794
2794
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -2838,7 +2838,7 @@ class LinqAPIV3WithRawResponse:
|
|
|
2838
2838
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
2839
2839
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
2840
2840
|
Each event carries the payment request id, amount, currency, and your
|
|
2841
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
2841
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
2842
2842
|
"""
|
|
2843
2843
|
from .resources.payment_requests import PaymentRequestsResourceWithRawResponse
|
|
2844
2844
|
|
|
@@ -3710,7 +3710,7 @@ class AsyncLinqAPIV3WithRawResponse:
|
|
|
3710
3710
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
3711
3711
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
3712
3712
|
better. A `link` part must be the only part in the message. See
|
|
3713
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
3713
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
3714
3714
|
|
|
3715
3715
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
3716
3716
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -3760,7 +3760,7 @@ class AsyncLinqAPIV3WithRawResponse:
|
|
|
3760
3760
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
3761
3761
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
3762
3762
|
Each event carries the payment request id, amount, currency, and your
|
|
3763
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
3763
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
3764
3764
|
"""
|
|
3765
3765
|
from .resources.payment_requests import AsyncPaymentRequestsResourceWithRawResponse
|
|
3766
3766
|
|
|
@@ -4632,7 +4632,7 @@ class LinqAPIV3WithStreamedResponse:
|
|
|
4632
4632
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
4633
4633
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
4634
4634
|
better. A `link` part must be the only part in the message. See
|
|
4635
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
4635
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
4636
4636
|
|
|
4637
4637
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
4638
4638
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -4682,7 +4682,7 @@ class LinqAPIV3WithStreamedResponse:
|
|
|
4682
4682
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
4683
4683
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
4684
4684
|
Each event carries the payment request id, amount, currency, and your
|
|
4685
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
4685
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
4686
4686
|
"""
|
|
4687
4687
|
from .resources.payment_requests import PaymentRequestsResourceWithStreamingResponse
|
|
4688
4688
|
|
|
@@ -5554,7 +5554,7 @@ class AsyncLinqAPIV3WithStreamedResponse:
|
|
|
5554
5554
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
5555
5555
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
5556
5556
|
better. A `link` part must be the only part in the message. See
|
|
5557
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
5557
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
5558
5558
|
|
|
5559
5559
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
5560
5560
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -5604,7 +5604,7 @@ class AsyncLinqAPIV3WithStreamedResponse:
|
|
|
5604
5604
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
5605
5605
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
5606
5606
|
Each event carries the payment request id, amount, currency, and your
|
|
5607
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
5607
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
5608
5608
|
"""
|
|
5609
5609
|
from .resources.payment_requests import AsyncPaymentRequestsResourceWithStreamingResponse
|
|
5610
5610
|
|
|
@@ -163,7 +163,7 @@ class PaymentRequestsResource(SyncAPIResource):
|
|
|
163
163
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
164
164
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
165
165
|
better. A `link` part must be the only part in the message. See
|
|
166
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
166
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
167
167
|
|
|
168
168
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
169
169
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -213,7 +213,7 @@ class PaymentRequestsResource(SyncAPIResource):
|
|
|
213
213
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
214
214
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
215
215
|
Each event carries the payment request id, amount, currency, and your
|
|
216
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
216
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
217
217
|
"""
|
|
218
218
|
|
|
219
219
|
@cached_property
|
|
@@ -628,7 +628,7 @@ class AsyncPaymentRequestsResource(AsyncAPIResource):
|
|
|
628
628
|
`POST /v3/chats/{chatId}/messages` — it renders as a rich card with your
|
|
629
629
|
branding (title, amount, image) instead of a bare URL, which converts far
|
|
630
630
|
better. A `link` part must be the only part in the message. See
|
|
631
|
-
[Rich Link Previews](/guides/messaging/sending-messages).
|
|
631
|
+
[Rich Link Previews](/channel/imessage/guides/messaging/sending-messages).
|
|
632
632
|
|
|
633
633
|
On a supported iPhone the link opens an **Apple Pay App Clip** — a native,
|
|
634
634
|
no-install checkout sheet. Everywhere else (Android, desktop, iPhones
|
|
@@ -678,7 +678,7 @@ class AsyncPaymentRequestsResource(AsyncAPIResource):
|
|
|
678
678
|
Subscribe to payment lifecycle events to reconcile server-side rather than
|
|
679
679
|
polling: `payment.succeeded`, `payment.canceled`, and `payment.expired`.
|
|
680
680
|
Each event carries the payment request id, amount, currency, and your
|
|
681
|
-
`metadata`. See [Webhooks](/guides/webhooks).
|
|
681
|
+
`metadata`. See [Webhooks](/channel/imessage/guides/webhooks).
|
|
682
682
|
"""
|
|
683
683
|
|
|
684
684
|
@cached_property
|
|
@@ -213,7 +213,7 @@ class WebhookSubscriptionsResource(SyncAPIResource):
|
|
|
213
213
|
- Legacy `X-Webhook-*` headers are also sent for backwards compatibility
|
|
214
214
|
(deprecated)
|
|
215
215
|
- See
|
|
216
|
-
[Verifying Webhook Signatures](https://docs.linqapp.com/guides/webhooks#verifying-webhook-signatures)
|
|
216
|
+
[Verifying Webhook Signatures](https://docs.linqapp.com/channel/imessage/guides/webhooks#verifying-webhook-signatures)
|
|
217
217
|
for verification details
|
|
218
218
|
- Failed deliveries (5xx, 429, network errors) are retried up to 10 times over
|
|
219
219
|
~25 minutes with exponential backoff
|
|
@@ -593,7 +593,7 @@ class AsyncWebhookSubscriptionsResource(AsyncAPIResource):
|
|
|
593
593
|
- Legacy `X-Webhook-*` headers are also sent for backwards compatibility
|
|
594
594
|
(deprecated)
|
|
595
595
|
- See
|
|
596
|
-
[Verifying Webhook Signatures](https://docs.linqapp.com/guides/webhooks#verifying-webhook-signatures)
|
|
596
|
+
[Verifying Webhook Signatures](https://docs.linqapp.com/channel/imessage/guides/webhooks#verifying-webhook-signatures)
|
|
597
597
|
for verification details
|
|
598
598
|
- Failed deliveries (5xx, 429, network errors) are retried up to 10 times over
|
|
599
599
|
~25 minutes with exponential backoff
|
|
@@ -18,7 +18,7 @@ class HealthStatus(BaseModel):
|
|
|
18
18
|
|
|
19
19
|
Switch on `status` to surface chat and line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide. To gate a send, act on the response rather than the status: a `403` is the authoritative answer.
|
|
20
20
|
|
|
21
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.
|
|
21
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what each status means and how to react.
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
24
|
doc_url: str
|
|
@@ -27,8 +27,8 @@ class HealthStatus(BaseModel):
|
|
|
27
27
|
status: Literal["HEALTHY", "AT_RISK", "CRITICAL", "OPTED_OUT"]
|
|
28
28
|
"""Current health bucket for the chat.
|
|
29
29
|
|
|
30
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
31
|
-
and how to react. `doc_url` deep-links to the relevant section.
|
|
30
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
31
|
+
each value means and how to react. `doc_url` deep-links to the relevant section.
|
|
32
32
|
|
|
33
33
|
`OPTED_OUT` — the recipient sent `STOP`, `UNSUBSCRIBE`, `OPTOUT`, `CANCEL`,
|
|
34
34
|
`END`, or `QUIT`. The keyword must be the whole trimmed message, never part of a
|
|
@@ -88,8 +88,8 @@ class Chat(BaseModel):
|
|
|
88
88
|
relevant section of the Chat Health guide. To gate a send, act on the response
|
|
89
89
|
rather than the status: a `403` is the authoritative answer.
|
|
90
90
|
|
|
91
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
92
|
-
means and how to react.
|
|
91
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
92
|
+
each status means and how to react.
|
|
93
93
|
"""
|
|
94
94
|
|
|
95
95
|
is_archived: bool
|
|
@@ -19,7 +19,7 @@ class ChatHealthStatus(BaseModel):
|
|
|
19
19
|
|
|
20
20
|
Switch on `status` to surface chat and line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide. To gate a send, act on the response rather than the status: a `403` is the authoritative answer.
|
|
21
21
|
|
|
22
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.
|
|
22
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what each status means and how to react.
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
25
|
doc_url: str
|
|
@@ -28,8 +28,8 @@ class ChatHealthStatus(BaseModel):
|
|
|
28
28
|
status: Literal["HEALTHY", "AT_RISK", "CRITICAL", "OPTED_OUT"]
|
|
29
29
|
"""Current health bucket for the chat.
|
|
30
30
|
|
|
31
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
32
|
-
and how to react. `doc_url` deep-links to the relevant section.
|
|
31
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
32
|
+
each value means and how to react. `doc_url` deep-links to the relevant section.
|
|
33
33
|
|
|
34
34
|
`OPTED_OUT` — the recipient sent `STOP`, `UNSUBSCRIBE`, `OPTOUT`, `CANCEL`,
|
|
35
35
|
`END`, or `QUIT`. The keyword must be the whole trimmed message, never part of a
|
|
@@ -86,8 +86,8 @@ class Chat(BaseModel):
|
|
|
86
86
|
relevant section of the Chat Health guide. To gate a send, act on the response
|
|
87
87
|
rather than the status: a `403` is the authoritative answer.
|
|
88
88
|
|
|
89
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
90
|
-
means and how to react.
|
|
89
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
90
|
+
each status means and how to react.
|
|
91
91
|
"""
|
|
92
92
|
|
|
93
93
|
is_group: bool
|
|
@@ -19,7 +19,7 @@ class DataHealthStatus(BaseModel):
|
|
|
19
19
|
|
|
20
20
|
Switch on `status` to surface chat and line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide. To gate a send, act on the response rather than the status: a `403` is the authoritative answer.
|
|
21
21
|
|
|
22
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.
|
|
22
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what each status means and how to react.
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
25
|
doc_url: str
|
|
@@ -28,8 +28,8 @@ class DataHealthStatus(BaseModel):
|
|
|
28
28
|
status: Literal["HEALTHY", "AT_RISK", "CRITICAL", "OPTED_OUT"]
|
|
29
29
|
"""Current health bucket for the chat.
|
|
30
30
|
|
|
31
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
32
|
-
and how to react. `doc_url` deep-links to the relevant section.
|
|
31
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
32
|
+
each value means and how to react. `doc_url` deep-links to the relevant section.
|
|
33
33
|
|
|
34
34
|
`OPTED_OUT` — the recipient sent `STOP`, `UNSUBSCRIBE`, `OPTOUT`, `CANCEL`,
|
|
35
35
|
`END`, or `QUIT`. The keyword must be the whole trimmed message, never part of a
|
|
@@ -94,8 +94,8 @@ class Data(BaseModel):
|
|
|
94
94
|
relevant section of the Chat Health guide. To gate a send, act on the response
|
|
95
95
|
rather than the status: a `403` is the authoritative answer.
|
|
96
96
|
|
|
97
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
98
|
-
means and how to react.
|
|
97
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
98
|
+
each status means and how to react.
|
|
99
99
|
"""
|
|
100
100
|
|
|
101
101
|
is_group: bool
|
|
@@ -212,6 +212,13 @@ class PartAppClipPart(TypedDict, total=False):
|
|
|
212
212
|
is rejected.
|
|
213
213
|
"""
|
|
214
214
|
|
|
215
|
+
caption: str
|
|
216
|
+
"""Optional caption for the card's **Open** button row.
|
|
217
|
+
|
|
218
|
+
Omit it and the card uses the App Clip's own default (`Tap open`). Set it to
|
|
219
|
+
override that with your own short call to action.
|
|
220
|
+
"""
|
|
221
|
+
|
|
215
222
|
|
|
216
223
|
Part: TypeAlias = Union[TextPartParam, MediaPartParam, LinkPartParam, PartIMessageAppPart, PartAppClipPart]
|
|
217
224
|
|
|
@@ -17,7 +17,7 @@ class DataChatHealthStatus(BaseModel):
|
|
|
17
17
|
|
|
18
18
|
Switch on `status` to surface chat and line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide. To gate a send, act on the response rather than the status: a `403` is the authoritative answer.
|
|
19
19
|
|
|
20
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.
|
|
20
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what each status means and how to react.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
doc_url: str
|
|
@@ -26,8 +26,8 @@ class DataChatHealthStatus(BaseModel):
|
|
|
26
26
|
status: Literal["HEALTHY", "AT_RISK", "CRITICAL", "OPTED_OUT"]
|
|
27
27
|
"""Current health bucket for the chat.
|
|
28
28
|
|
|
29
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
30
|
-
and how to react. `doc_url` deep-links to the relevant section.
|
|
29
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
30
|
+
each value means and how to react. `doc_url` deep-links to the relevant section.
|
|
31
31
|
|
|
32
32
|
`OPTED_OUT` — the recipient sent `STOP`, `UNSUBSCRIBE`, `OPTOUT`, `CANCEL`,
|
|
33
33
|
`END`, or `QUIT`. The keyword must be the whole trimmed message, never part of a
|
|
@@ -72,8 +72,8 @@ class DataChat(BaseModel):
|
|
|
72
72
|
relevant section of the Chat Health guide. To gate a send, act on the response
|
|
73
73
|
rather than the status: a `403` is the authoritative answer.
|
|
74
74
|
|
|
75
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
76
|
-
means and how to react.
|
|
75
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
76
|
+
each status means and how to react.
|
|
77
77
|
"""
|
|
78
78
|
|
|
79
79
|
is_group: bool
|
|
@@ -33,7 +33,7 @@ class ChatHealthStatus(BaseModel):
|
|
|
33
33
|
|
|
34
34
|
Switch on `status` to surface chat and line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide. To gate a send, act on the response rather than the status: a `403` is the authoritative answer.
|
|
35
35
|
|
|
36
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.
|
|
36
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what each status means and how to react.
|
|
37
37
|
"""
|
|
38
38
|
|
|
39
39
|
doc_url: str
|
|
@@ -42,8 +42,8 @@ class ChatHealthStatus(BaseModel):
|
|
|
42
42
|
status: Literal["HEALTHY", "AT_RISK", "CRITICAL", "OPTED_OUT"]
|
|
43
43
|
"""Current health bucket for the chat.
|
|
44
44
|
|
|
45
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
46
|
-
and how to react. `doc_url` deep-links to the relevant section.
|
|
45
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
46
|
+
each value means and how to react. `doc_url` deep-links to the relevant section.
|
|
47
47
|
|
|
48
48
|
`OPTED_OUT` — the recipient sent `STOP`, `UNSUBSCRIBE`, `OPTOUT`, `CANCEL`,
|
|
49
49
|
`END`, or `QUIT`. The keyword must be the whole trimmed message, never part of a
|
|
@@ -88,8 +88,8 @@ class Chat(BaseModel):
|
|
|
88
88
|
relevant section of the Chat Health guide. To gate a send, act on the response
|
|
89
89
|
rather than the status: a `403` is the authoritative answer.
|
|
90
90
|
|
|
91
|
-
See the [Chat Health guide](/guides/chats/chat-health) for what
|
|
92
|
-
means and how to react.
|
|
91
|
+
See the [Chat Health guide](/channel/imessage/guides/chats/chat-health) for what
|
|
92
|
+
each status means and how to react.
|
|
93
93
|
"""
|
|
94
94
|
|
|
95
95
|
is_group: Optional[bool] = None
|
|
@@ -15,7 +15,7 @@ class PhoneNumberReputation(BaseModel):
|
|
|
15
15
|
|
|
16
16
|
Unlike chat health, line reputation does not include `opted_out` — opt-out applies to individual recipients, not the whole line.
|
|
17
17
|
|
|
18
|
-
See the [Phone Reputation guide](/guides/phone-numbers/phone-reputation) for what each status means and how to react.
|
|
18
|
+
See the [Phone Reputation guide](/channel/imessage/guides/phone-numbers/phone-reputation) for what each status means and how to react.
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
doc_url: str
|
|
@@ -55,8 +55,9 @@ class PhoneNumber(BaseModel):
|
|
|
55
55
|
Unlike chat health, line reputation does not include `opted_out` — opt-out
|
|
56
56
|
applies to individual recipients, not the whole line.
|
|
57
57
|
|
|
58
|
-
See the
|
|
59
|
-
|
|
58
|
+
See the
|
|
59
|
+
[Phone Reputation guide](/channel/imessage/guides/phone-numbers/phone-reputation)
|
|
60
|
+
for what each status means and how to react.
|
|
60
61
|
"""
|
|
61
62
|
|
|
62
63
|
forwarding_number: Optional[str] = None
|
|
@@ -10,7 +10,7 @@ __all__ = ["WebhookEventListResponse"]
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class WebhookEventListResponse(BaseModel):
|
|
13
|
-
doc_url: Literal["https://docs.linqapp.com/guides/webhooks/events"]
|
|
13
|
+
doc_url: Literal["https://docs.linqapp.com/channel/imessage/guides/webhooks/events"]
|
|
14
14
|
"""URL to the webhook events documentation"""
|
|
15
15
|
|
|
16
16
|
events: List[WebhookEventType]
|
|
@@ -31,7 +31,7 @@ class TestWebhooks:
|
|
|
31
31
|
|
|
32
32
|
client = client.with_options(webhook_secret=client_opt)
|
|
33
33
|
|
|
34
|
-
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z"},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
34
|
+
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/channel/imessage/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z"},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
35
35
|
msg_id = "1"
|
|
36
36
|
timestamp = datetime.now(tz=timezone.utc)
|
|
37
37
|
sig = hook.sign(msg_id=msg_id, timestamp=timestamp, data=data)
|
|
@@ -78,7 +78,7 @@ class TestAsyncWebhooks:
|
|
|
78
78
|
|
|
79
79
|
async_client = async_client.with_options(webhook_secret=client_opt)
|
|
80
80
|
|
|
81
|
-
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z"},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
81
|
+
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/channel/imessage/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z"},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
82
82
|
msg_id = "1"
|
|
83
83
|
timestamp = datetime.now(tz=timezone.utc)
|
|
84
84
|
sig = hook.sign(msg_id=msg_id, timestamp=timestamp, data=data)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|