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.
Files changed (266) hide show
  1. linq_python-0.39.1/.release-please-manifest.json +3 -0
  2. {linq_python-0.38.0 → linq_python-0.39.1}/CHANGELOG.md +14 -0
  3. {linq_python-0.38.0 → linq_python-0.39.1}/PKG-INFO +1 -1
  4. {linq_python-0.38.0 → linq_python-0.39.1}/pyproject.toml +1 -1
  5. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_client.py +12 -12
  6. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_version.py +1 -1
  7. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payment_requests.py +4 -4
  8. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/webhook_subscriptions.py +2 -2
  9. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat.py +5 -5
  10. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_create_response.py +5 -5
  11. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_created_webhook_event.py +5 -5
  12. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_content_param.py +7 -0
  13. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_edited_webhook_event.py +5 -5
  14. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_event_v2.py +5 -5
  15. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_list_response.py +4 -3
  16. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_event_list_response.py +1 -1
  17. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_webhooks.py +2 -2
  18. {linq_python-0.38.0 → linq_python-0.39.1}/uv.lock +1 -1
  19. linq_python-0.38.0/.release-please-manifest.json +0 -3
  20. {linq_python-0.38.0 → linq_python-0.39.1}/.gitignore +0 -0
  21. {linq_python-0.38.0 → linq_python-0.39.1}/CONTRIBUTING.md +0 -0
  22. {linq_python-0.38.0 → linq_python-0.39.1}/LICENSE +0 -0
  23. {linq_python-0.38.0 → linq_python-0.39.1}/README.md +0 -0
  24. {linq_python-0.38.0 → linq_python-0.39.1}/SECURITY.md +0 -0
  25. {linq_python-0.38.0 → linq_python-0.39.1}/api.md +0 -0
  26. {linq_python-0.38.0 → linq_python-0.39.1}/bin/check-release-environment +0 -0
  27. {linq_python-0.38.0 → linq_python-0.39.1}/bin/publish-pypi +0 -0
  28. {linq_python-0.38.0 → linq_python-0.39.1}/examples/.keep +0 -0
  29. {linq_python-0.38.0 → linq_python-0.39.1}/release-please-config.json +0 -0
  30. {linq_python-0.38.0 → linq_python-0.39.1}/requirements-dev.lock +0 -0
  31. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/__init__.py +0 -0
  32. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_base_client.py +0 -0
  33. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_compat.py +0 -0
  34. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_constants.py +0 -0
  35. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_exceptions.py +0 -0
  36. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_files.py +0 -0
  37. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_models.py +0 -0
  38. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_qs.py +0 -0
  39. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_resource.py +0 -0
  40. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_response.py +0 -0
  41. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_streaming.py +0 -0
  42. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_types.py +0 -0
  43. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/__init__.py +0 -0
  44. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_compat.py +0 -0
  45. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_datetime_parse.py +0 -0
  46. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_json.py +0 -0
  47. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_logs.py +0 -0
  48. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_path.py +0 -0
  49. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_proxy.py +0 -0
  50. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_reflection.py +0 -0
  51. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_resources_proxy.py +0 -0
  52. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_streams.py +0 -0
  53. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_sync.py +0 -0
  54. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_transform.py +0 -0
  55. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_typing.py +0 -0
  56. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/_utils/_utils.py +0 -0
  57. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/lib/.keep +0 -0
  58. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/pagination.py +0 -0
  59. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/py.typed +0 -0
  60. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/__init__.py +0 -0
  61. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/attachments.py +0 -0
  62. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/available_number.py +0 -0
  63. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/blocked_handles.py +0 -0
  64. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/capability.py +0 -0
  65. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/__init__.py +0 -0
  66. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/background.py +0 -0
  67. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/chats.py +0 -0
  68. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/location.py +0 -0
  69. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/messages.py +0 -0
  70. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/participants.py +0 -0
  71. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/polls.py +0 -0
  72. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/chats/typing.py +0 -0
  73. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/contact_card.py +0 -0
  74. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/experiences.py +0 -0
  75. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/messages/__init__.py +0 -0
  76. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/messages/messages.py +0 -0
  77. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/messages/poll.py +0 -0
  78. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payment_handles.py +0 -0
  79. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payment_providers.py +0 -0
  80. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/payments.py +0 -0
  81. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/phone_numbers.py +0 -0
  82. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/phonenumbers.py +0 -0
  83. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/webhook_events.py +0 -0
  84. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/resources/webhooks.py +0 -0
  85. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/__init__.py +0 -0
  86. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/attachment_create_params.py +0 -0
  87. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/attachment_create_response.py +0 -0
  88. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/attachment_retrieve_response.py +0 -0
  89. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/available_number_retrieve_params.py +0 -0
  90. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/available_number_retrieve_response.py +0 -0
  91. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_block_params.py +0 -0
  92. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_block_response.py +0 -0
  93. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_entry.py +0 -0
  94. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_list_response.py +0 -0
  95. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/blocked_handle_unblock_params.py +0 -0
  96. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/capability_check_RCS_params.py +0 -0
  97. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/capability_check_i_message_params.py +0 -0
  98. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_background_update_failed_webhook_event.py +0 -0
  99. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_background_updated_webhook_event.py +0 -0
  100. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_create_params.py +0 -0
  101. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
  102. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
  103. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
  104. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
  105. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_leave_chat_response.py +0 -0
  106. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_list_chats_params.py +0 -0
  107. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_send_voicememo_params.py +0 -0
  108. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_send_voicememo_response.py +0 -0
  109. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
  110. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
  111. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_update_params.py +0 -0
  112. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chat_update_response.py +0 -0
  113. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/__init__.py +0 -0
  114. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/background_set_params.py +0 -0
  115. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/get_chat_location_response.py +0 -0
  116. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/location_request_response.py +0 -0
  117. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/message_list_params.py +0 -0
  118. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/message_send_params.py +0 -0
  119. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/message_send_response.py +0 -0
  120. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_add_params.py +0 -0
  121. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_add_response.py +0 -0
  122. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_remove_params.py +0 -0
  123. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/participant_remove_response.py +0 -0
  124. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/poll.py +0 -0
  125. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/poll_create_params.py +0 -0
  126. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/poll_envelope.py +0 -0
  127. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/chats/sent_message.py +0 -0
  128. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_create_params.py +0 -0
  129. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_retrieve_params.py +0 -0
  130. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_retrieve_response.py +0 -0
  131. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/contact_card_update_params.py +0 -0
  132. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/experience_list_response.py +0 -0
  133. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/experience_retrieve_response.py +0 -0
  134. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/handle_check_response.py +0 -0
  135. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/link_part_param.py +0 -0
  136. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/media_part_param.py +0 -0
  137. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message.py +0 -0
  138. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_add_reaction_params.py +0 -0
  139. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_add_reaction_response.py +0 -0
  140. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_create_params.py +0 -0
  141. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_create_response.py +0 -0
  142. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_delivered_webhook_event.py +0 -0
  143. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_effect.py +0 -0
  144. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_effect_param.py +0 -0
  145. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_failed_webhook_event.py +0 -0
  146. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_list_messages_thread_params.py +0 -0
  147. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_read_webhook_event.py +0 -0
  148. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_received_webhook_event.py +0 -0
  149. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_sent_webhook_event.py +0 -0
  150. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_update_app_card_params.py +0 -0
  151. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_update_app_card_response.py +0 -0
  152. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/message_update_params.py +0 -0
  153. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/messages/__init__.py +0 -0
  154. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/messages/poll_add_options_params.py +0 -0
  155. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/messages/poll_vote_params.py +0 -0
  156. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/participant_added_webhook_event.py +0 -0
  157. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/participant_removed_webhook_event.py +0 -0
  158. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment.py +0 -0
  159. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_create_params.py +0 -0
  160. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_credentials_response.py +0 -0
  161. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_handle_connection.py +0 -0
  162. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_handle_verify_params.py +0 -0
  163. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_provider.py +0 -0
  164. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_provider_connect_params.py +0 -0
  165. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_provider_connect_response.py +0 -0
  166. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request.py +0 -0
  167. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request_create_params.py +0 -0
  168. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request_list_params.py +0 -0
  169. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/payment_request_list_response.py +0 -0
  170. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_status_updated_webhook_event.py +0 -0
  171. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_update_params.py +0 -0
  172. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phone_number_update_response.py +0 -0
  173. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/phonenumber_list_response.py +0 -0
  174. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_delivered_webhook_event.py +0 -0
  175. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_failed_webhook_event.py +0 -0
  176. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_reaction_added_webhook_event.py +0 -0
  177. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_read_webhook_event.py +0 -0
  178. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_received_webhook_event.py +0 -0
  179. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_sent_webhook_event.py +0 -0
  180. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_updated_webhook_event.py +0 -0
  181. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_vote_added_webhook_event.py +0 -0
  182. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/poll_vote_removed_webhook_event.py +0 -0
  183. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reaction_added_webhook_event.py +0 -0
  184. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reaction_event_base.py +0 -0
  185. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reaction_removed_webhook_event.py +0 -0
  186. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reply_to.py +0 -0
  187. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reply_to_param.py +0 -0
  188. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_action_item.py +0 -0
  189. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_audit.py +0 -0
  190. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_audit_started.py +0 -0
  191. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_driver.py +0 -0
  192. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_driver_key.py +0 -0
  193. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_evidence.py +0 -0
  194. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_opt_out_chat.py +0 -0
  195. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_report.py +0 -0
  196. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/reputation_unhealthy_chat.py +0 -0
  197. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/schemas_media_part_response.py +0 -0
  198. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/schemas_message_effect.py +0 -0
  199. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/schemas_text_part_response.py +0 -0
  200. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/set_contact_card.py +0 -0
  201. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/__init__.py +0 -0
  202. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/chat_handle.py +0 -0
  203. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/link_part_response.py +0 -0
  204. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/media_part_response.py +0 -0
  205. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/reaction.py +0 -0
  206. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/reaction_type.py +0 -0
  207. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/service_type.py +0 -0
  208. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/text_decoration.py +0 -0
  209. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared/text_part_response.py +0 -0
  210. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/__init__.py +0 -0
  211. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/reaction_type.py +0 -0
  212. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/service_type.py +0 -0
  213. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/shared_params/text_decoration.py +0 -0
  214. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/supported_content_type.py +0 -0
  215. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/text_part_param.py +0 -0
  216. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/unwrap_webhook_event.py +0 -0
  217. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_event_type.py +0 -0
  218. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription.py +0 -0
  219. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_create_params.py +0 -0
  220. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_create_response.py +0 -0
  221. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_list_response.py +0 -0
  222. {linq_python-0.38.0 → linq_python-0.39.1}/src/linq/types/webhook_subscription_update_params.py +0 -0
  223. {linq_python-0.38.0 → linq_python-0.39.1}/tests/__init__.py +0 -0
  224. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/__init__.py +0 -0
  225. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/__init__.py +0 -0
  226. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_background.py +0 -0
  227. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_location.py +0 -0
  228. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_messages.py +0 -0
  229. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_participants.py +0 -0
  230. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_polls.py +0 -0
  231. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/chats/test_typing.py +0 -0
  232. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/messages/__init__.py +0 -0
  233. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/messages/test_poll.py +0 -0
  234. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_attachments.py +0 -0
  235. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_available_number.py +0 -0
  236. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_blocked_handles.py +0 -0
  237. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_capability.py +0 -0
  238. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_chats.py +0 -0
  239. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_contact_card.py +0 -0
  240. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_experiences.py +0 -0
  241. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_messages.py +0 -0
  242. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payment_handles.py +0 -0
  243. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payment_providers.py +0 -0
  244. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payment_requests.py +0 -0
  245. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_payments.py +0 -0
  246. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_phone_numbers.py +0 -0
  247. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_phonenumbers.py +0 -0
  248. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_webhook_events.py +0 -0
  249. {linq_python-0.38.0 → linq_python-0.39.1}/tests/api_resources/test_webhook_subscriptions.py +0 -0
  250. {linq_python-0.38.0 → linq_python-0.39.1}/tests/conftest.py +0 -0
  251. {linq_python-0.38.0 → linq_python-0.39.1}/tests/sample_file.txt +0 -0
  252. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_client.py +0 -0
  253. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_extract_files.py +0 -0
  254. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_files.py +0 -0
  255. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_models.py +0 -0
  256. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_qs.py +0 -0
  257. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_required_args.py +0 -0
  258. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_response.py +0 -0
  259. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_streaming.py +0 -0
  260. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_transform.py +0 -0
  261. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_datetime_parse.py +0 -0
  262. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_json.py +0 -0
  263. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_path.py +0 -0
  264. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_proxy.py +0 -0
  265. {linq_python-0.38.0 → linq_python-0.39.1}/tests/test_utils/test_typing.py +0 -0
  266. {linq_python-0.38.0 → linq_python-0.39.1}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.39.1"
3
+ }
@@ -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.38.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "linq-python"
3
- version = "0.38.0"
3
+ version = "0.39.1"
4
4
  description = "The official Python library for the linq-api-v3 API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -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
 
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "linq"
4
- __version__ = "0.38.0" # x-release-please-version
4
+ __version__ = "0.39.1" # x-release-please-version
@@ -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 each value means
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 each status
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 each value means
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 each status
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 each value means
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 each status
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 each value means
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 each status
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 each value means
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 each status
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 [Phone Reputation guide](/guides/phone-numbers/phone-reputation) for
59
- what each status means and how to react.
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)
@@ -530,7 +530,7 @@ wheels = [
530
530
 
531
531
  [[package]]
532
532
  name = "linq-python"
533
- version = "0.37.1"
533
+ version = "0.39.0"
534
534
  source = { editable = "." }
535
535
  dependencies = [
536
536
  { name = "anyio" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.38.0"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes